Jvm内存结构描述
++i是否是线程安全的,为什么
什么情况下,索引会失效
mybatis,事物,#和$的区别,防止sql注入,
struts2的原理,如何获取执行方法,漏洞原理,如何防止。
spring,核心,流程
rpc框架
了解多少?dubbo如何通信,为什么通信快和普通http请求区别,原理是什么,其中一台服务器挂了如何执行,协调,说了zookeeper,问zookeeper中心挂了是否影响通信,如何知道zookeeper是否挂了。
redis,基本数据类型是什么,hash如何存储,如何存储对象,如何存储字符串,是单线程还是多线程,单线程如何保证安全,为什么比membercache快,热点数据淘汰机制,lru算法原理。主从分离和集群区别。
kafka原理。和其它mq比较,消息对了数据如何存储的,
数据库,sellect,from,where,group by执行顺序,
索引,原理,订单支付状态是否适合索引,索引和锁之间的关系,悲观锁和乐观锁概念如何使用,mysql所有引擎介绍,比如innerdb引擎,mysql是行级锁还是表级别锁,行级锁还是表级别锁有什么区别,优缺点。脏读、幻读原因
索引和锁之间的关系
线程:多线程之间顺序,为什么多线程会有问题,lock锁没有执行finally释放锁怎么办?
算法,计算查询某天属于周几
linxu:top命令,如何看负载,
lucene原理,索引原理和数据库索引原理区别,为什么快。
最后一面,一个奇葩问题,计算你学校共享单车使用量是多少?
1、有三个线程T1 T2 T3,如何保证他们按顺序执行
答案:使用join,注意join方法是Thread.join方法,是线程的方法。
thread类常用方法:
start();//启动线程
getId();//获得线程ID
getName();//获得线程名字
getPriority();//获得优先权
isAlive();//判断线程是否活动
isDaemon();//判断是否守护线程
getState();//获得线程状态
sleep(long mill);//休眠线程
join();//等待线程结束
yield();//放弃cpu使用权利
interrupt();//中断线程
currentThread();//获得正在执行的线程对象
2、那如何让 两个线程按照指定方式有序交叉运行呢?
这里,我们可以利用 object.wait() 和 object.notify() 两个方法来实现。代码如下:
wait/notify必须存在于synchronized块中。
我现在希望 A 在打印完 1 后,再让 B 打印 1, 2, 3,最后再回到 A 继续打印 2, 3。这种需求下,显然 Thread.join() 已经不能满足了。我们需要更细粒度的锁来控制执行顺序。
3、四个线程 A B C D,其中 D 要等到 A B C 全执行完毕后才执行,而且 A B C 是同步运行的
需要用到CountdownLatch,CountDownLatch 就是一个倒计数器,
它的基本用法是:
- 创建一个计数器,设置初始值,CountdownLatch countDownLatch = new CountDownLatch(2);
- 在 等待线程 里调用 countDownLatch.await() 方法,进入等待状态,直到计数值变成 0;
- 在 其他线程 里,调用 countDownLatch.countDown() 方法,该方法会将计数值减小 1;
- 当 其他线程 的 countDown() 方法把计数值变成 0 时,等待线程 里的 countDownLatch.await() 立即退出,继续执行下面的代码。
Thread.yield() 方法,暂停当前正在执行的线程对象,让当前运行线程回到可运行状态,以允许具有相同优先级的其他线程获得运行机会。