Skip to content

Commit

Permalink
feat(post): 完善文章
Browse files Browse the repository at this point in the history
  • Loading branch information
李济芝 committed Dec 7, 2023
1 parent 2f4680a commit 894baca
Show file tree
Hide file tree
Showing 14 changed files with 938 additions and 45 deletions.
2 changes: 1 addition & 1 deletion blog-site/content/posts/essays/HashMap详解.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ slug: "java-hashmap"
- `capacity`: 容量,默认16;
- `loadFactor`: 负载因子,表示HashMap满的程度,默认值为0.75f,也就是说默认情况下,当HashMap中元素个数达到了容量的3/4的时候就会进行自动扩容;
- `threshold`: 阈值;`阈值 = 容量 * 负载因子`。默认12;
- hash碰撞(hash冲突):两个不同的输入值,根据同一散列函数计算出的散列值相同的现象叫做碰撞。hash碰撞就是用同一hash散列函数计算出相同的散列值;当插入hashmap中元素的key出现重复时,这个时候就发生了hash碰撞;
- hash碰撞(hash冲突):两个不同的输入值,根据同一散列函数计算出的散列值相同的现象叫做碰撞。hash碰撞就是用同一hash散列函数计算出相同的散列值;当插入hashmap中元素的key出现重复时,这个时候就发生了hash碰撞;

## 结构
![HashMap结构](/iblog/posts/annex/images/essays/HashMap结构.png)
Expand Down
71 changes: 37 additions & 34 deletions blog-site/content/posts/resume/我的简历_优化.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ slug: "interview-resume-optimize"
</div>
<div class="myself_desc">
<p style="text-indent: 30px">
本人有严谨的工作态度与高质量意识;能查阅各种开发技术手册,具有独立解决问题的能力。具备扎实的Java基础和三年开发经验,有良好的编程风格,独立熟练使用Spring全家桶等常用类库开发Java服务端程序、对SQL能够进行分析调优、对Java服务端程序故障能独立排查。工作责任心强,具有一定的承压能力。
本人有严谨的工作态度与高质量意识;能查阅各种开发技术手册,具有独立解决问题的能力。具备扎实的Java基础和四年开发经验,有良好的编程风格,独立熟练使用Spring全家桶等常用类库开发Java服务端程序、对Java服务端程序故障能独立排查。工作责任心强,具有一定的承压能力。
</p>
</div>
</div>
Expand All @@ -86,8 +86,7 @@ slug: "interview-resume-optimize"

- 具备扎实的`Java`基础,熟练使用`Java`集合、`Java IO`、多线程、反射等技术;熟悉java核心的集合框架;
- 熟悉多线程及使用,掌握线程池底层实现原理,有多线程方面开发经验;
- 熟练使用`Spring``Spring Boot``Netty``Kafka``Redis``Elasticsearch`等开源框架;
- 熟悉微服务架构,`Spring Cloud``Spring CloudAlibaba`体系,对分布式微服务特点,旧服务改造,服务划分、服务治理、服务分层都有深入理解,有线上项目经验;
- 熟悉微服务架构,`Spring Cloud``Springcloud Alibaba`体系,对分布式微服务,旧服务改造,服务划分、服务治理、服务分层都有深入理解,有线上项目经验;
- 熟练掌握 Redis,深入了解底层网络模型、底层数据结构、持久化机制,有分布式锁、分布式缓存的设计经验;
- 较深入理解`Spring``Netty`框架,研究过核心源码,较为熟练借鉴框架中的设计,具备一定框架定制开发能力;
- 熟练编写`SQL`、视图及存储过程,熟练使用索引和执行计划进行数据库调优;
Expand All @@ -104,80 +103,84 @@ slug: "interview-resume-optimize"

简介:网站主要展示一些耐火材料行业相关的资讯信息,至今共为其迭代80多个版本。

技术栈:`Springboot、Springcloud alibaba、 Nacos、Mybatisplus、Redis、Elasticsearch、xxljob`

工作职责:
1. 负责系统重构,解决历史技术债务
1. 负责底层组件开发与设计
- 独立负责ElasticSearch组件的设计与开发。基于es 7.*版本封装,采用High Level REST Client,提供创建Index、删除Index、数据的增、删、改、查等能力,业务侧查询覆盖模糊查询、批量查询、批量新增、批量修改、排序等功能,对使用方友好屏蔽es操作细节。组件上线后,在客户前端全局搜索场景得到深度使用,经过充分压测,节点性能QPS轻松支持 2000+;
- 独立负责系统分布式锁组件的设计与开发。核心实现方案通过集成Redisson框架,采用注解+AOP实现组件与业务解耦,提供锁互斥、阻塞与非阻塞锁、锁安全释放线程、锁重入、锁续期、公平锁等常见的功能,另外利用分布式锁实现后端应用管理、积分规则维护等功能防重提交。组件上线后,在积分兑换等场景得到大量应用,经过充分压测,分布式锁单节点性能QPS支持1000+;
- 独立负责业务管道流组件设计与开发。参照Netty中的pipeline管道实现,在编写业务代码时,将数据从一个阶段传递到下一个阶段的方法。每个阶段执行特定的数据处理操作,从而实现了业务代码上的解耦,避免类膨胀,又将管道与配置相结合,实现了跳链功能,增加其灵活性;

2. 负责系统重构,解决历史技术债务
- 使用Java设计模式设计了一些较为复杂的业务功能,使其扩展性、可重用性大大增强,提高了开发效率;
- 通过多种设计模式的组合,重构支付模块(目前已接入微信、支付宝)、重构文件上传模块,(目前已接入阿里云、FastDFS)接入新渠道的开发周期,从之前的8人天降低到4人天;
- 通过多种设计模式的组合+ElasticSearch,重构了全局搜索功能,响应速度提高近10倍,极大提升了用户体验;
2. 负责系统技术架构升级与改造
- 通过引入Elasticsearch,重构了全局搜索功能,响应速度提高近10倍,极大提升了用户体验;

3. 负责系统技术架构升级与改造
- 系统模块目录非常混乱,缺乏统一的规范,重复建设严重,通过基于业务来进行功能目录划分,公共的技术组件下沉到底层framework,开发效率提升一倍;
- 业务定时任务从传统的spring task,迁移到xxljob分布式调度任务,方便任务可视化管理,任务执行的稳定性也有很大提升;
3. 负责核心功能模块设计与开发

4. 负责核心功能模块设计与开发
- 负责用户浏览量功能设计与开发。利用Redis自增方法,实现访问量统计功能;使用Redis作为浏览轨迹功能写入缓存,并解决缓存击穿问题,极大提升了系统响应速度;
- 负责用户登录、注册、短信邮件发送功能及维护用户的一些接口。技术侧,基于JWT Token实现用户鉴权,实现用户后台拉黑、Token续期,跨端鉴权等功能;

- 完成首页相关接口的优化与开发。将项目首页数据加入本地缓存redis缓存, 为了保证DB和Redis数据一致性,配置更新后,更新DB,通过MQ广播消息,各个应用节后收到MQ后,从DB中查询信息回写到本地缓存和redis缓存,有效时间设置有效截止时间+1天,同时设计一个兜底的定时任务定时刷新,将DB数据刷新到缓存保证整个全局一致性;
4. 生产疑难问题排查与优化处理

5. 负责生产疑难问题排查与优化处理
- 采用随机睡眠机制防止redis CPU飙高。分页每次处理500条数据写入redis后,随机睡眠0-200ms,防止redis CPU短时间内飙高;
- 实时查询改为定时查询。之前每次查库3个维度计算都在一个SQL中处理,长事务,平均耗时3s左右。优化方案为每隔30分钟,根据交易明细数据进行统计,将相关数据处理完成后写入到redis,耗时降为300ms,提升10倍;
- 项目产品列表信息报文非常大,用户查询,请求量非常大,高并发下redis IO容易被打爆,为了解决这个难题,将之前的redis存储改为list存储,采用拆分大key的方案,同时redis key按项目分开存储,对redis value进行压缩,剔除非必要字段(比如创建时间、创建人、备注等),优化完成后,redis cpu从高峰的60%稳定在15%左右;
- 控制单次写表数量。通过重写mybatis拦截器,当业务单次提交记录大于动态配置开关配置的N条,分批次提交,防止数据库CPU飙高;
- 大表取消数据库join,使用内存join并引入多线程并发查询,查询速度提升近5倍;
- 大表取消数据库join使用内存join并引入多线程并发查询,查询速度提升近5倍;

工作业绩:
1. 成中国耐材之窗网核心功能的设计与开发、系统重构。系统上线后比较稳定,用户投诉很少,整体体验很流畅;
2. 完成部分核心接口的性能优化。响应时间从3s降低到0.3s,性能提升10倍;
3. 多次解决线上各种疑难问题。例如:redis大key、线上CPU飙高等;


### 北京利联 2019.11 ~ 2022.1
### 北京利联 2019.10 ~ 2022.1

公司主要为金融行业提供计算机软件服务,在职期间主要负责建设验印系统和票据影像交换系统。

#### 项目一:盛京银行-票据影像交换系统
- 简介:票据影像交换系统,即交换银行与银行之间的凭证对其进行验印。盛京银行-票据影像交换系统,基于旧系统改造。新票据影像交换系统采用TCP/IP与其他系统通讯,后端使用`Spring Boot、Netty`
框架与其他系统进行交互。
简介:票据影像交换系统,即交换银行与银行之间的凭证对其进行验印。盛京银行-票据影像交换系统,基于旧系统改造。

- 技术栈:
`Springboot、Netty、Springcloud alibaba、 Nacos、Mybatisplus、Redis`
技术栈:`Springboot、Netty、Springcloud alibaba、 Nacos、Mybatisplus、Redis`

- 工作职责:
工作职责:
1. 负责系统技术架构改造
- 技术架构从原始的spring升级到springboot架构,通过自身内嵌的tomcat容器运行,基于CI/CD,可快速完成应用编译、打包、部署,提升研发交付效率;
- 使用Netty作为服务方,与其他系统进行交互,利用NIO提高了系统交互速度;
- 将 Nacos 作为配置中心整合到项目中,使其配置支持热部署,方便管理,同时为项目拆分转微服务奠定基础;

2. 负责核心功能模块设计与开发
- 使用模版、策略设计模式对接第三方系统(支付系统、柜面系统、影像平台系统等),提高代码的可读性和扩展性;
- 负责对接盛京银行单点登录系统,通过Redis解决了Session不共享的问题;
- 利用Spring AOP特点整合了一些公共方法,如记录日志,公共校验,敏感词过滤等,提高了代码的复用性,增强了代码的可维护性;
- 利用Spring AOP整合了一些公共方法,如记录日志,公共校验,敏感词过滤等,提高了代码的复用性,增强了代码的可维护性;

3. 负责生产疑难问题优化
- 重构旧系统不规范代码及查询报表统计导出,通过执行计划,判断索引是否命中来优化SQL,提升了近3倍程序运行速度
- 重构旧系统不规范代码及查询报表统计导出,通过执行计划,判断索引是否命中来优化SQL,提升了近5倍程序运行速度
- 将导出excel主要步骤由后端迁移到前端,解决了导出报表数据量较大问题,导出速度提升10倍以上;


#### 项目二:贵州银行-电子验印系统

- 简介:电子验印系统,即通过该程序可以核对凭证上印章与银行预留印章是否匹配。贵州银行-新电子验印系统,基于验印系统原型进行改造,推翻原型所有代码进行重建。新电子验印系统采用前后端分离设计,将前端部分集成到客户端中;后端基于`Spring Boot`
等主流框架进行开发,前端基于Vue.js进行开发,采用分布式部署。
简介:电子验印系统,即通过该程序可以核对凭证上印章与银行预留印章是否匹配。贵州银行-新电子验印系统,基于验印系统原型进行改造,推翻原型所有代码进行重建。新电子验印系统采用前后端分离设计,将前端部分集成到客户端中;后端基于`Spring Boot`等主流框架进行开发,前端基于Vue.js进行开发,采用分布式部署。

- 技术栈:
`Springboot、Springcloud、Redis、Kafka、Mybatisplus、Vue、Hystrix`
技术栈:`Springboot、Springcloud、Redis、Kafka、Mybatisplus、Vue、Hystrix`

- 工作职责:
1. 负责前端功能开发
- 使用Vue、Element UI构建前端;

2. 负责核心功能模块设计与开发
- 独立开发电子验印管理系统,采用前后端分离架构;
- 为适应产品特性,加快迭代速度,后端采用Spring Cloud分布式架构,使用devops集中式配置管理,提高了接近1倍的开发效率;
- 采用Redis实现了高频信息缓存,加快了请求响应速度,降低了50%以上的数据库压力;
工作职责:
1. 负责核心功能模块设计与开发
- 独立开发电子验印后台管理系统,采用前后端分离架构,使用Vue、Element UI构建前端,为适应产品特性,加快迭代速度,后端采用Spring Cloud分布式架构,使用devops集中式配置管理,提高了接近1倍的开发效率;
- 使用Kafka异步解耦机制对接第三方接口功能开发(柜面接口服务等)、外系统对接(集中作业系统,影像平台系统,银企对账系统等)提高了程序的响应速度,保证了数据最终一致性;
- 使用Java多线程,开发定时同步文件传输平台程序,提高了50%同步文件速度;

3. 生产疑难问题排查与优化处理
- 负责沟通协调项目中遇到的程序问题与业务问题,及撰写单元测试报告、接口说明文档、系统使用手册等相关文档;
2. 负责生产疑难问题排查与优化处理
- 优化数据批量入库。通过开启allowMultiQueries=true&rewriteBatchedStatements=true参数配置,通过mybatis的foreach标签批量插入或更新数据,提升批量写库性能;
- kafka消息积压优化。通过扩kafka分区,从之前的4分区扩到8分区;日志保留时间从1个月到2天;调整文件刷盘策略:写入10000条消息或间隔2s,刷数据到磁盘;同步提交改为异步提交;
- 优化同步文件程序。利用Java多线程技术,将大文件拆分成小块,并通过多线程同时处理这些小块,充分利用多核处理器的并行性,同时传输多个文件,避免了传统单线程传输时的等待阻塞,从而最大程度地减少文件传输的总耗时;
- 优化查询高频信息速度。在系统启动时,通过预热将一些热门数据加载到内存中,减少冷启动时的性能影响;

4. 负责项目上线部署
3. 负责项目上线及部署
- 采用Nginx和devops进行前端部署和反向代理增强了软件系统的安全性;
- 为提升开发效率,接入Gitlab CI/CD进行持续集成和持续部署,实现了构建部署自动化;
- 独立使用linux命令进行测试环境、生产环境故障排查、程序部署、及数据迁移;
Expand Down
9 changes: 9 additions & 0 deletions docs/index.xml
Original file line number Diff line number Diff line change
Expand Up @@ -610,5 +610,14 @@
<description>安装elasticsearch 要注意导入依赖的版本和安装elasticsearch的版本与springboot的兼容问题 用 docker 安装 elasticsearch 本例用elasticsearch-6.5.3和springboot-2.1.0.RELEASE版本 下载镜像: docker</description>
</item>

<item>
<title>我的简历_优化</title>
<link>https://whiteppure.github.io/iblog/posts/resume/interview-resume-optimize/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>

<guid>https://whiteppure.github.io/iblog/posts/resume/interview-resume-optimize/</guid>
<description>自我介绍 1998 · 李济芝 河北唐山 15176733539 &amp;nbsp;[email protected] 本人有严谨的工作态度与高质量意识;能查阅各种开发技术手册,具有独立解决问题的能力。具备扎实的Java基础和四年开发经验,有良好的编程风格,独立熟练使用Spring全家桶等常用类库开发Java服务端程序、对Jav</description>
</item>

</channel>
</rss>
33 changes: 33 additions & 0 deletions docs/page/4/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -324,6 +324,39 @@ <h2><a href='/iblog/posts/spring/springboot-elasticsearch/'>SpringBoot整合elas
</div>
</div>

<div class="post animated fadeInDown">
<div class="post_title">
<h2><a href='/iblog/posts/resume/interview-resume-optimize/'>我的简历_优化</a></h2>
</div>

<div class="list">
<div class="post_content markdown">
<p>自我介绍 1998 · 李济芝 河北唐山 15176733539 &nbsp;[email protected] 本人有严谨的工作态度与高质量意识;能查阅各种开发技术手册,具有独立解决问题的能力。具备扎实的Java基础和四年开发经验,有良好的编程风格,独立熟练使用Spring全家桶等常用类库开发Java服务端程序、对Jav......</p>
</div>
</div>

<div class="post_footer">
<div class="meta">
<div class="info">
<span class="field">
<i class="ri-map-pin-time-line"></i>
<span class="date">0001.01.01</span>
</span>

<span class="field tags">
<i class="ri-stack-line"></i>

<a href="https://whiteppure.github.io/iblog/tags/java/">Java</a>

<a href="https://whiteppure.github.io/iblog/tags/%E6%B1%82%E8%81%8C/">求职</a>

</span>

</div>
</div>
</div>
</div>


<div class="pagination">

Expand Down
2 changes: 1 addition & 1 deletion docs/posts/essays/java-hashmap/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -643,7 +643,7 @@ <h2 id="post_single_title">HashMap详解</h2>
<li><code>capacity</code>: 容量,默认16;</li>
<li><code>loadFactor</code>: 负载因子,表示HashMap满的程度,默认值为0.75f,也就是说默认情况下,当HashMap中元素个数达到了容量的3/4的时候就会进行自动扩容;</li>
<li><code>threshold</code>: 阈值;<code>阈值 = 容量 * 负载因子</code>。默认12;</li>
<li>hash碰撞(hash冲突):两个不同的输入值,根据同一散列函数计算出的散列值相同的现象叫做碰撞。hash碰撞就是用同一hash散列函数计算出相同的散列值;当插入hashmap中元素的key出现重复时,这个时候就发生了hash碰撞;</li>
<li>hash碰撞(hash冲突):两个不同的输入值,根据同一散列函数计算出的散列值相同的现象叫做碰撞。hash碰撞就是用同一hash散列函数计算出相同的散列值;当插入hashmap中元素的key出现重复时,这个时候就发生了hash碰撞;</li>
</ul>
<h2 id="结构">结构</h2>
<p><img src="/iblog/posts/annex/images/essays/HashMap%E7%BB%93%E6%9E%84.png" alt="HashMap结构"></p>
Expand Down
12 changes: 12 additions & 0 deletions docs/posts/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -607,6 +607,18 @@ <h1>

</div>

<div class="listing_title">0001</div>
<div class="listing">

<div class="listing_item">
<div class="listing_post">
<a href="/iblog/posts/resume/interview-resume-optimize/">我的简历_优化</a>
<div class="post_time"><span class="date">01-01</span></div>
</div>
</div>

</div>

</div>
<div class="pagination"></div>
</div>
Expand Down
Loading

0 comments on commit 894baca

Please sign in to comment.