3. 金证股份面试复盘

结果:

挂了,面试官觉得我八股不行,基础薄弱,不尊重他

时间

2023.2.25

心得

第一次线下面试,基础题没背太熟(八股一定要好好背,理解性记忆+部分死记硬背)

注: ----- 以下答案不再更新(考虑删除),统一在面试宝典中更新

重载和重写的区别?

首先他们都是实现多态的方式

然后说一下他们基本的概念

重载:

同一类中的同名函数,具有不同参数个数或类型(不要求返回值),由静态类型确定,属于静态分派

重写:

子类含有父类相同名字、返回类型、和参数列表,则为重写,属于动态分派;

重写要求子类重写方法更容易访问,不能抛出更多异常,以及访问修饰符的限制不能比父类小;

不同点:

重载是编译时多态性,重写是运行时多态性

重载发生在一个类中,重写发生在子类和父类之间

重载不要求返回类型,重写要求返回类型相同

构造器和静态方法能被重载,但不能被重写

注意点:重写的返回类型不要求完全一样

  1. 返回类型使用使用泛型

  1. 返回类型使用父类的子类

数据结构中,哪些是线程安全的,哪些是非线程安全的,能举两个例子吗?

ArrayList,HashMap,StringBuilder是非线程安全的;

vector,HashTable,StringBuffer是线程安全的;

什么是线程安全?(线程安全的特性)

线程安全是指某个方法或某段代码,在多线程中能够正确的执行,不会出现数据不一致或数据污染的情况,我们把这样的程序称之为线程安全的,反之则为非线程安全的。

线程安全的三大特性:原子性、可见性、有序性

原子性:一个或者多个操作,要么全部执行,要么全部不执行,可以通过各种锁去保证;

可见性:线程之间的可见性,一个线程状态的修改对另一个线程是可见的,可以通过 volatile 关键字去保证;

有序性:执行的顺序按照代码的先后顺序执行;

代理了解吗?动态代理有几种实现方式?

aop就是用的代理实现,代理分为静态代理和动态代理

静态代理比如 AspectJ,AOP框架会在编译阶段生成AOP代理类,属于编译时的增强

动态代理比如 jdk动态代理 和 CGLIB ,AOP框架不会去修改字节码,而是每次运行时在内存临时为方法生成一个AOP对象,AOP对象包含了目标对象的全部方法,在特定切点做了增强处理,并回调原对象的方法。

当时的回答:spring使用的就是动态代理,动态代理有两个:jdk自带的和Cglib,jdk的代理效率会高一些,Cglib是动态代码生成库。

为什么要加动态代理?

Spring框架使用代理模式来实现AOP,主要是因为:

  1. 代理模式可以在不修改原始对象的情况下实现横切逻辑的织入,使系统更加灵活和可靠。
  2. 代理模式可以代理接口和普通Java类,因此可以更加方便的使用。
  3. 代理模式可以对原始对象的方法进行拦截,从而实现AOP中定义的通用逻辑,大大提高了系统的复用性、可维护性和可扩展性。
  4. 由于静态代理需要特定的编译器进行处理,所以采用动态代理。

面试官提示:可以结合一下场景来说,为什么要用动态代理?我直接用类生成不行吗?

直接用类生成需要对原有类做修改,一般适用于修改量少的情况,如果修改的类较多就会导致代码难以维护。

当时的回答:动态代理是在运行时做一个代码的...不是很清楚

两种动态代理的优劣势是什么?

  • 动态代理的两个方法:JDK动态代理和CGLIB动态代理

两种动态代理效果差不多,CGLIB由于不用实现接口,会方便一些。

分布式事务用到哪些组件?(待完善)

分布式事务理论:CAP理论和BASE理论

除银行项目等一些项目要求强一致性外,即CP模型,其他都是用的AP模型

组件:seata、hmily、raincat、myth等

分布式事务解决方案:2pc、3pc

当时的回答:项目上没用过,我了解分布式事务有很多组件,是使用ap协议去进行。a是高可用性,p是分区容错性。c(一致性)是通过最终一次性去保证的(面试官提示:不是问你这个,请听清楚题目啊)

cap为什么不能三个同时满足?

由于网络波动,无法保证分区容错性(P),所以无法保证CA

举了例子:如果系统出现“分区”,系统中的某个节点在进行写操作。为了保证C(一致性),必须要禁止其他节点的读写操作,这就和A发生冲突了。如果为了保证A,其他节点的读写操作正常的话,那就和C发生冲突了。

ACID 是数据库事务完整性的理论,CAP 是分布式系统设计理论,BASE 是 CAP 理论中 AP 方案的延伸。

当时的回答:由于网络波动,无法保证一致性(c)

举几个锁,并说一下使用场景?

悲观锁:对数据库的表进行更新操作,会对加行锁,也可以手动加表锁:select for update 手动加锁

为什么要手动加锁?

rc隔离级别下保证数据一致性

乐观锁:使用 CAS机制和表字段去控制,防止对表的操作发生冲突。

可重入锁:可以用在分布式锁中

分布式锁:

当时错误的回答:

说了分布式锁

面试官提示:可以结合业务场景去说

业务场景:防止用户点击多次,要保证只有一个请求能进方法里面(这里应该是同单据number下),需要加分布式锁,用单据号作为分布式锁的key,原理采用到了 ReentrantLock ,以及lua脚本去保证它的原子性

分布式锁用什么实现的?

当时的回答:公司封装了分布式锁的相关工具类,具体是用红锁(redLock)实现的

分布式锁怎么保证跨服务的一个情况?

通过第三方服务比如 reids 去共享锁,保证同一时刻只能有一个实例能够获取到锁。

当时无用的回答:我的场景不需要跨多个服务,说了redLock在网上有一些争议,但是还好(弄清楚有什么争议?),redLock有一个哨兵机制去进行选举,票数多才能获得锁。

用的mysql几?

5.7

mysql5.7和8.0的区别是什么?

对 InnoDB 做了很多优化,还有就是隔离级别的不同,mysql5.7默认rr,8.0默认rc

对单表建索引,有什么要求跟限制吗?

看具体业务场景,一般在搜索常用的字段加索引,并且字段的区分度要比较高。这样在索引树上的搜索的效率会高很多。(个人感觉回答的还行)

怎么看执行计划?

通过 EXPLAIN 关键字去查看 sql 的执行计划,看是否走索引,没有走索引的原因是什么,以及哪些表的执行时间比较高,去做一个针对性优化。

实际案例是,oracle那边一段sql由于数据量比较大,而且没有走索引,解决方案是改为精确搜索,就走了索引,时间从200多秒下降到2秒多。

面试官评价

个人很自信,(这里不能打断面试官),回答问题要尽量从真实经历去切入。

纠正说话

不要额这些语气词

一句话不连贯,说到一半开始想

吸鼻子

紧张

不要当场请教问题(摆正态度,我是去面试的,而且有些问题面试官也懒得理你)

少说“就是”

#如何判断面试是否凉了##牛客在线求职答疑中心##牛客解忧铺#
全部评论
就当积累经验啦,加油
1 回复 分享
发布于 2023-03-17 17:54 山东
楼主你好,mysql不同版本我理解隔离级别都是rr吧,特意查看了一下
点赞 回复 分享
发布于 2024-03-08 09:59 广东
是金证科技吗楼主
点赞 回复 分享
发布于 2023-03-18 12:24 广东
不尊重他
点赞 回复 分享
发布于 2023-03-17 19:47 重庆
感谢楼主分享
点赞 回复 分享
发布于 2023-03-17 18:09 四川

相关推荐

评论
19
51
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务