科大讯飞面经

本文详述了一次科大讯飞的二面经历,涉及RPC(远程过程调用)的使用场景及其与HTTP的区别,Netty的原理及事件循环概念,线程池的核心参数与工作流程。此外,还讨论了超市购物系统中Redis的运用,SpringBoot的启动流程,MySQL事务隔离级别及其解决方案,以及Java Objects常用方法。面试官通过问题引导,激发了深入学习的热情,尽管感觉挑战颇大。
摘要由CSDN通过智能技术生成

写在前面

虽然没有开视频,但是面试官声音很好听,中间不会的一直在引导,激发想继续钻研的决心了,感觉体验很棒,但感觉会挂。

介绍RPC项目

为什么用RPC,用HTTP不行吗
你认为RPC适用于什么场景

来自网上的答案:
如果我们开发简单的应用,业务流程简单、流量不大,根本用不着 RPC。当我们的应用访问量增加和业务增加时,发现单机已无法承受,此时可以根据不同的业务(划分清楚业务逻辑)拆分成几个互不关联的应用,分别部署在不同的机器上,此时可能也不需要用到 RPC 。

netty是什么?讲一下Netty?
了解事件循环吗?

瞎掰了一点,对方就嗯了一下

线程池的核心参数有哪些?以及工作流程
  1. corePoolSize :当有新任务时,如果线程池中线程数没有达到线程池的基本大小,则会创建新的线程执行任务,否则将任务放入阻塞队列。当线程池中存活的线程数总是大于 corePoolSize 时,应该考虑调大 corePoolSize。
  2. maximumPoolSize :当阻塞队列填满时,如果线程池中线程数没有超过最大线程数,则会创建新的线程运行任务。否则根据拒绝策略处理新任务。非核心线程类似于临时借来的资源,这些线程在空闲时间超过 keepAliveTime 之后,就应该退出,避免资源浪费。
  3. BlockingQueue :存储等待运行的任务。
  4. keepAliveTime :非核心线程空闲后,保持存活的时间,此参数只对非核心线程有效。设置为0,表示多余的空闲线程会被立即终止。
  5. 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()方法;

为啥要同时重写hashcode和equals
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值