java面试

1.重写和重载的区别?
https://blog.csdn.net/qunqunstyle99/article/details/81007712

2.String 和 StringBuffer、StringBuilder 的区别是什么?String 为什么是不可变的?
https://www.cnblogs.com/lf6688/p/12461522.html

3.自动装箱与拆箱
https://www.jianshu.com/p/bbe6bffcb03b
4.== 与 equals
https://blog.csdn.net/lcsy000/article/details/82782864
https://blog.csdn.net/StriverLi/article/details/52997927?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase
https://blog.csdn.net/qq_27471405/article/details/81010094?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase
6.Object类的常见方法
https://blog.csdn.net/weixin_42387953/article/details/80750902
7.Java 中的异常处理
https://www.cnblogs.com/williamjie/p/9103658.html
8.获取用键盘输入常用的的两种方法
https://www.cnblogs.com/chyblogs/p/11299837.html
9.接口和抽象类的区别是什么
https://www.cnblogs.com/jmyyyy/p/10960271.html
抽象类主要用来抽象类别,接口主要用来抽象功能。

集合框架
1.Arraylist 与 LinkedList 异同
https://www.cnblogs.com/liangbaolong/p/12884574.html
2.ArrayList 与 Vector 区别
https://www.cnblogs.com/williamjie/p/11158523.html
3.HashMap的底层实现
https://www.cnblogs.com/baolingye/p/11667717.html
4.HashMap 和 Hashtable 的区别
https://zq.zhaopin.com/question/5192973/
5.HashMap 的长度为什么是2的幂次方
https://blog.csdn.net/Apeopl/article/details/88935422?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase
6.HashMap 多线程操作导致死循环问题
https://www.cnblogs.com/chyblogs/p/11305924.html
7.HashSet 和 HashMap 区别
https://www.cnblogs.com/zhuyeshen/p/10981194.html
8.ConcurrentHashMap 和 Hashtable 的区别
9.ConcurrentHashMap线程安全的具体实现方式/底层具体实现
https://blog.csdn.net/imzoer/article/details/8621074?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

https://www.cnblogs.com/chyblogs/p/11306138.html

计算机网络
HTTP协议理解
https://www.cnblogs.com/ranyonsue/p/5984001.html
tcp/ip协议理解
https://blog.csdn.net/qq_29581829/article/details/89489758
三次握手
https://baijiahao.baidu.com/s?id=1614404084382122793&wfr=spider&for=pc
四次挥手
‘https://www.cnblogs.com/Andya/p/7272462.html

面经:
一。。。。。。。。。。。。。
1、进程与线程的区别
如果用一句话来说明它的区别的话,那就是线程是系统执行(调度)的最小单元,进程是系统资源分配的最小单元。
2、堆和栈的不同
.jVM运行时在内存中开辟一片内存区域,栈内存首先是一片内存区域,存储的都是局部变量,堆内存:存储的是数组和对象(其实数组就是对象)
栈内存的更新速度要快于堆内存,因为局部变量的生命周期很短;
栈内存存放的变量生命周期一旦结束就会被释放,而堆内存存放的实体会被垃圾回收机制不定时的回收。
3、TCP与UDP的区别
TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议,它们之间的区别包括:

TCP是面向连接的,UDP是无连接的;

TCP是可靠的,UDP是不可靠的;

TCP只支持点对点通信,UDP支持一对一、一对多、多对一、多对多的通信模式;

TCP是面向字节流的,UDP是面向报文的;

TCP有拥塞控制机制;UDP没有拥塞控制,适合媒体通信;

TCP首部开销(20个字节)比UDP的首部开销(8个字节)要大;
4、TCP怎么保持可靠性
TCP提供一种面向连接的、可靠的字节流服务。其中,面向连接意味着两个使用TCP的应用(通常是一个客户和一个服务器)在彼此交换数据之前必须先建立一个TCP连接。在一个TCP连接中,仅有两方进行彼此通信;而字节流服务意味着两个应用程序通过TCP链接交换8bit字节构成的字节流,TCP不在字节流中插入记录标识符。

对于可靠性,TCP通过以下方式进行保证:

数据包校验:目的是检测数据在传输过程中的任何变化,若校验出包有错,则丢弃报文段并且不给出响应,这时TCP发送数据端超时后会重发数据;

对失序数据包重排序:既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。TCP将对失序数据进行重新排序,然后才交给应用层;

丢弃重复数据:对于重复数据,能够丢弃重复数据;

应答机制:当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒;

超时重发:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段;

流量控制:TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据,这可以防止较快主机致使较慢主机的缓冲区溢出,这就是流量控制。TCP使用的流量控制协议是可变大小的滑动窗口协议。
5、二分法
1、确定搜索区间初始化时候的左右边界,有时需要关注一下边界值。在初始化时,有时把搜索区间设置大一点没有关系,但是如果恰好把边界值排除在外,再怎么搜索都得不到结果。

例如本题,如果一开始把 len 这个位置排除在外进行二分搜索,代码是怎么都通不过评测系统的。

2、无条件写上 while (left < right) ,表示退出循环的条件是 left == right,对于返回左右边界就不用思考了,因此此时它们的值相等;

3、先写下取整的中间数取法,然后从如何把 mid 排除掉的角度思考 if 和 else 语句应该怎样写。

(这里建议写两个注释。)

一般而言,我都会把“什么时候不是目标元素”作为注释写在代码中,提醒自己要判断正确,这一步判断非常关键,直接影响到后面的代码逻辑。
然后接着思考 mid 不是解的情况下,mid 的左右两边可能存在解,把下一轮搜索的区间范围作为注释写进代码里,进而在确定下一轮搜索区间边界的收缩行为时,不容易出错。

if 有把握写对的情况下,else 就是 if 的反面,可以不用思考,直接写出来。

说明:这种思考方式,就正正好把待搜索区间从逻辑上分成两个区间,一个区间不可能存在目标元素,进而在另一个区间里继续搜索,更符合“二分”的语义。

4、根据 if else 里面写的情况,看看是否需要修改中间数下取整的行为。

上面已经说了,只有看到 left = mid 的时候,才需要调整成为上取整,记住这一点即可,我因为刚开始不理解这种写法,遇到很多次死循环,现在已经牢记在心了。

5、退出循环的时候,一定有 left == right 成立。有些时候可以直接返回 left (或者 right,由于它们相等,后面都省略括弧)或者与 left 相关的数值,有些时候还须要再做一次判断,判断 left 与 right 是否是我们需要查找的元素,这一步叫“后处理”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值