科大讯飞二面,38min
写在前面
虽然没有开视频,但是面试官声音很好听,中间不会的一直在引导,激发想继续钻研的决心了,感觉体验很棒,但感觉会挂。
介绍RPC项目
为什么用RPC,用HTTP不行吗
你认为RPC适用于什么场景
来自网上的答案:
如果我们开发简单的应用,业务流程简单、流量不大,根本用不着 RPC。当我们的应用访问量增加和业务增加时,发现单机已无法承受,此时可以根据不同的业务(划分清楚业务逻辑)拆分成几个互不关联的应用,分别部署在不同的机器上,此时可能也不需要用到 RPC 。
netty是什么?讲一下Netty?
了解事件循环吗?
瞎掰了一点,对方就嗯了一下
线程池的核心参数有哪些?以及工作流程
- corePoolSize :当有新任务时,如果线程池中线程数没有达到线程池的基本大小,则会创建新的线程执行任务,否则将任务放入阻塞队列。当线程池中存活的线程数总是大于 corePoolSize 时,应该考虑调大 corePoolSize。
- maximumPoolSize :当阻塞队列填满时,如果线程池中线程数没有超过最大线程数,则会创建新的线程运行任务。否则根据拒绝策略处理新任务。非核心线程类似于临时借来的资源,这些线程在空闲时间超过 keepAliveTime 之后,就应该退出,避免资源浪费。
- BlockingQueue :存储等待运行的任务。
- keepAliveTime :非核心线程空闲后,保持存活的时间,此参数只对非核心线程有效。设置为0,表示多余的空闲线程会被立即终止。
- TimeUnit :时间单位
拒绝策略
ThreadPoolExecutor.AbortPolicy: 丢弃任务并抛出RejectedExecutionException异常。 ThreadPoolExecutor.DiscardPolicy:丢弃任务,但是不抛出异常。
ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新提交被拒绝的任务 。
ThreadPoolExecutor.CallerRunsPolicy:由调用线程(提交任务的线程)处理该任务。
介绍一下超市购物系统?
为什么要用redis,数据库达到什么量级的时候需要用到redis?
先说了redis的几个优点,比如基于内存,reactor模型,IO多路复用,面试官又问那又为什么呢,避免设计的宗旨就是避免频繁查询数据库,面试官问频繁查询数据库又怎么了,我说可能导致线程不安全,还有可能是使数据库宕机造成崩溃,面试官:那redis就不会宕机吗
springboot
springbootApplication包括哪三个注解
@SpringBootConfiguration( 声明当前类是一个配置类, 简化xml操作 )
@EnableAutoConfiguration( 开启自动配置, 告诉SpringBoot基于所添加的依赖 )
@ComponentScan(配置组件扫描的指令 )
springboot启动流程
application.properties, applicaition.yaml,bootstrap优先顺序
了解跨域问题吗?
Mysql
事务的隔离级别?带来的问题?如何解决?
- 读未提交。当前事务能看到其他事务未提交的数据,有脏读,不可重复读,幻读问题。
- 读已提交。一个事务开始时,只能看见已提交事务所做的改变。解决了脏读,但有不可重复读,幻读的问题。
不可重复读:事务B在事务A的两次查询语句之间进行了修改并提交,A两次查询的内容就不一样了
- 可重复读。保证同一事物的多个实例在并发读取事务时,会看到同样的数据行。解决了不可重复读的问题,但有幻读问题
- 可串行化。强制事务排序,使之不可能产生冲突
MVCC解决幻读问题
JAVA基础
Objects常用的方法(11个)
1.public final Class<?ectends Object> getClass()返回一个运行时的类
2.public int hashCode()返回对象的哈希码;
3.public Boolean equals(Object o)比较对象是否相等;
4.protect Object clone()返回对象的副本;要声明实现Clonable,要有异常处理,只能在其子类或类内用;当克隆一份对象时,其对象属性只是克隆了一份指向另一个对象的地址值;
5.public String toString()返回对象的字符串表示;打印一个对象默认调用其默认toString()方法;
6.public final void notify()唤醒在此对象监视器上等待的单个线程;
7.public final void notifyAll()唤醒在此对象监视器上的所有线程;
8.protected void finalize()当垃圾回收器确定不存在对该对象的更多引用时,调用此方法回收对象;
9.public final void wait(long timeout)导致当前线程等待,直到其他线程调用此对象的notify()或notifyAll()方法或时间超时;
10.public final void wait(long timeout, int nanos)或其他线程中断当前线程,或超过实际时间:1000000*timeout+nanos;
11.public final void wait()导致当前线程等待,直到其他线程调用此对象的notify()或notifyAll()方法;