26届大三-淘天-暑期实习一面面经

BIT大三找一个Java暑期实习,全程被拷打RPC项目,纯问项目相关问题问了50分钟,第二天看官网流程应该是挂了

自我介绍

然后问RPC项目

介绍RPC项目中用到哪些中间件相关的东西,然后具体它在这里面是起到什么样的一个作用?

一个RPC的协议里面都主要包含哪些内容?

比如说你调一个IP的话,你在客户端从发起调用拿到响应的整个过程大概是怎样?

部署的时候用了多少台服务器?

你的客户端在找到要哪台服务器,要连哪台服务器的时候,这个过程是怎样的了解呢?

对于Netty的外内存是否有过调优?(因为RPC项目里提到了netty吧)

同步异步阻塞非阻塞怎么理解?

多路复用在你的 RPC框架里面具体是怎么体现的?

多线程在Netty里是怎么用的?

Work线程一般设置的话,线程数设置多少怎么判断?

业务逻辑的线程池设置线程数为多少?是基于什么来的?

有用到Redis吗?

Redis如何实现一个消息队列?

MySQL的索引有做过什么优化吗?

联合索引的字段是越多越好吗?

深度翻页的问题有没有了解过,如何解决?

并发编程里面通常要去解决线程安全的问题都有一些什么样的方法?

Atomic原子类底层的原理是什么?

你刚提到Syncronized的关键字,它在修饰方法和修饰代码块的时候有什么区别?

对于修饰代码块时传一个this和不传有什么区别?

对分布式系统的了解多吗?分布式事务可以如何去实现?

多阶段提交的话卡在中间状态了应该怎么办?

CAP理论了解吧?以两个阶段提交为例,分布式事务做到了CAP里面的哪几个?

无手撕,已经笔试

反问:

问的面试的表现:

因为你本身你是本科生对吧?对本科生整体了解的还行,所以可能有一些深度上的问题,可以适当的去挑那么一个两个方向去深入一下。

实际实习会做什么业务?

全部评论
部署用到几台机器怎么答呀 对于Netty的外内存是否有过调优? Work线程一般设置的话,线程数设置多少怎么判断? 业务逻辑的线程池设置线程数为多少?是基于什么来的? 这几个怎么答?可以分享一下吗
点赞 回复 分享
发布于 03-27 17:40 江苏

相关推荐

04-27 16:50
已编辑
门头沟学院 Java
1. mysql删除表语句是什么?drop和truncate区别?2. 删除一行数据的sql3. 查询一张表所有的数据的sql4. 查询一张表有多少条数据sql。  count(1)和count(*)区别5. i++和++i区别6. 介绍下重载和重写。  构造方法可以重写重载吗?7. arraylist和linkedlist的区别8.解释一下深拷贝和浅拷贝9. 如果有三个线程,我如何能保证顺序执行.方法1: 使用join()join() 方法可以确保一个线程在另一个线程执行完毕后才开始执行。通过合理地调用 join(),可以实现线程的顺序执行。方法2:使用countdownlatch/semaphore方法3: 使用锁和原子类,wait() + notifyAll()方法4: 使用completablefuture10. 如果有一个 T1 线程,想把 T2 线程加到 T1 里面,怎么实现?方法1. 使用join()Thread t2 = new Thread(() -> {    // T2 线程的执行逻辑    System.out.println("T2 线程正在执行");});Thread t1 = new Thread(() -> {    try {        System.out.println("T1 线程开始执行");                // T1 线程在此处等待 T2 线程执行完成        t2.start();  // 启动 T2 线程        t2.join();    // T1 等待 T2 完成                System.out.println("T2 线程已完成,T1 继续执行");    } catch (InterruptedException e) {        e.printStackTrace();    }});t1.start();方法2. 使用future.get()ExecutorService executor = Executors.newSingleThreadExecutor();Future future = executor.submit(() -> {    // T2 线程的执行逻辑    System.out.println("T2 线程正在执行");});Thread t1 = new Thread(() -> {    try {        System.out.println("T1 线程开始执行");                // T1 线程在此处等待 T2 线程执行完成        future.get();  // 阻塞直到 T2 完成                System.out.println("T2 线程已完成,T1 继续执行");    } catch (InterruptedException | ExecutionException e) {        e.printStackTrace();    } finally {        executor.shutdown();    }});t1.start();方法3. 使用countdownlatchCountDownLatch latch = new CountDownLatch(1);Thread t2 = new Thread(() -> {    try {        System.out.println("T2 线程正在执行");    } finally {        latch.countDown();  // 完成时减少计数    }});Thread t1 = new Thread(() -> {    try {        System.out.println("T1 线程开始执行");                t2.start();  // 启动 T2 线程        latch.await();  // 等待 T2 完成                System.out.println("T2 线程已完成,T1 继续执行");    } catch (InterruptedException e) {        e.printStackTrace();    }});t1.start();11. a=a+b 和 a+=b的区别a = a + b,如果 a 和 b 的类型不同(如 a 是 int,b 是 double),需要显式强制类型转换,否则会编译报错。即:double a= 1;int b = 2;a = (double) (a+b); a += b,会自动执行隐式类型转换,将结果转换为 a 的类型。13. 数据库的三大范式如答案有错误欢迎指正
查看24道真题和解析
点赞 评论 收藏
分享
评论
1
23
分享

创作者周榜

更多
牛客网
牛客企业服务