字节跳动面试
面试官大佬很好人,就是我太菜了emmmmmmmm
1.对象从加载到初始化的过程,
2.对象存在父类代码的初始化过程,
3.对象存放的地方在哪里,对象如何线程安全,synchronized和lock的不同,synchronized修饰的代码块可重入吗
当线程尝试获取锁时,可重入锁先尝试获取并更新status值,如果status == 0表示没有其他线程在执行同步代码,则把status置为1,当前线程开始执行。如果status != 0,则判断当前线程是否是获取到这个锁的线程,如果是的话执行status+1,且当前线程可以再次获取锁。而非可重入锁是直接去获取并尝试更新当前status的值,如果status != 0的话会导致其获取锁失败,当前线程阻塞。
4.volatile是什么,有什么用,主存是什么,缓存是什么,有什么不同
主存与缓存:https://blog.csdn.net/qq_42103479/article/details/89743061
5.线程池的参数,线程池中线程的创建和释放
参数:
corePoolSize就是线程池中的核心线程数量,这几个核心线程,只是在没有用的时候,也不会被回收
maximumPoolSize就是线程池中可以容纳的最大线程的数量
keepAliveTime,就是线程池中除了核心线程之外的其他的最长可以保留的时间,因为在线程池中,除了核心线程即使在无任务的情况下也不能被清 除,其余的都是有存活时间的,意思就是非核心线程可以保留的最长的空闲时间,
util,就是计算这个时间的一个单位。
workQueue,就是等待队列,任务可以储存在任务队列中等待被执行,执行的是FIFIO原则(先进先出)。
threadFactory,就是创建线程的线程工厂。
handler,是一种拒绝策略,我们可以在任务满了之后,拒绝执行某些任务。
1、如果线程池的当前大小还没有达到基本大小(poolSize < corePoolSize),那么就新增加一个线程处理新提交的任务;
2、如果当前大小已经达到了基本大小,就将新提交的任务提交到阻塞队列排队,等候处理workQueue.offer(command);
3、如果队列容量已达上限,并且当前大小poolSize没有达到maximumPoolSize,那么就新增线程来处理任务;
4、如果队列已满,并且当前线程数目也已经达到上限,那么意味着线程池的处理能力已经达到了极限,此时需要拒绝新增加的任务。至于如何拒绝处理新增的任务,取决于线程池的饱和策略RejectedExecutionHandler。
原文链接:https://blog.csdn.net/qq_29373285/article/details/85238728
6.最后是数据库索引,什么是数据库索引,能建立多个吗。答完这个我就凉了。
行呗第二次字节跳动正式批一面凉凉,我的面试为什么跟别人的这么不一样??????实在自闭。看着别人的面经准备了很久,万万没想到他问的都是超级底层的东西。为什么别人写的这么简单,枯了。
今晚腾讯突然发了面试过来,猝不及防,准备一下
1.Linux常用的指令
https://blog.csdn.net/qq_40910541/article/details/80686362
2.TCP/IP结构有几层
3.三次握手,四次握手,以及为什么是三次和四次。
4.红黑树
https://blog.csdn.net/v_july_v/article/details/6105630
5.Object类的方法
https://blog.csdn.net/ningmengbaby/article/details/80284264
腾讯面试
很突然的面试,没准备多少就去了,还好面试官还是很好人的hhhhhhh
1.谈谈你对redis的理解,redis为什么高性能,redis是单线程的吗,redis可以用多线程吗
因为之前项目有用过redis,单纯存储token就直接谈了这部分还有期间遇到过设置过时的问题,后来引出来这些问题详情找了一个写的很好的博主,可以参考一下。
https://blog.csdn.net/bird73/article/details/79792548