百度云社招java 二面

首先还是怼项目。问的比较细,有时候面试官会把条件改下,问假如现在需要你实现这个功能,你怎么来实现?
中间也会穿插一些中间件和基础原理的问题。
redis做分布式锁怎么做的?
先拿setnx来争抢锁,抢到之后,再用expire给锁加一个过期时间防止由于程序crash等原因没有释放。最后线程操作结束之后,释放分布式锁。
Redis能做分布式锁的原理?
Redis为单进程单线程模式,采用队列模式将并发访问变成串行访问,且多客户端对Redis的连接并不存在竞争关系。
JUC下面主要用哪些东西?
CountDownLatch、Cyclicbarrier 。。。。。等等。其核心是AQS
说一下AQS?
AQS是JUC中很多同步组件的构建基础,简单来讲,它内部实现主要是状态变量state和一个FIFO队列来完成,同步队列的头结点是当前获取到同步状态的结点,获取同步状态state失败的线程,会被构造成一个结点(或共享式或独占式)加入到同步队列尾部(采用自旋CAS来保证此操作的线程安全),随后线程会阻塞;释放时唤醒头结点的后继结点,使其加入对同步状态的争夺中。

AQS为我们定义好了顶层的处理实现逻辑,我们在使用AQS构建符合我们需求的同步组件时,只需重写tryAcquire,tryAcquireShared,tryRelease,tryReleaseShared几个方法,来决定同步状态的释放和获取即可,至于背后复杂的线程排队,线程阻塞/唤醒,如何保证线程安全,都由AQS为我们完成了,这也是非常典型的模板方法的应用。AQS定义好顶级逻辑的骨架,并提取出公用的线程入队列/出队列,阻塞/唤醒等一系列复杂逻辑的实现,将部分简单的可由使用者决定的操作逻辑延迟到子类中去实现。

网上很多博客,不了解的可以去找找看。
*ReentrantLock非公平锁和公平锁的实现原理? *

        final boolean nonfairTryAcquire(int acquires) {
            final Thread current = Thread.currentThread();
            int c = getState(); //获取同步状态
            if (c == 0) {
            //如果同步状态为0,表明没有线程获取锁,或者队列中的节点正在获取锁。
            //此时非公平锁会直接去尝试获取锁。
                if (compareAndSetState(0, acquires)) {
                    setExclusiveOwnerThread(current);
                    return true;
                }
            }
            else if (current == getExclusiveOwnerThread()) {
                int nextc = c + acquires;
                if (nextc < 0) // overflow
                    throw new Error("Maximum lock count exceeded");
                setState(nextc);
                return true;
            }
            return false;
        }


        protected final boolean tryAcquire(int acquires) {
            final Thread current = Thread.currentThread();
            int c = getState();
            if (c == 0) {
            //公平锁的话。会先判断队列中是否有等到的线程
                if (!hasQueuedPredecessors() &&
                    compareAndSetState(0, acquires)) {
                    setExclusiveOwnerThread(current);
                    return true;
                }
            }
            else if (current == getExclusiveOwnerThread()) {
                int nextc = c + acquires;
                if (nextc < 0)
                    throw new Error("Maximum lock count exceeded");
                setState(nextc);
                return true;
            }
            return false;
        }

说下MVCC?数据库调优的思路?
在读已提交的级别下,都会通过MVCC获取当前数据的最新快照,不加任何锁。存在的问题:在每次select之间有其他事务更新了我们读取的数据并提交了,那就出现了不可重复读。可重复读:MVCC版本的生成时机,
即:一次事务中只在第一次select时生成版本,后续的查询都是在这个版本上进行,从而实现了可重复读。
1.慢查询的开启并捕获 2.explain+慢sql分析 3.show profile查询sql在mysql服务器里面的执行细节和生命周期情况 4.sql数据库服务器的参数调优。

kafka怎么保证消息的顺序性?zookeeper的选举原理?
这个可以自己百度一下,网上很多。

Java远程调试的原理:这个真不知道。。。有知道的可以说下。

#社招##百度##Java工程师##面经#
全部评论
最后一个问题,回答一下Dubbo的原理就行了
点赞 回复
分享
发布于 2019-12-30 00:19
setnx不是有个原子操作名命令,用于设置过期时间的
点赞 回复
分享
发布于 2019-12-30 09:14
联想
校招火热招聘中
官网直投
远程调试是agent打桩,很多运行时加载的工具都是这么搞得
点赞 回复
分享
发布于 2020-06-10 22:01

相关推荐

头像
04-10 07:16
已编辑
四川大学
1.介绍公司和部门2.自我介绍3.用了布隆过滤器,谈一下布隆过滤器4.布隆过滤器用了hash,有那些hash冲突解决方案?hashmap链表红黑树5.hashmap链表多少长度转红黑树,为什么定这个值?答了泊松定理泊松分布,面试官说太学院派了,实际开发不这样😂6.算法题&nbsp;最小栈&nbsp;说思路7.看你使用了lambook,原理不知道,答了反射,错8.什么是反向代理9.什么是正向代理不知道10.threadlocal怎么实现线程私有11.threadloacl中hash冲突怎么解决,看过源码吗答不出,没看过源码12.单元测试做过吗,用了哪些宝用过springboottest,不知道是不是单元测试13.有研究过springboottest原理吗没有14.我提问一面感觉答得不好,面试官很耐心,不会的会解释清楚。第二天上午约二面二面面试官说技术面过了,那问点项目1.项目都是自己做的吗2.开发的完整流程走过没有(打包上线之类的)3.单元测试写过吗4.开发中用了哪些数据结构,解决了哪些问题?5.做了哪些优化索引,redis…6.性能多大提升,测过吗7.redis怎么保证的一致性8.看你用了字典树,解释一下字典树呢,是自己实现的吗9.你是先知道应该这么优化,设计初就知道,还是说先自己做,发现性能很差再优化?10.为什么要做联合索引,相比单列有什么优势呢?11.你的环境,开发框架什么的都是自己搭建的吗12.springboot的starter底层实现了解过没有13.注解配置用了哪些14.我问问题参与哪些业务会加班吗二面完半小时oc
点赞 评论 收藏
转发
投递中国银行等公司8个岗位
点赞 评论 收藏
转发
5 95 评论
分享
牛客网
牛客企业服务