java流程控制 用户交互scanner 使用next方式接收:
package com.maru.scanner; import java.util.Scanner; public class Demo01 { public static void main(String[] args) { //创建一个扫描器对象,用于接收键盘数据 Scanner scanner = new Scanner(System.in); System.out.println(使用next方式接收:); //判断用户有没有输入字符串 if (scanner.hasNext()){ //使用next方式接受 String str = scanner.next();//程序会等待用户输入完毕 System.out.println(输出的内容为字符串;+str ); } //凡是属于IO流的类如果不关闭就会一直占用资源,要养成好习惯用完就关掉 scanner.close(); } } 使用nextline方式接收:if可以去掉
package com.maru.scanner; import java.util.Scanner; public class Demo01 { public static void main(String[] args) { //创建一个扫描器对象,用于接收键盘数据 Scanner scanner = new Scanner(System.in); System.out.println(使用next方式接收:); //判断用户有没有输入字符串 if (scanner.hasNext()){ //使用next方式接受 String str = scanner.next();//程序会等待用户输入完毕 System.
一、列表(list)
1.特点 1)索引从0开始 2)list是有序的 3)可变的 4)元素可以重复 5)同一个list支持任意的数据类型 2.增(创建)
list_1=[1,2,3,4] 3.查
1)通过索引获取元素 ——list_1[index]
list_1=[1,2,3,4,5]print(list_1[0]) #获取索引0位的元素 打印出索引0位置的元素是1 2)获取元素的索引值 ——list_1.index(value)
list_1=[1,2,3,4,5]print(list_1.index(list_1[0])) #打印出索引0 3)统计元素出现的次数——list_1.count('val')
list_1=[1,2,3,4,5,1,3,1,1,1]print(list_1.count(1)) #打印出列表元素1的出现的次数是5 4)获取列表长度——len(list_1)
list_1=[1,2,3,4,5]print(len(list_1)) #打印出列表长度5 5)切片:list[开始索引:结束索引:步长]
跟字符串切片一样
list切片和字符串切片的区别:字符串是单个数字/字母为单位,list是元素为单位
list_1=[1,2,3,4,5,1,3,1,1,1]print(list_1[0:3]) #打印出从索引0到索引3的列表[1, 2, 3]print(list_1[-1:-3:-1]) #打印出从索引-1到索引-3的列表[1, 1] str_1=hello pythonprint(str_1[::-1]) #打印出nohtyp ollehlist_1=[hello, python]print(list_1[::-1]) #打印出['python', 'hello'] 4.改 1)修改原列表元素:list_1[index]=value
list_1=[1,2,3,4,5,'dsf']list_1[0]='test'print(list_1) 打印出list_1=['test',2,3,4,5,'dsf'] 2)追加到最后一位:append
list_1.append(需要插入的元素)list_1=[1,2,3,4,5,'dsf']list_1.append('test') 打印出list_1=[1,2,3,4,5,'dsf','test'] 3)插入:insert
list_1.insert(index,需要插入的元素)list_1=[1,2,3,4,5,'dsf']list_1.insert(1,'test') 打印出list_1=[1,'test',2,3,4,5,'dsf'] 4)合并:extend list_1.extend(list_2)
list_1=[1,2,3,4,5,'dsf']list_2=['a','b']list_1.extend(list_2) 将list_2里的所有元素追到到list_1中,list_2不变 打印出list_1=[1,2,3,4,5,'dsf','a','b'] 5)合并:+
1、java 中实现多态的机制是什么?
2、abstract class 和 interface 有什么区别?
3、abstract 的 method 是否可同时是 static,是否可同时是 native,是否可同时是 synchronized?
4、什么是内部类?Static Nested Class 和 Inner Class 的不同。
5、String 和 StringBuffer 的区别
6、Anonymous Inner Class (匿名内部类) 是否可以 extends(继承)其它类,是否可以 implements(实现)interface(接 口)?
7、String 是最基本的数据类型吗?
8、String s = Hello;s = s + world!;这两行代码执行后,原始的 String 对象中的内容到底变了没有?
9、是否可以继承 String 类?
10、String s = new String(xyz);创建了几个 String Object? 二者之间有什么区别?
1、java 中实现多态的机制是什么?靠的是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,而程序调用的方法在运行期才动态 绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量 的类型中定义的方法。
2、abstract class 和 interface 有什么区别?含有 abstract 修饰符的 class 即为抽象类,abstract 类不能创建的实例对象。含有 abstract 方法的类必须定义为 abstract class,abstract class类中的方法不必是抽象的。abstract class类中定义抽象方法必须在具体(Concrete)子类 中实现,所以,不能有抽象构造方法或抽象静态方法。如果的子类没有实现抽象父类中的所有抽象方法,那么子 类也必须定义为 abstract 类型。
实验任务3: 1 with open('data3.txt','r',encoding='utf-8') as f: 2 date=[] 3 for line in f.readlines(): 4 line=line.strip() 5 date.append(line) 6 date.pop(0) 7 print('原始数据:') 8 print('['+','.join(date)+']') 9 with open('data3_processed.txt','w',encoding='utf-8') as f: 10 date1=[] 11 for i in date: 12 i=eval(i) 13 if i-int(i)<0.5: 14 i=int(i) 15 else: 16 i=int(i)+1 17 date1.append(i) 18 date.insert(0,'原始数据') 19 date1.insert(0,'四舍五入后数据') 20 for i in range(len(date)): 21 f.write(f{date[i]}\t{date1[i]}\n) 22 date1.pop(0) 23 print('四舍五入后数据:') 24 print(date1) 实验任务4: 1 with open('data4.
django小白必会三板斧 启动django项目之后如何添加更多的功能?通过之前直接编写的web框架,我们可以知道添加更多的功能可以去编写urls.py和views.py。
django自带重启功能。当识别到项目中代码有变化之后隔段时间会自动重启,但是有时候较慢。
与浏览器打交道的视图函数都应该有返回值,常见的就是下列三个。
HttpResponse---主要用于返回字符串类型的数据 render---主要用于返回html文件,并且支持模板语法(django自己写的) redirect---主要用于重定向,括号内可以写其他网站的全称,也可以自己网站的后缀 案例: def index(request): return HttpResponse('你好啊 django的学习可容不得半点马虎!!!') return render(request, 'index.html') return render(request, 'index.html',{'name':'jason'}) return redirect('https://www.sogo.com') 登入功能 我们之所以可以在浏览器地址栏中输入不同的路由访问到不同的资源,是因为我们在后端框架中提前开设了相应的访问接口所以用户才能访问。言外之意就是我们没有开设接口,那么肯定访问不到。
1.所以我们想要写登入功能,就应该开设一个接口。
思路:在templates里写一个'login.html'用于登入的页面,然后views.py里写上login的功能函数返回login.html,最后在urls.py创建后缀和函数匹配。
# views,py def login(request): return render(request,'login.html') # urls.py urlpatterns = [ # url(r'^admin/', admin.site.urls), url(r'^login/', views.login), ] 目前是实现了可以通过后缀访问到指定的html页面。
2.登录界面需要使用bootstrap并且还需要自己编写css和js(下面内容以bootstrap为静态文件做例子)
先知道什么是静态文件?
# 编写完成后不会经常被修改的与html页面相关的文件 css文件、js文件、图片文件、第三方框架文件(bootstrap),上述文件都可以称之为是'静态文件' 在django中静态文件单独开设一个文件夹存储,默认叫static文件夹,在该文件夹内还可以根据功能的不同继续划分不同的文件,css文件夹,js文件,img文件夹 others文件夹. 思路:在项目目录下创建一个static的文件存放静态文件,然后创建接口访问static里的静态文件。
知识:理论上应该自己去路由层开设接口资源,但是由于静态文件资源使用频率很高,只要是一个web项目都肯定需要,所以django为了避免开发者繁琐,提供了静态资源的配置文件,只需要填写固定的配置即可开设资源接口。
# 在settings.py最下方 STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static') ] # html页面路径 <link rel=stylesheet href=/static/bootstrap-3.3.7-dist/css/bootstrap.min(1).css> 配置文件中的亮点疑惑:
1、如何把一段逗号分割的字符串转换成一个数组?
2、数组有没有 length()这个方法? String 有没有 length()这个方法?
3、下面这条语句一共创建了多少个对象:String s=a+b+c+d;
4、try {}里有一个 return 语句,那么紧跟在这个 try 后的 finally {}里的 code 会不会被执行,什么时候被执行,在 return 前还是后?
5、final, finally, finalize 的区别
6、运行时异常与一般异常有何异同?
7、error 和 exception 有什么区别?
8、Java 中的异常处理机制的简单原理和应用。
9、sleep() 和 wait() 有什么区别?
10、同步和异步有何异同,在什么情况下分别使用他们?举例说明。
1、如何把一段逗号分割的字符串转换成一个数组?1. 用正则表达式,代码大概为:
String [] result = orgStr.split(“,”);2. 用 StingTokenizer ,代码为:
StringTokenizer tokener = StringTokenizer(orgStr,”,”); String [] result = new String[tokener .countTokens()]; Int i=0; while(tokener.hasNext(){ result[i++]=toker.nextToken(); }2、数组有没有 length()这个方法? String 有没有 length()这个方法?数组没有 length()这个方法,有 length 的属性。String 有有 length()这个方法。
1、多线程有几种实现方法?同步有几种实现方法?
2、启动一个线程是用 run()还是 start()? 3、当一个线程进入一个对象的一个 synchronized 方法后,其它线程是否可进入此对象的其它方法?
4、线程的基本概念、线程的基本状态以及状态之间的关系?
5、简述 synchronized 和 java.util.concurrent.locks.Lock 的异同 ?
6、ArrayList 和 Vector 的区别
7、HashMap 和 Hashtable 的区别
8、List 和 Map 区别?
9、List, Set, Map 是否继承自 Collection 接口?
10、List、Map、Set 三个接口,存取元素时,各有什么特点?
1、多线程有几种实现方法?同步有几种实现方法?多线程有两种实现方法,分别是继承 Thread 类与实现 Runnable 接口
同步的实现方面有两种,分别是 synchronized,wait 与 notify wait():使一个线程处于等待状态,并且释放所持有的对象的 lock。
sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉 InterruptedException 异常。 notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等待状态的线程,而是由 JVM 确定唤醒哪个线程,而且不是按优先级。 Allnotity():唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们竞争。
2、启动一个线程是用 run()还是 start()? 启动一个线程是调用 start()方法,使线程就绪状态,以后可以被调度为运行状态,一个线程必须关联一些具体的执行代码,run()方法是该线程所关联的执行代码。
3、当一个线程进入一个对象的一个 synchronized 方法后,其它线程是否可进入此对象的其它方法?分几种情况:
1.其他方法前是否加了 synchronized 关键字,如果没加,则能。 2.如果这个方法内部调用了 wait,则可以进入其他 synchronized 方法。 3.如果其他个方法都加了 synchronized 关键字,并且内部没有调用 wait,则不能。
一、页面事件 在项目开发中,经常需要JavaScript对网页中的DOM元素进行操作,而页面的加载又是按照代码的编写顺序,从上到下依次执行。因此,若在页面还未记载完成的情况下,就使用JavaScript操作DOM元素,会出现语法错误,具体代码如下。
<script> document.getElementById(' demo').onclick = function () { console.log('单击');}; </script> <div id=demo> </div> 在上述代码中,首先利用JavaScript代码获取 id 为demo的元素,然后为其添加click事件,并在事件处理函数中,通过控制台输出提示信息“单击”。最后在 JavaScript代码后设计了一 id 为demo 的<div>元素,用于进行页面单击。
在控制台有错误提示,原因是页面在加载的过程中,没有获取到相应的元素对象。为了解决此问题,JavaScript提供了页面事件,可以改变JavaScript代码的执行时机。
事件名称 事件触发时机 load 当页面载入完毕后触发 unload 当页面关闭时触发 load事件用于body内所有标签都加载完成后才触发,又因其无需考虑页面加载顺序的问题,常常在开发具体功能时添加。unload 事件用于页面关闭时触发,开发中经常用于清除引用,避免内存泄漏。接下来,将上述 JavaScript 代码放到 load 事件的处理程序中,具体代码如下。
window.onload = function() { // JavaScript代码 }; 按照上述代码修改后,只有当 HTML 文本全部加载到浏览器中时,才会触发 load 事件。
二、焦点事件 在web开发中,焦点事件多用于表单验证功能,是最常用的事件之一。例如,文本框获取焦点改变文本框的样式,文本框失去焦点时验证文本框输入的数据等。常用的焦点事件如下表。
事件名称 事件触发时机 focus
1.redis的基本数据结构⼀(string/字符串) redis中没有使用C语言的字符串表示,而是自定义一个数据结构,叫SDS,即简单动态字符串,redis的字符串是简单动态安全的,存入什么数据取出还是什么数据。 Redis Strings是最简单的Redis类型,如果只用这种类型,Redis就相当于一个持久化的memcache服务器(memecache的数据仅仅保存在内存中,服务器重启后,数据将丢失)
String类型的常用命令有: 1.1 赋值/取值命令(set/get) redis赋值操作使用set命令,语法set key value,将键key设定为指定的字符串值;如果 key 已经保存了一个值,那么这个操作会直接覆盖原来的值,并且忽略原始类型;当set命令执行成功之后,之前设置的过期时间都将失效 范例:向redis中插入数据,键为name,值为zhangsan
127.0.0.1:6380> set name zhangsan OK 127.0.0.1:6380> keys * 1) name 127.0.0.1:6380> get name zhangsan 如果想同时插入多个数据,使用mset key value [key value ...] 将对应给定的keys到他们相应的values上;同理mget key [key ...]用于获取多个key的值
127.0.0.1:6380> mset k1 v1 k2 v2 k3 v3 OK 127.0.0.1:6380> mget k1 k2 k3 1) v1 2) v2 3) v3 1.2 删除命令(del) 删除命令为del,语法格式为del key 例如:删除name对应的数据值
127.0.0.1:6380> del name (integer) 1 127.0.0.1:6380> keys * 1) k3 2) k1 3) k2 1.
原文:https://blog.haohtml.com/archives/29385 Golang中的内存组件关系如下图所示
golang 内存分配组件 在学习golang 内存时,经常会涉及几个重要的数据结构,如果不熟悉它们的情况下,理解起来就显得格外的吃力,所以本篇主要对相关的几个内存组件做下数据结构的介绍。
在 Golang 中,mcache、mspan、mcentral 和 mheap 是内存管理的四大组件,mcache 管理线程在本地缓存的 mspan,而 mcentral 管理着全局的 mspan 为所有 mcache 提供所有线程。
根据分配对象的大小,内部会使用不同的内存分配机制,详细参考函数 mallocgo()
<16KB 会使用微小对象内存分配器从 P 中的 mcache 分配,主要使用 mcache.tinyXXX 这类的字段 16-32KB 从 P 中的 mcache 中分配 >32KB 直接从 mheap 中分配 对于golang中的内存申请流程,大家应该都非常熟悉了,这里不再进行详细描述。
Golang 内存组件关系 参考资料 mcache 在GPM关系中,会在每个 P 下都有一个 mcache 字段,用来表示内存信息。
在 Go 1.2 版本以前调度器使用的是 GM 模型,将 mcache 放在了 M 里,但发现存在诸多问题,其中对于内存这一块存在着巨大的浪费。每个 M 都持有 mcache 和 stack alloc,但只有在 M 运行 Go 代码时才需要使用内存(每个 mcache 可以高达2mb),当 M 在处于 syscall 或 网络请求 的时候是不需要内存的,再加上 M 又是允许创建多个的,这就造成了内存的很大浪费。所以从go 1.