以前没有参加过面试,也没有什么项目经历,就是看见导员发的消息抱着试一试的心态投了一个简历,结果真的发了面试通知,整个人就麻了/(ㄒoㄒ)/~~,就用两天疯狂在网上找Java八股文企图临时抱拂脚,结果发现越是要背,要背的东西越多。果然是得赶快准备起来了呀!!!顺便复盘一下整个过程。
1、简述一下进程和线程的区别
进程是资源分配的最小单位,是独立运行的最小单位,是一个执行中程序的实例。
线程是进程划分的任务,是一个进程内可调度的实体,是CPU调度的基本单位,用于保证程序的实时性,实现进程内部的并发。
对应关系:一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。线程依赖于进程而存在。
定义:进程是资源分配的最小单位,线程是CPU调度的最小单位
地址空间:进程在执行过程中拥有独立的地址空间,而多个线程共享进程的地址空间。
通信:由于同一进程中的多个线程具有相同的地址空间,所以这些进程之间的同步和通信比较容易,线程间可以直接读写进程数据段来进行通信。
适用范围:由于进程崩溃后,在保护模式下不会对其他进程产生影响,因此进程适用于多核、多机分布;线程适用于多核。多进程比多线程健壮。
调试开销:进程编程调试简单可靠性高,但是创建销毁开销大;线程正相反,开销小,切换速度快,但是编程调试相对复杂。
2、怎么解决死锁问题
解决死锁的方法即破坏产生死锁的四个必要条件之一,主要方法如下:
资源一次性分配,破坏请求条件,这样就不会有请求出出现;
只要有一个资源得不到分配,也不给这个进程分配其他的资源,破坏占有并等待条件。
可抢占资源:当进程新的资源未得到满足时,释放已占有的资源,从而破坏不可抢占条件;
资源有序分配法:系统给每一类资源都分配一个序号,每个进程按编号递增的顺序请求资源,释放则相反,从而破坏环路等待条件。
3、TCP为什么需要使用滑动窗口
4、写代码:一个数组里面除了一个数只出现一遍,其他数字都重复出现过,编写代码找出只出现一次的数字。
我写的是用HashMap存放数字和出现的次数。写完就问我还有没有什么优化的点,有没有其他思路。比如两个数消除之类的,不过没想到啊啊啊我是傻逼。
5、顺便就开始问HashMap的底层结构,哈希表元素塞满以后怎么扩容,什么程度需要扩容
6、选择排序,怎么优化,堆排序
7、mysql建索引的时候需要注意什么问题
8、5升水和3升水,怎么得到四升的水
9、写一个求x的次方的方法