Java面试笔试常见基础题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/LiuMang9438/article/details/88166314

–说在前面的话
这个博客格式有点乱,但是应该无伤大雅
当别人问你这是什么东西的时候,你要从下面几点回答
1、定义。2、功能(作用)。3、底层实现(简单讲)。4、优缺点。5、自己掌握的程度

–href和src的区别
href是Hypertext Reference的缩写,表示超文本引用,
用来建立当前元素和文档之间的链接;浏览器会并行下载该文档,
并且不会停止对当前文档的处理。
src是source的缩写,src的内容是页面必不可少的一部分,是引入;
当浏览器解析到该元素时,会暂停浏览器的渲染,直到该资源加载完毕;
简而言之,src用于替换当前元素;href用于在当前文档和引用资源之间建立联系。

–String、StringBuilder、StringBuffer
都是final类
后两者最大的区别是线程安全方面
StringBuilder是线程不安全的,JDK1.5的时候出现的,toString()是返回一个新的对象
StringBuffer是线程安全的,JDK1.0的时候出现的,toString()是使用同一个缓存,不重新开辟空间
String不可变长度的,后两者是可变长度的

–Date和Calendar的区别

–二分、快排、归并的思想和代码

–二叉树的前中后遍历(根左右,左根右,左右根)

–TCP和UTP的区别
1、TCP面向连接(如打电话要先拨号建立连接;
UDP是无连接的,即发送数据之前不需要建立连接。
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;
UDP尽最大努力交付,即不保证可靠交付
3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;
UDP是面向报文的,UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
4、每一条TCP连接只能是点到点的;
UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP首部开销20字节;
UDP的首部开销小,只有8个字节
6、TCP的逻辑通信信道是全双工的可靠信道;
UDP则是不可靠信道

–HashMap实现原理和如何解决冲突

–interface和abstract class的区别

–时间、空间复杂度

–Oracle的存储过程和函数的区别
存储过程总结
1.创建存储过程的关键字为procedure。
2.传参列表中的参数可以用in,out修饰,参数类型没有大小的规格,并且列表中可以有多个输入输出参数。
3.调用带输出参数的过程必须要声明变量来接收输出参数值。
4.执行存储过程有两种方式,一种是使用execute,另一种是用begin和end包住。
5.它却不能使用return返回值。
6.可以用在有多个返回值的时候。
函数总结
1.必须定义返回类型且必须有一个返回值。
2.创建存储过程的关键字为function。
3.使用select functionname(para1, para2…) from dual;执行。
4.无法使用DML,即对表的增删改的操作,但是在新建函数的时候能通过编译,不会报错,在调用的时候回报错。
5.函数使用select functionname() from dual;来调用。

–Oracle中存储过程和函数中is和as的区别
在普通场景下没有什么区别,可以互相替换。
但在创建视图(VIEW)时,只能使用AS而不能使用IS。
在声明游标(CURSOR)时,只能使用IS而不能使用AS。

–第一范式、第二范式、第三范式定义
1NF:一个字段只存储一项信息(实体中的某个属性不能有多个值或者不能有重复的属性、同一表中没有重复项出现),
通俗地讲就是这个表是一个二维表(关系表)
2NF:属性必须依赖于整个主属性,而不是它的子集(
如学生、课程为主属性,学生成绩就不能依赖只于学生或者课程中的其中一个,必须是依赖于两个的组合)
3NF:属性不依赖于其它非主属性

–TCP的三次握手和四次挥手
(1)第一次握手:
Client将标志位SYN置为1,
随机产生一个值seq=J,
并将该数据包发送给Server,
Client进入SYN_SENT状态,
等待Server确认。
(2)第二次握手:
Server收到数据包后由标志位SYN=1知道Client请求建立连接,
Server将标志位SYN和ACK都置为1,ack=J+1,
随机产生一个值seq=K,
并将该数据包发送给Client以确认连接请求,
Server进入SYN_RCVD状态。
(3)第三次握手:
Client收到确认后,
检查ack是否为J+1,ACK是否为1,
如果正确则将标志位ACK置为1,ack=K+1,
并将该数据包发送给Server,
Server检查ack是否为K+1,ACK是否为1,
如果正确则连接建立成功,
Client和Server进入ESTABLISHED状态,
完成三次握手,
随后Client与Server之间可以开始传输数据了。
第一次挥手:
Client发送一个FIN,
用来关闭Client到Server的数据传送,
Client进入FIN_WAIT_1状态。
第二次挥手:
Server收到FIN后,
发送一个ACK给Client,
确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),
Server进入CLOSE_WAIT状态。
第三次挥手:
Server发送一个FIN,
用来关闭Server到Client的数据传送,
Server进入LAST_ACK状态。
第四次挥手:
Client收到FIN后,
Client进入TIME_WAIT状态,
接着发送一个ACK给Server,
确认序号为收到序号+1,
Server进入CLOSED状态,完成四次挥手。

–进程间通信的五种方式
管道、消息队列、信号量、共享内存、套接字

–说说你对MySQL索引的理解

–对Get和Post的理解
1、首先从语义上讲,Get是获取数据的,Post是提交要被处理的数据的。
2、Get请求可被缓存,Post不可。
3、GET请求保留在浏览器历史记录中,而Post不会。
4、GET请求可被收藏为书签,Post不可。
5、GET请求长度被浏览器和服务器所限制,而Post不会
6、GET请求不应在处理敏感数据时使用,因为它是通过URL传输请求的,而Post
https://zhuanlan.zhihu.com/p/25028045

–HTTP和HTTPS的理解
HTTP使用的是80端口,HTTPS使用的是443端口
HTTPS = HTTP + SSL(Secure Sockets Layer)
HTTP明文传输,HTTPS使用SSL加密传输

–语句String str = new String(“abc”);在JVM中执行的过程

–事务的ACID特性
原子性(Atomicity):要么全做,要么全不做
一致性(Consistency):和原子性紧密相关,使数据库数据从一个一致性状态变到另外一种一致性状态,要么全做,要么全不做
隔离性(Isolation):一个事务的执行不能被其它事务干扰
持续性(Durability):事务一旦提交,数据就永久改变了

–Oracle的rownum和rowid
rownum和rowid都是伪列,但是两者的根本是不同的,
rownum是根据sql查询出的结果给每行分配一个逻辑编号,
所以你的sql不同也就会导致最终rownum不同,
但是rowid是物理结构上的,在每条记录insert到数据库中时,
都会有一个唯一的物理记录

– MySQL的InnoDB和MyISAM

– 转发和重定向区别
1)转发浏览器的URL不变,而重定向的改变
2)转发可以转发整个请求request,可以通过setAttribute设置并转发参数,而重定向只能通过URL传递参数
3)

– HashMap和Hashtable的区别
1)继承不一样。HashMap继承AbstractMap,Hashtable继承Dictionary
2)安全级别不一样。HashMap是线程不安全的,Hashtable是线程安全的,因为Hashtable的方法基本都有synchronized修饰
3)Hashtable的key和value都不能是null,而HashMap可以有一个key为null,可以有多个value为null
4)两个遍历方式的内部实现上不同。Hashtable、HashMap都使用了Iterator。而由于历史原因,Hashtable还使用了Enumeration的方式 。
5)哈希值的使用不同,HashTable直接使用对象的hashCode。而HashMap重新计算hash值。
6) Hashtable和HashMap它们两个内部实现方式的数组的初始大小和扩容的方式。
HashTable中hash数组默认大小是11,增加的方式是old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。

– volatile关键词
逐一对代码进行顺序编译和执行,不执行省略优化

– >>、>>>、<<、<<<的区别
>>为不带符号右移,左边由符号位填充,右边扔掉
>>>带符号右移,左边补零操作
<<左移,右边的舍弃
<<<是不存在的,如果存在,则其作用和<<应该是一样的。

– 原码、反码、补码(机器上存储的格式为补码)
原码就是符号位拼接上真值二进制的绝对值, 即用第一位表示符号, 其余位表示值。
反码的表示方法是:正数的反码是其本身;负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。
补码的表示方法是:正数的补码就是其本身;负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1。(即在反码的基础上+1)

URI(Uniform Resource Identifier)标记了一个网络资源,仅此而已;
URL(Uniform Resource Locator)标记了一个WWW互联网资源(用地址标记),并给出了他的访问地址。

public:可以被所有其他类所访问
private:只能被自己访问和修改
protected:自身、子类及同一个包中类可以访问
default:自身及同一包中的类可以访问,声明时没有加修饰符,认为是friendly
类内部 本包 子类 外部包
public 1 1 1 1
protected 1 1 1 0
default 1 1 0 0
private 1 0 0 0

猜你喜欢

转载自blog.csdn.net/LiuMang9438/article/details/88166314