第四期知识点

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

思考一下:静态代码块> 普通代码块 > 构造代码块

原文地址:https://www.cnblogs.com/wnbahmbb/p/6517577.html