1.线程与进程之间的关系
什么是进程(Process):普通的解释就是,进程是程序的一次执行,而什么是线程(Thread),线程可以理解为进程中的执行的一段程序片段。在一个多任务环境中下面的概念可以帮助我们理解两者间的差别: 进程间是独立的,这表现在内存空间,上下文环境;线程运行在进程空间内。 一般来讲(不使用特殊技术)进程是无法突破进程边界存取其他进程内的存储空间;而线程由于处于进程空间内,所以同一进程所产生的线程共享同一内存空间。 同一进程中的两段代码不能够同时执行,除非引入线程。 线程是属于进程的,当进程退出时该进程所产生的线程都会被强制退出并清除。 线程占用的资源要少于进程所占用的资源。 进程和线程都可以有优先级。 在线程系统中进程也是一个线程。可以将进程理解为一个程序的第一个线程
2.HashMap的性能参数
HashMap():构建一个初始容量为 16,负载因子为 0.75 的 HashMap。
HashMap(int initialCapacity):构建一个初始容量为 initialCapacity,负载因子为 0.75 的 HashMap
负载因子衡量的是一个散列表的空间的使用程度,负载因子越大表示散列表的装填程度越高,反之愈小。对于使用链表法的散列表来说,查找一个元素的平均时间是O(1+a),因此如果负载因子越大,对空间的利用更充分,然而后果是查找效率的降低;如果负载因子太小,那么散列表的数据将过于稀疏,对空间造成严重浪费
对于java8对于hashmap的改进
如果某个桶中的记录过 大的话(当前是TREEIFY_THRESHOLD = 8),HashMap会动态的使用一个专门的treemap实现来替换掉它。这样做的结果会更好,是O(logn),而不是糟糕的O(n)
3.java类加载机制
虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析、初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制
装载:查找和导入Class文件
链接:把类的二进制数据合并到JRE中
校验:检查载入Class文件数据的正确性
准备:给类的静态变量分配存储空间
解析:将符号引用转成直接引用
初始化:对类的静态变量,静态代码块执行初始化操作
双亲委派模式
JDK1.2开始,java虚拟机规范推荐开发者使用双亲委派模式,其加载过程如下:
(1).如果一个类加载器收到了类加载请求,它首先不会自己去尝试加载这个类,而是把类加载请求委派给父类加载器去完成。
(2).每一层的类加载器都把类加载请求委派给父类加载器,直到所有的类加载请求都应该传递给顶层的启动类加载器。
(3).如果顶层的启动类加载器无法完成加载请求,子类加载器尝试去加载,如果连最初发起类加载请求的类加载器也无法完成加载请求时,将会抛出ClassNotFoundException,而不再调用其子类加载器去进行类加载。
双亲委派 模式的类加载机制的优点是java类它的类加载器一起具备了一种带优先级的层次关系,越是基础的类,越是被上层的类加载器进行加载,保证了java程序的稳定运行
4.HTTP POST 和GET的区别和联系
1.GET提交,请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,多个参数用&连接;例如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0 %E5%A5%BD
POST提交:把提交的数据放置在是HTTP包的包体中
因此,GET提交的数据会在地址栏中显示出来,而POST提交,地址栏不会改变
2.GET提交时,传输数据就会受到URL长度的 限制,POST:由于不是通过URL传值,理论上数据不受 限
3.安全性:POST的安全性要比GET的安全性高,通过GET提交数据,用户名和密码将明文出现在URL上,因为(1)登录页面有可能被浏览器缓存, (2)其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了,除此之外,使用GET提交数据还可能会造成Cross-site request forgery攻击
5.MYSQL5.7版本的新特性
1.增加计算列
在MySQL5.7之前的版本,想要实现计算列的功能
如定义c3为计算列:
create table t(id auto_increment not null, c1 int, c2 int, c3 int as (t1 + t2), primary key(id));
这样,insert或者update c1和c2之后,c3的值会自动变化
2.引入JSON列类型
在MySQL5.7之前的版本中,如果要使用JSON类型,只能在varchar或者text等字符类型的列中存储JSON类型的字符串,并通过程序解析使用JSON字符串。
MySQL5.7版本中,增加了JSON列类型以及JSON相关处理函数,如json_type(), json_object(), json_merge等。
JSON列类型包括JSON数组和JSON对象两种
6.Mysql数据库的操作
两表查询:
Select A.Aid,B.text from A left join B on A.Bid = B.Bid;
例如:select xxx,xxx from xxx left join xxx on A.id = B.id group by xxx.
嵌套查询:
一个查询语句(select-from-where)查询语句块可以嵌套在另外一个查询块的where子句中,称为嵌套查询。其中外层查询也称为父查询,主查询。内层查询也称子查询,从查询
简单子查询
select name,age from person where age >
(
select age from person
where name = '孙权'
)
In嵌套查询
in关键字用于where子句中用来判断查询的表达式是否在多个值的列表中。返回满足in列表中的满足条件的记录
select name from person where countryid in
(
select countryid from country
where countryname = '魏国'
)
补充:如何创建索引
对于索引来说,如果当我们创建数据库的时候,如果设置了主键,则mysql会自动给主键建立索引。
同时我们也可以使用命令创建索引:create index t_user_user_id on t_user(user_id)
以上两种就是我们创建索引的方式
7.Static块以及代码块的执行顺序
class A{
public A(){
System.out.println("Hello A");
}
{
System.out.println("block A");
}
static{
System.out.println("static A");
}
}
public class B extends A{
public B(){
System.out.println("Hello B");
}
{
System.out.println("Block B");
}
static{
System.out.println("static B");
}
public static void main(String[] args) {
B d = new B();
}
}
输出:
static A
static B
block A
Hello A
Block B
Hello B
思考一下:静态代码块> 普通代码块 > 构造代码块