程序猿阵线联盟-汇总各类技术干货Java知识点大全程序员

【Java】留下没有基础眼泪的面试题

2018-08-15  本文已影响137人  Java3y

前言

只有光头才能变强

本文力求简单讲清每个知识点,希望大家看完能有所收获

一、如何减少线程上下文切换

使用多线程时,不是多线程能提升程序的执行速度,使用多线程是为了更好地利用CPU资源

程序在执行时,多线程是CPU通过给每个线程分配CPU时间片来实现的,时间片是CPU分配给每个线程执行的时间,因时间片非常短,所以CPU通过不停地切换线程执行

线程不是越多就越好的,因为线程上下文切换是有性能损耗的,在使用多线程的同时需要考虑如何减少上下文切换

一般来说有以下几条经验

还可以考虑我们的应用是IO密集型的还是CPU密集型的。

参考资料:

二、计算机网络

2.1MAC地址已经是唯一了,为什么需要IP地址?

或者可以反过来问:已经有IP地址了,为什么需要MAC地址??在zhihu上还蛮多类似的问题的:

image

我来简单总结一下为什么有了MAC(IP)还需要IP(MAC):

已经有IP地址了,为什么需要MAC地址??

MAC地址已经是唯一了,为什么需要IP地址?

如果有更好的看法,不妨在评论区下留言哦~

参考资料:

2.2TCP状态

TCP 每个状态说一下,TIME-WAIT状态说一下

TCP总共有11个状态,状态之间的转换是这样的:

image

流程图:

image

下面我简单总结一下每个状态:

TIME_WAIT状态一般用来处理以下两个问题:

image

TIME_WAIT过多怎么解决?

如果在高并发,多短链接情景下,TIME_WAIT就会过多。

可以通过调整内核参数解决:vi /etc/sysctl.conf 加入以下内容设置:

我们可以知道TIME_WAIT状态是主动关闭连接的一方出现的,我们不要轻易去使用上边两个参数。先看看是不是可以重用TCP连接来尽量避免这个问题(比如我们HTTP的KeepAlive)~

参考资料:

2.3TCP滑动窗口

TCP是一个可靠的传输协议,它要保证所有的数据包都可以到达,这需要重传机制来支撑。

重传机制有以下几种:

滑动窗口可以说是TCP非常重要的一个知识点。TCP的滑动窗口主要有两个作用:

简略滑动窗口示意图:

image

详细滑动窗口示意图:

image

接受端控制发送端的图示:

image

2.4拥塞控制

TCP不是一个自私的协议,当拥塞发生的时候,要做自我牺牲。就像交通阻塞一样,每个车都应该把路让出来,而不要再去抢路了

拥塞控制主要是四个算法:

拥塞控制的作用:

image

拥塞的判断:

image

强烈建议阅读:

参考资料:

三、操作系统

3.1僵尸进程和孤儿进程是什么(区别)

unix/linux环境下

image

僵尸进程:

孤儿进程:

僵尸进程危害

解决僵尸进程的手段:

参考资料:

3.2操作系统进程间通信的方式有哪些?

首先要知道的是:进程和线程的关注点是不一样的:

操作系统进程间通信的方式有哪些?


3.3操作系统线程间通信的方式有哪些?

操作系统线程间通信的方式有哪些?(可以直接理解成:线程之间同步的方式有哪些)

线程间的通信目的主要是用于线程同步

参考资料:

扩展阅读:

3.4操作系统进程调度算法有哪些?

操作系统进程调度算法有哪些?

参考笔记:

四、拓展阅读

此部分是看别人的博文已经写得很好了,分享给大家~

4.1ConcurrentHashMap中的扩容是否需要对整个表上锁?

ConcurrentHashMap中的扩容是否需要对整个表上锁?

总结(摘抄)要点:

参考资料:

4.2什么是一致性Hash算法(原理)?

什么是一致性Hash算法(原理)?

总结(摘抄)要点:

参考资料:

4.3MySQL date、datetime和timestamp类型的区别

MySQL date、datetime和timestamp类型的区别

总结(摘抄)要点:

参考资料:

4.4判断一个链表是否有环/相交

判断一个链表是否有环(实际上就是看看有无遍历到重复的节点),解决方式(3种):

  1. for遍历两次
  2. 使用hashSet做缓存,记录已遍历过的节点
  3. 使用两个指针,一前一后遍历,总会出现前指针==后指针的情况

参考资料:


判断两个无环链表是否相交,解决方式(2种):

判断两个有环链表是否相交(注:当一个链表中有环,一个链表中没有环时,两个链表必不相交):

参考资料:

4.5keepAlive含义

参考资料:

最后

如果大家有更好的理解方式或者文章有错误的地方还请大家不吝在评论区留言,大家互相学习交流~~~

如果想看更多的原创技术文章,欢迎大家关注我的微信公众号:Java3y。Java技术群讨论:742919422。公众号还有海量的视频资源哦,关注即可免费领取。

可能感兴趣的链接:

上一篇 下一篇

猜你喜欢

热点阅读