4.面试介绍
总结:
1.功能介绍
面试官老师您好:
我叫吴孟达,我在java方面有7年开发经验,分布式开发有四年经验,我平时在项目中熟练使用的经验有
1.有spring,springmvc,springboot,mysql(以及sql调优和索引优化),springcloud,mybatis,docker等,
2.我能熟练使用kafka、redis,docker等第三方插件,
3.也有nginx,elasticsearch,doubo等使用经验,
4.我也熟悉javaIO\NIO\多线程,通信协议、设计模式等技术、
5.我也很熟悉JVM的工作原理、垃圾回收原理并掌握常见性能调优方法
2.项目介绍
在云网控制和采集平台项目中,参与项目设计开发,负责其中告警数据、配置数据的采集分析和转派单处理,项目组有7个人,做了半年,现已平稳上线运行
vue做前台展示,springboot作为其核心框架层,nigix做反向代理,redis做为其缓存层,eureka做为其服务注册中心,openfegin作为其远程调用接口,kafka作为其第三方消息中间件,docker容器化部署,ribbon作为其内部负载均衡
1.有redis集群搭建,以及其分布式锁的开发经验,解决过分布式锁的归一化、可重入性,以及锁失效问题
2.解决过JVM 的oom问题,有内存调优方面的经验
2.cpu使用猛增,死锁问题
3.有kafka集群搭建,解决过kafka的数据重复、数据乱序、重复性消费以及数据积压问题
4.在项目开发中,我换专研过包括springmvc、springboot的自动配置源码,java集合源码、juc、线程池,多线程锁等源码,jvm jmm模型和垃圾回收算法
5.在项目中用过mysql索引,解决过数据库性能问题
6.实际使用了设计模式(包括策略模式,工厂模式,单例模式,责任连模式,模板方法等)
在平时工作中,我是一个高效并学习能力很强的人,工作中喜欢将自己不熟悉的内容书面化,方便二次查阅
1.功能介绍
面试官老师您好:
我叫吴孟达,我在java方面有7年开发经验,分布式开发有四年经验,
1.有spring,springmvc,springboot,mysql(以及sql调优和索引优化),springcloud,mybatis,docker等项目经验,
2.熟练使用kafka、redis,docker等第三方插件,
3.有nginx,elasticsearch,doubo等使用经验,
4.熟悉javaIO\NIO\多线程,通信协议、设计模式等技术、
5.熟悉JVM的工作原理、垃圾回收原理并掌握常见性能调优方法
2.项目介绍
在云网控制和采集平台项目中,参与项目设计开发,负责其中告警数据、配置数据的采集分析和转派单处理,项目组有7个人,做了半年,现已平稳上线运行
vue做前台展示,springboot作为其核心框架层,nigix做反向代理,redis做为其缓存层,eureka做为其服务注册中心,openfegin作为其远程调用接口,kafka作为其第三方消息中间件,docker容器化部署,ribbon作为其内部负载均衡
1.有redis集群搭建,以及其分布式锁的开发经验,解决过分布式锁的归一化、可重入性,以及锁失效问题
例如:在做其中告警采集时,实时告警请求过来时,会缓存告警id,十分钟内恢复告警请求不来的话会进行派单处理,有时候多条恢复告警会同时请求(攻防演练时会故意测试多条恢复告警情况),会先对实时告警id加入分布式锁(stringRedisTemplate.opsForValue().setIfAbsent(PRODUCT_ID, "binghe")
2.解决过JVM 的oom问题,有内存调优方面的经验
1.https://www.cnblogs.com/wmd-l/p/16289793.html
2.https://zhuanlan.zhihu.com/p/551301967?utm_id=0
2.cpu使用猛增
1.程序中存在死循环或者长时间占用 CPU 的操作。比如,不合理的递归操作、循环操作等等。
2.程序中存在大量的 IO 操作,例如读写文件、网络通信等等。
3.程序中存在内存泄漏或者内存溢出,导致 JVM 不断进行垃圾回收
3.有kafka集群搭建,解决过kafka的数据重复、数据乱序、重复性消费以及数据积压问题
4.在项目开发中,我换专研过包括springmvc、springboot的自动配置源码,java集合源码、juc、线程池,多线程锁等源码,jvm jmm模型和垃圾回收算法
展示设备高兴时需要展示设备照片
1.假如有一个应用需要读取大量的本地图片 * 如果每次都去图片都从硬盘中读取则会严重的影响性能 * 如果一次性全部加载到内存中有可能会造成内存溢出 此时可以使用软引用(内存足够时不回收,不够时回收)或者弱引用(垃圾回收时都回收,不管内存是否足够)解决这个问题 设计思路: 用一个HashMap来保存这些图片的路径和响应的图片对象关联的软引用之间映射关系,在内存不足时,JVM会自动回收这些缓存图片对象所占用的空间,从而有效的避免了OOM的问题 Map<String,SoftReference<Bitmap>> imageCache=new HashMap<String,SoftReference<Bitmap>>();
5.在项目中用过mysql索引,解决过数据库性能问题
6.设计模式的使用
1.策略模式
通俗定义:要执行一些方法,方法有几个,什么方法,这些是固定的;但是方法的实现是不一样的,有多种策略,那这个时候,就可以定义一个基本的封装方法的接口,然后再定义不同的 策略实现类。这样在调用的时候,只需要传入指定的区分不同策略的条件,然后调用具体的方法就可以了
在处理告警时,因各厂家的告警处理逻辑不一样,如华为厂家需要需要夹带设备信息,烽火需要转派处理,所以定义一个基本的封装方法接口,定义不同的处理逻辑策略类,调用时,根据 不同厂家调用不同的策略类
在获取具体策略时,又同步使用了工厂模式和单例模式,来初始化一个具体的策略
所有的策略对象都会实现同一个接口(处理告警数据),
public class SQLDialectFactory {
/**
* className => 策略类的映射
*/
private static final Map<String, 策略类> DIALECT_POOL = new ConcurrentHashMap<>(); // 线程安全
/**
* 策略对象缩写===策略对象全类名
*/
定义了一个枚举类,里面包含策略对象缩写===策略对象全类名
private SQLDialectFactory() {
}
public static 策略对象 getDialect(String className) throws ClassNotFoundException {
//获取策略对象
SQLDialect dialect = DIALECT_POOL.get(className);
if (null == dialect) {
synchronized (Class.forName("类模板")) {
if (null == dialect) {
//调用不同厂家的工厂类创建对应的策略类对象
}
}
}
return dialect;
}
}
2.责任链模式,在进行告警处理前会进行大量的业务校验,如一些必填参数校验(网元ip,告警类型,告警级别等),群障标识等,割接重保拦截,规则拦截等
1.https://my.oschina.net/u/4179967/blog/5304716
3.模板方法
在告警除安排工单处理时,有公共的处理流程,如查询出设备详细信息,挂带设备地址等,但是具体的查询方法,以及挂在设备的处理方式不一样(某些厂家查询出的设备名称需要进行截取等等),转派单处理,所以定义了一个抽象类,将公共的流程抽象成一个个公共的抽象方法,并定义一个骨架流程方法,调用抽象方法,最终会调用到子类的具体实现上
4.观察者模式
告警转派工单后需要提醒不同级别的人,
在平时工作中,我是一个高效并学习能力很强的人,工作中喜欢将自己不熟悉的内容书面化,方便二次查阅