纬创科技面试
面试时间:2021.10.09 19:00
面试方式:两个面试官 腾讯视频面试
面试总结:总体面试比较简单,但是问题较多,也很全面。总体上还是比较满意的
问题
基本情况:
- 介绍之前的项目情况,所负责的项目
- 是否熟悉银行的项目,之前是否有了解过
Java基础
-
面向对象的三大基本特征
-
封装
-
继承
- 接口:
- 方法:不能有方法的实现
- 多实现接口
- 抽象类:
- 方法:可以有方法实现,也可以有抽象方法
- 单继承
- 接口:
-
多态
这个答上来了,不过不是特别的全面,比如重写的访问权限、异常等
-
重载 overload
同一个类中,允许有一个以上相同名字的方法。与返回值无关,只看参数列表
重:多个
over:很多,load:加载 有很多方法可供加载的意思
-
重写 overwrite
重写表示只子类的方法,通过子类实例调用时,会覆盖父类的方法
特点:
- 访问权限 :父类=< 子类
- 如果子类是private,子类实例只有本类可见,谈不上重写
- 异常:父类>=子类
- 如果子类抛多了异常,通过父类调用子类实例时,子类多的异常,根本无法得知,导致和无法捕获
- 访问权限 :父类=< 子类
-
-
-
java的数据类型
要区分基础数据类型和引用数据类型:string和数组分别是什么
并且分别存储在哪里
- 基础数据类型 8个:boolean、byte、short、int、float、long、double、char
- 存储在栈上
- 没有String类型
- 引用数据类型:类、接口、数组
- 数组元素存储在堆中
- 基础数据类型 8个:boolean、byte、short、int、float、long、double、char
-
ArrayList和LinkList的区别
- ArraList:通过数组实现,get、set比较快
- LinkList:通过链表实现,remove比较快
-
Java线程的几种状态
-
多线程的集中实现方法
框架
Srring
-
IOC是什么:控制反传,把代码中的对象的创建、依赖都传递给IOC容器进行管理
需要和AOP进行区分,AOP是面向切面编程
如果不用IOC,需要处理对象之前的依赖是挺麻烦的
-
BeanFactory、FactoryBean的区别
-
BeanFactory:负责生产和管理Bean的一个工厂接口,提供一个Spring Ioc容器规范
-
FactoryBean:是一个工厂Bean,可以生成某一个类型Bean实例,它最大的一个作用是:可以让我们自定义Bean的创建过程
// // Source code recreated from a .class file by IntelliJ IDEA // (powered by FernFlower decompiler) // package org.springframework.beans.factory; import org.springframework.lang.Nullable; public interface FactoryBean<T> { String OBJECT_TYPE_ATTRIBUTE = "factoryBeanObjectType"; @Nullable T getObject() throws Exception; @Nullable Class<?> getObjectType(); default boolean isSingleton() { return true; } }
-
-
Spring创建的对象是单例的吗?
- 默认为单例,可以自己控制为多例
-
Spring bean的生命周期
一般的对象是1.实例化 2.不使用后等待GC的销毁
Spring管理的对象主要是单例的,如果是多例的创建后就不由spring管理了
各个生命周期都要其拓展点,可以直接实现接口进行拓展
- 实例化
- 属性赋值
- 初始化
- 销毁
微服务
-
什么是集群
- 一组相互独立的计算机,通过通信网络组成的大型计算机服务系统
- 负载规划、高可用、高性能等集群
-
项目使用了哪些微服务
-
网关的作用
- 统一入口
- 鉴权
- 限流等
-
微服务负载均衡策略是怎么做的
- ribbon
-
微服务之间的通信协议用的是哪些
- RestAPI+RPC
消息中间件
MQ
- 实际项目中MQ的使用场景
说了项目间消息的通信,松耦合系统间的通信。
- 黑名单缓一级存的刷新:需要使用到广播模式
- 门诊叫号
- 其他的一些场景
- 消息通信:聊天室
- 流量销峰:利用消息队列先进先出,有队列长度的特点
- 消息的延期推送:订单系统,半小时后发送问卷调查
- 怎么保证MQ消息不丢失
- 大体上分生产者、MQ中间件、消费者。
- 生产和消费者感觉不同的中间件,可以开启事务或者握手确认
- 中间件可以开启消息持久化
- 业务上可以入表持久化进行确认
- 怎么保证MQ不被重复消费
- 程序上保持幂等,可以记录下唯一的ID等,判断时候已经消费过
Redis
-
实际项目中Redis的使用
基础数据缓存,并且和一级缓存Caffine配合门面模式一起使用
- 分布式锁
-
时候有遇到缓存雪崩和击穿的情况
- 雪崩:同一时间缓存失效,导致DB压力过大
- 设置不同的缓存失效时间:添加随即数解决
- 热Key甚至更加合理的时间
- 分级缓存
- 击穿:查询大量不存在的key,或者数据库为null的数据,导致缓存不起作用
- 查询到null放入到redis,设置一个断的失效时间
- 使用布隆过滤器:数组+hash+01判断,不在就返回
- 做好前端的参数校验
- 雪崩:同一时间缓存失效,导致DB压力过大
-
redis的其他使用场景
分布式缓存。结构简单、速度快、支持多种数据类型
- 计数器等等
-
redis支持那些数据类型
我们项目中只支持:string、Object
其他的LIst、Set、Hash、Byte等
DB
- SQL优化技巧
- 索引的建立规则
Linux等运维
-
如何打ZIP、tar包
当时说了递归的-r
可以补充分卷压缩
参数说明 multi
-s
size 大小
zip -s 28m ideaIU-2020.1.win.zip --out idea-2020-1
-r
递归
-6 is the default compression level -0 is the lowest compression level -9 is the highest compression level
zip 负责压缩文件
dyq9410@XPS:~/Downloads$ zip -r -9 es6.zip ecma262-es2016-draft-201607-25
-
是否有其他使用经验
- 搭建rabbitmq
- vi编辑器+chrom权限
其他问题
-
之前工作复盘
说最满意的一个项目:门诊MQ叫号+ANT maven化
未做好的点:1.知识积累欠缺
项目在流程和计划的重要性
-
出差、行业选择和职业规划