2018/03 - 面试准备

前言

国内找一个实习的确是很扎实,毕竟都是冲着return去的。像我这种太久没有使用基础知识+平时没有太多时间复习的人来说,面试成功一个国内企业的实习真的是非常的难了。难,但是我不想放弃,别人都丢下的东西,我捡起来了,绝对是只有好处的。因此在18年的3月写下这个汇总博客。这个博客相当于我现在面试国内企业的一个资料库。网上的答案缤纷繁杂,这里的答案都是我自己理解以后发出来的,比网络上的散答案肯定好了很多。如果有其他人有幸能从上面获得一点遍历,那也算是它的一点小作用了。

一、TCP和UDP的区别

答:TCP是面向链接的数据传输,是可靠的,是按序投递的。UDP是面向无连接的数据传输,是非按序投递的。

       TCP报头为20个字节,UDP报头是8个字节。

       TCP存在拥塞机制。UDP不存在。

       TCP的链接是点对点的,而UDP支持多对多。

       TCP支持包括SMTP,TFP在内的需要可靠性的应用。UDP支持包括DNS在内的应用。

二、Java Synchronize 和 Lock的区别

答:这两个东西是Java开发中锁机制的两种体现。Lock就是一个简单的类,程序猿每次维护好这个对象就好了。S是一个Java的关键字。

S的情况下,如果A获得锁,就算是A阻塞,其他的所有线程也要一直等待。而对于Lock来说,会存在尝试得到锁的情况。

三、TCP的滑动窗口

答:发送和接受方都会维护一个数据帧的序列,这个序列被称作窗口。发送方的窗口大小由接受方确定,目的在于控制发送速度,以免接受方的缓存不够大,而导致溢出,同时控制流量也可以避免网络拥塞。

发送窗口的大小表示接收方能够接受的未确认的包的数量。


四、Java线程池

答:

线程池的出现主要是一个线程备用的需求。因为很有可能出现多次创建线程、销毁线程的现象。为了解决这个重复操作。

ThreadPoolExecutor类:

1.构造函数主要的参数:核心池大小,任务队列,线程池最大大小


五、HashMap实现原理

答:

1.HashMap中有两个重要的参数,容量(Capacity)和负载因子(Load factor)。前者是buckets的大小。负载因子是描述目前bucket的占用比例。

2.put函数大致的思路为:

对key的hashCode()做hash,然后再计算index;

如果碰撞了,以链表的形式存在buckets后;

如果碰撞导致链表过长(大于等于TREEIFY_THRESHOLD),就把链表转换成红黑树;

如果节点已经存在就替换old value(保证key的唯一性)

如果bucket满了(超过load factor*current capacity),就要resize。


六、ArrayList与LinkedList的实现

答:

LinkedList是一个链表结构,底层是一个双向链表。LinkedList对比ArrayList来说,增加和删除更加快速,但是随机访问非常的慢。

ArrayList相比起来要简单很多,除了类似与数组的功能以外(随机访问),主要的特点就是还会根据容量reSize自己的容量。

reSize的操作就是将自己的容量扩充成1.5倍,非常耗费资源。



    

猜你喜欢

转载自blog.csdn.net/shit_kingz/article/details/79691123