java知识整理

1、cookie和session的作用、区别、应用范围。

答:a、cookie数据保存在客户端,session数据保存在服务端。

     b、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,相当重要的数据,应该使用session保存到服务端。

     c、session会在一定时间内保持在服务器上,但是会占用内存资源,当访问的用户过多,会加重服务器的负载,考虑到减轻服务器的压力,可以将不重要的数据放在cookie中持久的保存。

     d、单个cookie保存的数据不能超过4k,很多浏览器都限制站点最多保存20个cookie。

2、get和post的区别?

a、get是用来从服务器上获取数据,而post是用来向服务器传递数据;

b、get将表单中数据按照variable=value的形式,添加到action所指向的URL后面,并且两者用"?"连接,变量之间用"&"连接;

而post是将表单中的数据放在form的数据体中,按照变量与值对应的方式,传递到action所指定的URL。

c、get是不安全的,因为在传输过程中,数据是被放在请求的URL中;而post的所有操作对用户来说都是不可见的。

d、get传输的数据量小,这主要应为受url长度限制;而post可以传输大量的数据,所有上传文件只能用post提交。

e、get限制form表单的数据集必须为ASCII字符;而post支持整个IS01 0646字符集。

f、get是form表单的默认方法。

3、说说自动登录功能的编码实现?

答:a、登录功能是用session实现的,就是向session对象中保存当前用户的对象。

      b、自动功能是用cookie实现的,就是登录时将用户的信息保存为持久cookie。

      c、下次访问时,读取请求中如果有用户信息的cookie就可以自动登录。

4、为什么重写equals还要重写hashcode(结合上述hashmap中的哈希冲突)

equals和hashcode是java.lang.Object类的两个重要的方法(hashcode返回的是Int,equals返回的是bool)

5、ArrayList和LinkedList的区别

只要ArrayList的当前容量足够大,add()操作的效率非常高的。只有当ArrayList对容量的需求超出当前数组大小时,才需要进行扩容,LinkeList由于使用了链表的结构,因此不需要维护容量的大小。从这点上说,它比ArrayList有一定的性能优势,然而,每次的元素增加都需要新建一个Entry对象,并进行更多的赋值操作。在频繁的系统调用中,对性能会产生一定的影响

6、hashset和treeset的区别

HashSet:

HashSet底层是HashMap,底部也是用hashmap保存数据,用equals和hashcode先比较再存储

treeSet:

底层基于treeMap,由于TreeSet是基于TreeMap实现的,几乎所有的方法实现全部都是基于TreeMap的。TreeMap和TreeSet底层就是红黑树实现

7、简述三次握手、四次挥手

三次握手:

(1)客户端A与服务端B建立TCP连接时:首先客户端A向服务端B发SYN(同步请求),

(2)然后服务端B回复SYN+ACK(同步请求应答)

(3)最后客户端A回复ACK确认,这样TCP的一次连接(三次握手)的过程就建立了!

四次挥手:

(1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送(报文段4)。

(2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)和SYN一样,一个FIN将占用一个序号。

(3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A(报文段6)。

(4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1(报文段7)

8、你知道TCP协议、IP协议、HTTP协议分别在哪一层吗?

Tcp在传输层   IP在网络层   HTTP在应用层

OSI的7层从上到下分别是 7 应用层(TELNET,HTTP,FTP,NFS,SMTP) 6 表示层 5 会话层 4 传输层 (TCP,UDP)3 网络层 (IP))2 数据链路层 1 物理层

9、数据库索引中的数据库引擎主要InnodbMyIASM

 InnoDB使用行级锁定,提交,回滚和崩溃恢复功能来保护用户数据。它支持事务和容错

10、单例模式饿汉式和懒汉式

11、线程同步有那些方式

12、synchronized和lock区别

13、hashMap和hashtable和concurrentMap

思考:为什么hashMap中的初始size=16,扩容为2倍?

反观长度16或者其他2的幂,只要输入的hashcode本身分布均匀,hash算法的结果就是均匀的

所以,HashMap的默认长度为16,是为了降低hash碰撞的几率

处理哈希冲突用的哪种方法:

1, 开放定址法     2, 再哈希法     3、链地址法:4, 建立公共溢出区:

HashTable和Vercor在整个map中加了synchronized锁,所以时安全的

ConcurrentHashMap使用了是分段锁,所以它不但安全效率还很高,默认分16segment

14、IO与NIO

NIO中的重要的几个概念

14、抽象abstract、接口Interface

abstract:

1、抽象类中的抽象方法,不可用有方法体;

2、抽象类中可以有非抽象方法,但要有方法体;

3、非抽象类中不可用有抽象方法

4、一个类extends一个抽象类,需要继承实现抽象类中的抽象方法;

5、一个抽象类可以extends一个抽象类,则此时就可以不用继承抽象类中的抽象方法;

6、不能有抽象构造方法或抽象静态方法

Interface:

1、接口可以理解为抽象类的一种特例

2、接口中的所有方法都是抽象的

3、接口中方法默认都是public abstract

4、接口中成员变量默认都是public static final

15、String,StringBuffer,StringBuilder

大部分情况下,操作字符串的速度对比:StringBuilder>StringBuffer>String

  • String内容不可变,StringBuffer和StringBuilder内容可变;

String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,这样不仅效率低下而且大量浪费有限的内存空间

(1)如果要操作少量的数据用 String;

(2)多线程操作字符串缓冲区下操作大量数据 StringBuffer;

(3)单线程操作字符串缓冲区下操作大量数据 StringBuilder。

16、juc包内有哪些类

CountDownLatch 同步计数器,主要用于线程间的控制,但计数无法被重置,如果需要重置计数,请考虑使用 CyclicBarrier 。

线程池中execute和submit两种提交方式的区别:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值