Java面试题(中级)

一、数据库

1.数据库的第三范式是什么?

1NF:数据库表中,设计每一列都不可以再分。

2NF:在满足1NF的前提下,每一行都可以被唯一确定。(不存在两行完全相同)

3NF:在满足2NF的前提下,不存在其它表中的非主键数据。(去掉传递依赖)

实际开发中,由于追求一些查询的性能,那么尽可能快,于是有些时候宁愿多冗余一个字段,避免多连一张表。 为了性能,降范式处理。之后就要小心数据更新

2.char和varchar的区别?

char类型是定长,如果数据不够长度,就用空格填充。所以,如果java查询出来,可能是带着空格的。char并没有数据库的过多处理,所以它要更快一些。

varchar类型长度是可变的。Java查询出来,完美适配String数据类型。

3.数据库最左前缀原则

指在数据库中对于一个多列联合索引来讲,where的字段一定是完美从索引列的最左字段开始,毫无跳跃性的依次拥有每一个条件列。

index(age,card_no,name,sal)

如果不是依次写,也可以,因为数据库的执行计划会优化它。

4.数据库的事务隔离?

MySQL数据库事务的隔离级别有哪几种?

1、读未提交(MySQL默认)

2、读已提交(Oracle默认)

3、可重复读

4、串行化

二、JavaSE

1.ForEach 循环不支持新增和删除操作

内部是迭代器。 而迭代器里有个计数,这个数如果和此时的集合对不上,就抛异常。 ConcurrentModificationException

2.垃圾回收机制,怎么判断对象是否可以被回收?

1、引用计数器归零。

2、可达性分析,从GC Roots开始出发,如果某对象在引用链上不可达,就是垃圾。

3.进程和线程有什么不同?

进程是程序运行的基本单位

线程是任务的基本单位

一个进程可以包含多个线程

每一个线程必须属于一个进程

4.线程的run()和start()有什么区别?

手动调用run方法其实没有开启线程,只是一个普通的方法调用而已。

调用start方法后,开启线程进入就绪状态,当抢占到CPU以后,开始运行run方法。

三、JavaWeb

1.浏览器禁用cookie了,session还好使么?为什么?

不好使。

Session是要给cookie里存一个JSESSIONID为key的cookie。

如果cookie禁用了,那么Session也就没有了JSESSIONID,因此也就失效了。

2.如何实现跨域?

1、我们可以使用服务器端,返回的http响应报文中的响应头里,设置 Access-Control-Allow-Origin为*。CORS的设置。

2、利用nodejs的服务器,配置代理。也可以实现跨域。

四、框架

1.SpringMVC中,如何自动装配参数的?

SpringMVC利用读取url后跟参数,以及读取请求体的方式,把请求的参数获取到。

DispatcherServlet利用反射技术,读取Controller里面的方法的参数类型、参数名称。

把之前读取到的http参数,传入给Controller的方法。

2.SpringMVC与Struts2的区别是什么?

SpringMVC是基于Servlet的,它设置一个DispatcherServlet,所有的请求都经过它,然后它在根据请求的路径分配给各式各样的Controller的方法。达到各个功能单独执行各个方法的目的。  

Struts2是基于Filter的,它设置一个总的Filter过滤所有的请求。它根据请求的路径,分配给各式各样的类的方法。达到各个功能单独执行各个方法的目的。

五、数据结构与算法

1.栈和队列的区别?

它们都是线性表的逻辑结构。 它们定义的进入和出去的元素的规则不一样。

栈:进入的元素直接到栈底,后续进入的元素,依次压着之前进入的元素。 要想出去一个元素,那么只能从栈顶依次出去。 因此它叫先进后出 或者 后进先出。

队列:买东西排队,先到的元素在队列的头部,后来的元素依次进到队列里排队。 想要出去一个元素,那么只能从队列的头部出去。 因此它叫先进先出。

2.简述数组与链表的的异同?

它们都是线性表中的物理结构。

数组是连续的地址空间,根据数组的下标,直接能地址偏移计算到对应的元素上进行访问,时间复杂度是O(1)。 数组长度是固定的。新增或者删除一个元素费劲,因为它要窜动其它元素。

链表是跳跃的地址空间,根据前一个找下一个,因此它的时间复杂度是O(n)。 链表长度是动态的。随时随地都可以新增或者删除一个元素。

3.ArrayList和LinkedList的区别,TreeMap和HashMap的区别?

先说数组与链表的的异同

TreeMap是一颗红黑树。

HashMap是一个数组,数组中的每一个元素是一个链表。Hashmap链表长度为8时转换成红黑树,同样,后续如果由于删除或者其他原因调整了大小,当红黑树的节点小于或等于 6 个以后,又会恢复为链表形态。

六、加密解密

1.Base64编码是什么?哪里用到过?

注:Base64编码过程是3个字符一组的进行,如果原文长度不是3的倍数怎么办呢? 例如我们的原文为Ma,它不够3个,那么只能在编码后的字符串中补=了。缺一个字符补一个,缺两个补两个即可,所以有时候你会看见base64字符串结尾有1个或者2个=

哪里用到过?

文件上传,

使用Base64 要小心,URLEncode和Base64的冲突。 +变空格。导致Base64转码失败。

除此之外,可以直接当做String处理。 Base64能否使用get方式提交给服务器?

不能,Base64里有+/=特殊符号,不可以放在url路径上,如果非要放,就用URLEncode转码再放。

Base64一共有多少种字符?

65种  A-Z  a-z  0-9 +/=

Base64编码数据的承载效率是多少?

75%

 传输效率呢?

C=2字节  C= 000010  

37.5%

它其实不适合传比较大的文件。

2.摘要算法是什么?SHA1或者MD5有何实际应用场景?

就是MD5或者SHA1这些不可逆的运算。

1、密码的存储。甚至可以加盐()、多次运算。

注:盐 (Salt) 在密码学中,是指通过在密码任意固定位置插入特定的字符串,让散列后的结果和使用原始密码的散列结果不相符,这种过程称之为 "加盐"。

2、进行文件指纹验证,来避免文件被篡改。

3.什么是非对称加密?什么是对称加密?

对称加密算法加密和解密使用的密钥的是相同的,也就是只有一个密钥,加密速度快(相对的)

非对称加密算法有两个密钥,也就是加密和解密所使用的密钥是不同的,密钥成对生成,公钥对外发布,但是对大数据的加解密速度比对称算法慢。

MD5  SHA1为什么不叫加密,只叫摘要?

因为它不可逆。 加密一定对应解密。AES  DES

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值