
经验总结
文章平均质量分 56
micro_hz
Engineer
展开
-
退出csdn声明
鉴于csdn社区环境恶化,本人不再csdn更新文章,我活跃在B站给大家提供更多技术分享,问题与文章的阅览请移步Google与StackOverflow等优质社区。原创 2022-04-12 14:36:51 · 3333 阅读 · 11 评论 -
红包雨高并发问题解决方案
问题很多APP为了引流营销创造除了各种玩法,其中红包雨就是常见的一种方式,主要效果就是预告在某个时间点,会发布多少金额的券等等,到点就能够聚集上百万用户来抢,大概效果就是疯狂的戳屏幕,然后偶现几个金额,最后结束后告诉一共抢到xx元。这里面有两个挑战。1. 如何扛住这种高并发流量2. 如何保证不超卖。主要思路业务真实意图很多技术方案挑战很大,可以从业务的角度去进行优化,换个思路可能技术挑战就不大了,例如抢购用户数是固定吗?一定要把所有金额分发出去么?如果是固定,那我们可以前置,不用在活动的时候原创 2021-04-02 15:38:10 · 3644 阅读 · 1 评论 -
教朋友写责任链
背景最近一个开发的朋友开始学习Java,她之前写脚本语言多一点,对于面向对象的一些设计还是不够熟练,她写一个代码特别的累,需要大量堆if-else语句,她的直觉告诉她这样写肯定不够好,然后咨询了我。场景介绍她的代码逻辑是要处理一个BinlogDTO的Message消息,然后做一些后续的逻辑,由于前面的设计是很多张表都会沿用这个BinlogDTO对象并且发送的一个Message的Topic,这个BinlogDTO的对象大概定义为:class BinlogDTO { private String原创 2021-03-22 17:08:29 · 429 阅读 · 6 评论 -
yml读取下划线丢失问题
问题在项目中时常需要读取配置文件,例如某个变量会随着环境的不同而不同,在springboot项目中会很容易想到yml的方式。但是最近遇到一个问题,发现下划线被注入的到bean中会丢失下划线,差点引起线上故障,demo如下:@Componentpublic class YmlConfTest { @Value("${id}") private String id;}yml配置文件如下:id : 1_2但是实际运行中发现id注入的是12,而不是预期的1_2,这就导致问题发生。原创 2021-01-23 09:57:30 · 4654 阅读 · 2 评论 -
dubbo与springMVC边界日志快速接入
在项目的测试阶段,系统的边界日志是十分重要的,但是又不想无限制的打印日志,可能仅仅希望在测试环境打开,所以很多时候便于调试,我们会不停的加日志,到了发布之前很容易删除冗余的日志导致线上的磁盘压力过大。图中绿色部分是我们很关注的日志,我们的微服务系统采用的是SpringMVC + dubbo两种方式进行RPC调用,针对这种场景提出两个目标优化点:快速集成日志记录,对业务代码无入侵可以灵活控制环境打印日志文件隔离SpringMVC接口拦截一般记录这种横切面的日志,首先想到的是AOP的方式,的确原创 2021-01-22 15:36:57 · 432 阅读 · 0 评论 -
字节跳动系统设计面试实时排行榜
题目现在有个游戏,有过亿的用户会来玩,玩游戏后会获得一个分数,当游戏结束的时候返回给用户自己所在的排名和排名前百分比,如何设计这样一个系统。思路功能其实并不算复杂,有很多种方式可以实现,所以这就要明确整个系统需要支持的用户量和容错与扩展等等,例如如果这个就几百的并发。方案1 mysql直接搞一个mysql的表即可解决。user_score (id, user_id, score, create_time),游戏结束就insert一条记录,然后select count出分数比自己高的,然后再coun原创 2020-12-09 15:57:05 · 4748 阅读 · 1 评论 -
短链接生成实现
背景最近偶然看到运营在群里进行页面分享的时候链接很长,导致发出来之后直接被刷屏,这样体验肯定不好,当然也不利于推广,因此比较好的方式是生成一个短链接服务,能够把链接变短,所以自己写个工具进行优化,也调研了下常见的短链接服务设计。方案对比方案1: 可以通过摘要MD5运算,得到一个固定长度的值,然后持久化到数据库。当然在生成的时候都需要判断是否重复,哈希碰撞的话,也就是如果重复就重新进行运算,直到生成并写入到数据库。优点:长度固定、直接调用库简单。缺点:数据量大的时候可能碰撞比较频繁,导致生成效率比较原创 2020-10-23 15:31:45 · 2973 阅读 · 0 评论 -
高并发MySQL行锁应用层排队解决方案
前言在互联网项目中的最大挑战之一就是对于高并发的性能问题的处理,在流量小的情况下都可以正常运行的系统再高并发的情况都会暴露出比较严重的问题,并不是说前期的方案不好,而是需要优化甚至更复杂和精细的设计去迭代,例如查询问题可以通过缓存,大写入和峰值可以通过消息中间件,数据库可以分库分表,并且绝大部分性能问题都可以通过横向机器扩展去解决。其中有部分业务需要同步高并发写入,并且由于前期设计需要高并发流量竞争DB行锁,当然可以通过改变存储模型去解决,但是动静太大改动成本太高,在可预期的范围内又不需要抵抗如此大的原创 2020-08-06 11:38:15 · 1421 阅读 · 1 评论 -
spring boot集成测试容器重启问题
背景spring boot test的项目中常用的测试框架, 最近在写集成测试的时候发现一个比较奇怪的问题,当我在运行多个测试用例的时候会偶尔重新启动整个容器上下文,由于后期业务逐渐复杂,大量的测试用例需要运行,这个问题直接导致回归测试的效率降低。举个例子:几个类:@RunWith(SpringRunner.class)@SpringBootTest(classes = TestApplication.class)public class BaseApiTest { @Test原创 2020-05-22 23:48:06 · 4795 阅读 · 1 评论 -
日常命令自动化思路
经常需要查询日志的朋友,肯定都对重复的一堆登陆交互命令习以为常,仔细想想其实这些是很影响效率的,作为程序员同一件事干三次以上就要自动化了,这些命令本质上不就是一堆linux命令的组合么,为什么不用shell命令把它给自动化了例如git命令,很多时候就是习惯三连,别误会不是点赞转发订阅????。就是git add , git commit, git push.这三个命令都敲烂了,每次提交就分支名和提交信...原创 2020-03-12 17:50:18 · 345 阅读 · 0 评论 -
excel解析成java实体
问题由于业务的迭代和各种数据订正等等场景。excel解析的场景越来越多,但是现成的工具类其实还是不够自动化,我们需要一个只关注解析对象的工具,其他的东西尽量做到封装。可以把excel表格看成RDB的表一样,一行就代表一条记录,对应代码一个entity。根据不同的需求我们只需要编写列与entity字段的映射关系即可,其他的兼容性与实现细节不关心。实现方式/** * 将表格的数据转...原创 2019-10-25 10:07:41 · 511 阅读 · 0 评论 -
Inteilj IDEA快捷键
之前一直使用Eclipse,一来是习惯了,二来也是觉得Eclipse社区力量更强大还免费。比较符合开源分享的精神。但是现在团队都使用IDEA。所以需要快速的熟悉起来,最大的问题就是快捷键的问题,IDEA 也是比较推荐用各种快捷键来操作,cmd + ,可以快速打开偏好设置,虽然可以用keymap设置自己熟悉的快捷键,但是强烈建议还是学会IDEA自己默认的快捷键,因为IDEA的相关的资料没Ecplise原创 2017-09-28 16:10:38 · 1167 阅读 · 0 评论 -
设计模式之模板方法
模板方法是一个十分常见的设计模式,它并不复杂但是它带来的好处就是定义流程框架,而不关注实现细节,前两天看到一句话又回味了一把之前很欣赏的面向对象设计思想,接口和抽象类的概念就是能够让外部依赖的东西尽量抽象,依赖抽象而不依赖细节,这样更容易开发出高内聚低耦合的系统。 模板方法具体如何实现这种流程编排,屏蔽细节的效果呢。 有几个角色模板类:它一般定义一套比较完整的流程,这些流程定义叫做模板方...原创 2018-05-11 11:28:26 · 317 阅读 · 0 评论 -
计算机硬件知识总结
计算机硬件对于软件工程师来说很多时候只是停留在一个概念上,例如CPU和内存,硬盘等等,这些都属于计算机组成原理里面必然会介绍到的,博主大学前期接触过大量的计算机硬件知识,曾几何时我甚至考虑过全身心投入到半导体行业,但是考虑到环境限制因素和个人职业的发展,折中选择了软件方向,但是最近阅读了一些机器学习相关的文章,也尝试过自己去训练模型,发现模型训练对硬件的要求比较特殊,这也让我有机会来从新总结一下硬...原创 2018-02-26 20:23:10 · 6341 阅读 · 6 评论 -
学习总结以及近期安排
最近因为新工作需要熟悉业务和开发工具花了不少时间,博客更新稍微有点滞后,希望各位粉丝继续支持,我会坚持更新,并且争取能够体现出文章的差异性和提供一些比较深入的理解文章。从去年到现在陆陆续续看了一些书,大概有这么基本是我仔细阅读的《spring技术内幕》《spring 企业级开发实战》《Gof设计模式》《深入理解Java虚拟机》《大型网站技术架构》,然后还大概阅读了《springboot原创 2017-10-14 11:58:55 · 595 阅读 · 1 评论 -
Linux批量kill进程
经常会遇到的情况是某个进程需要强制被杀掉,但是相关进程启动了很多子进程,就必须要把所有ps aux出来的进程kill掉,如果一个一个kill费时费力,之前就遇到一个线上mysql连接池满导致需要批量kill进程,止损非常重要,因此效率必须提升,这就必须要使用awk。 例如批量kill mysqlps aux | grep mysql |awk '{print $2}' | xargs kil原创 2018-01-22 10:11:09 · 540 阅读 · 0 评论 -
Hadoop安装pdsh localhost Connection refused
本地安装hadoop单机模式的时候需要启动namenode。我使用的是hadoop 3.0,配置文件如下: site-core.xmlconfiguration> property> name>fs.defaultFSname> value>hdfs://localhost:9000value> property>configuration>原创 2018-01-21 15:12:52 · 2530 阅读 · 0 评论 -
分布式系统的常见问题
不好意思最近实在是有点太忙了,将近一个月没更新博客,其实前几天我是有发表一篇关于HSF框架的源码解析,后来由于一些原因不得不删除。其实HSF也跟Dubbo类似,解决了分布式系统中的一系列问题。分布式带来的优势就是能够将复杂业务拆分成多个服务的组合,就如同controller-service-dao中的service接口部署在不同的机器上,service不就是服务的抽象么。让不同的团队维护不同的ser原创 2017-11-26 19:42:12 · 5738 阅读 · 3 评论 -
设计模式之状态模式
此文介绍我理解的状态设计模式,这是行为模式的一种,在很多需求的场景,一个对象的行为依赖对象的状态,这种场景很多,而且这种状态是可能持续迭代的,这种需求我们一般会给对象一个状态标志然后if-else判断去实现业务逻辑,这样每次来个新的状态都要增加 if-else,这样非常不好维护,需要去修改原来的类,不满足开闭原则。我举个例子,一个人的状态有很多种,穷或则富,或则中产,或则小康。不同的状态做同样的事...原创 2018-06-17 20:24:29 · 262 阅读 · 0 评论 -
大促稳定性建设
最近做了一些技改,由于本次618大促我作为稳定性负责人,梳理了大量系统稳定性相关的功能,平时疲于业务的迭代很多系统性的问题在大促前才梳理出来,本问也沉淀一下关于稳定性这块自己的心得。 订单量的增加可能导致一些并发的问题,这块需要做好并发的控制,单机可以使用JUC提供的锁控制,现在集群一般采取redis等高可用的分布式缓存去做分布式锁,但是一般采取DB做分布式锁可靠性更高。 DB的优化也是重...原创 2018-07-06 13:30:56 · 1431 阅读 · 0 评论 -
记一次线上开关推送问题
线上问题复盘背景:现在开仓是需要打开一系列开关,其中仓这边一共有开关如下,有独立的群产品统一通知相关人员进行开关配置.xxxxx仓,仓code :1.开启联运收货2.配置发货dts-是否针对加工品3.越库回传dts4.采购开启多配多发开关5.打开配货单接收开关6.打开波次完整性校验开关 7.取消、延期接口开关 8.打开内部仓开关9.库存占用开关作...原创 2019-02-22 10:23:58 · 290 阅读 · 0 评论 -
一次物理表迁移实战
引言本是集团新零售战略重要一环,也是线上线上奔跑最快的业务部分之一,的仓储也是业界领先的系统,创造了很多新的零售玩法,例如加工仓,暂养仓与冷链仓都进行了新的探索。在业务不断扩张的同时,仓储系统也面临诸多考验,例如各种大促,到2018年上半年可以说是举步维艰,很多历史包袱让业务稳定性堪忧,业务需求的挑战让整个团队举步维艰。仓储团队痛定思痛开始了慢慢的架构升级的道路。关于仓储出库作业与出库单服务化...原创 2019-04-01 14:50:42 · 428 阅读 · 1 评论 -
一次线上GC问题排查
发现问题早上还没到公司就收到短信告警,提示订单接收接口频繁报错. 立即介入看告警信息,一般都会拿到报错的基本信息,例如堆栈或则关键日志等等查看错误日志量。这里初步从八点开始发现错误在变多,然后查看峰值最高的时间段的异常日志。发现一个很关键的信息lock wait.这初步说明是DB的锁超时导致的接单报错。这个时候查看整个集群的信息,很多机器已经出现飙红的情况。CPU的负载非常高,...原创 2019-04-13 17:04:55 · 1009 阅读 · 0 评论 -
集成测试Spring注入sqlmap
**最近做的东西在增加单元测试的灵活性,很多时候我改了sqlmap需要写单测,但是要启动整个容器实在是太重了。所以我需要写sqlmap的一个局部集成测试. **启动datasource和sqlmap应该为一种基础能力,所以定义一个基类@Slf4j@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations...原创 2019-08-08 11:47:21 · 811 阅读 · 0 评论 -
优雅的写测试用例
测试是一个很大的话题,每个研发团队都在强调测试的重要性,在不同的阶段测试的价值也是不一样的,每个研发团队都或多或少有自己的测试“文化”。在很多时候忽视了对测试环节的重视,导致的稳定性差而增加更多的工作量是得不偿失的,应该系统性的认识测试的价值,并好好规划。我也是参考了很多文章,自己总结了一些现在的情况基本概念单元测试:本地测试,非IO和RPC调用,可以本地单独测试,比较复杂的业务逻...原创 2019-09-09 21:24:16 · 1364 阅读 · 6 评论 -
使用缓存降低数据库查询频率
在写业务的时候遇到关联另一个实体类然后需要获取该实体类的相关属性的情况。如果在遍历外层对象的时候要去查询该对象,也就是循环嵌套查询,这样在面对该对象该字段可修改的可能性很小并该查询比较频繁的情况下考虑依靠缓存去降低数据库的负担。 例如我在循环处理广告位:// AdLocation类有一个mediaId属性,对应media表的IDfor (AdLocation adLocation : adLoc原创 2016-04-11 16:20:54 · 1071 阅读 · 0 评论 -
高级Java工程师要求
最近在面试高级Java工程师,想谈谈我心中高级Java工程师的样子:简历部分: 不知道为什么拿到的绝大部分的工程师的简历是没有照片的,我不知道为什么,难道认为公司主要看能力而照片会分散注意力么,那为什么还要写性别,民族,籍贯什么的,这些都工作价值很大么,那就只能说明不够,所以说一张整洁大方的照片是加分项,至少在我面前是这样的,邮箱不要用QQ邮箱,不要问为什么。不同阶段简历肯定不同,应届生的简历应原创 2017-09-15 15:27:37 · 5404 阅读 · 3 评论 -
spring boot的ActiveMQ使用
消息队列能够有效的降低系统请求峰值,也能够达到解耦的效果。spring boot对MQ也有比较好的支持。本文演示spring activeMQ的使用,首先在linux安装ActiveMQ:wget https://archive.apache.org/dist/activemq/5.13.0/apache-activemq-5.13.0-bin.tar.gz然后解压找到 bin下面的脚本启动消息中间原创 2017-08-03 19:10:29 · 766 阅读 · 0 评论 -
spring-data-jpa实体继承
spring-jpa中我们要将SQL映射到对象,尤其是在spring boot这种高度自动化的环境下使用,大量的最优目录结构与命名规则可以大大降低配置,约定大于配置贯穿其中。例如我们定义查询dao,继承JpaRepository即可。然后返回的对象,我们可以定义model:@Entity @Table(“user_tab_name”) class User extends BaseUser {原创 2017-07-08 14:54:56 · 5988 阅读 · 0 评论 -
阶段学习规划
关键字:JVM,并发,分布式,tcp/ip。 Java常见的数据结构算法的实现原理。(参考jdk源码) Java并发包下面的类(java.concurrent包下面的) NIO(模型)与IO,其中NIO是重中之重。 Jvm内容,GC回收,类加载机制,内存模型。 加分项目:计算机系统原理。 网络通信协议(TCP/IP,HTTP等)。 数据结构与算法。 著名开源项目的源码。 你自己有很棒的原创 2016-11-02 23:16:53 · 474 阅读 · 0 评论 -
ubuntu下安装git
git为最先进的版本控制工具,在linux-ubuntu下安装git,打开终端: 1.首先查看是否已经安装了gitThe program ‘git’ is currently not installed. You can install it by typing: sudo apt install gitmicro@micro-H81M-S1:/$ gitThe program 'git' i原创 2016-10-10 09:43:28 · 530 阅读 · 0 评论 -
八月项目与读书笔记
最近由于各方面的原因没有及时的更新博客,似乎又到了一个思绪比较复杂的时期,我其实有很多内容想分享出来,虽然我知道我的博客的markdown功能也没好好使用,而且最开始就打算博客主要是记录自己心得的东西没期待着多少人看所以“坏习惯”也就养成了。 最近在学习Java高级特性、多线程高并发、设计模式、spring与jdk源代码。之前有阵子由于盲目的崇拜所谓的大规模分布式集群等等高大上的东西让自己比较迷茫原创 2016-08-23 11:19:02 · 463 阅读 · 0 评论 -
nodeJs缺少模块问题解决方案
npm是nodeJs的模块管理工具,类似于Java里的maven管理jar的功能,最近在某个模块引用代码被更新之后node server就一直启动失败显示找不到模块,在node项目的目录下也使用了npm install工具安装了模块,但依然不能解决问题,后来想起在maven里也会出现这种情况,是采用把缺少class的maven仓库依赖对用的文件夹删除掉再重新更新maven依赖即可更新好最新的jar文原创 2016-08-10 10:12:40 · 6705 阅读 · 3 评论 -
Java反应类型获取并转换集合
我们通常存放在数据库记录的String类型很多时候是存放的是一个数组集合,或许用逗号或者是分号把它们分开。例如1,2,3,4,5的方式。我们在获取这个String类型的时候需要把它转换成Java集合。我在编写工具类的时候需要一个方法去解析这个String类型。 但是很多时候我可能需要转换的是个不确定的集合,可能转化为String类型的集合,也可能是Integer类型的集合,传统的方法分别去写两个方原创 2016-06-23 15:08:13 · 537 阅读 · 0 评论 -
MySQL输出脚本文件到指定文件夹
我们产品执行需要一个定时的报表数据,因此我们需要编写一个数据库脚本给DBA,每个月初去执行然后导出相关的数据提交给相关方。这里主要练习了输出文件和时间函数:SELECT ci.instance_id AS creative_instance_id, ci.instance_name AS creative_instance_name, at.task_id AS task_id, a原创 2016-06-21 12:04:34 · 682 阅读 · 0 评论 -
Dubbo+Zookeeper+maven+git环境搭建笔记
dubbo是Alibaba SOA开源框架,主要应用在大规模高并发的领域。有远程调用,动态调整负载,及时发现等核心功能。这次主要搭建基于zookeeper注册的集群。 首先熟悉dubbo: 初探dubbo请点击这里 主要分为provider和consumer两个部分,provider提供服务,zookeeper作为一个注册中心去管理服务,可以动态的分配负载,有一定的容错和安全性,提供给cons原创 2015-10-10 14:49:58 · 1391 阅读 · 0 评论 -
插入数据库中文乱码问题
最近在做个web项目的时候发现一个关于乱码的问题总结一下,最开始在页面插入一条记录总是显示为??。我检查了spring过滤器并强制初始化开启,配置如下:<!-- 过滤器utf-8 --> <filter> <filter-name>encodingFilter</filter-name> <filter-class> org原创 2016-04-27 10:02:22 · 2144 阅读 · 0 评论 -
利用日志与secureCRT检查漏洞
今天测试给我反馈一个昨天我修改的漏洞,但是测试反馈给我说是并没有解决。在开发中分为开发环境与测试环境。开发环境前后端联调结束然后各自发布包到测试环境,然后测试人员开始测试。我们前端采用的nodejs + thrift ,后端使用java去实现接口。最开始我又测试了本地开发环境,没有问题。前后端正常。但是测试环境到底是为什么会依然没有修改,跟前端沟通完确认了都是修改后的包。这个时候要去查看日志。日志就原创 2016-04-12 20:06:00 · 1095 阅读 · 0 评论 -
tomcat中引用js静态文件找不到问题
最近打算做一个web系统,前端页面套用了bootstrap,我用的服务器是java服务器tomcat,但是页面如果是htm格式一直无法访问,在确认请求路径无误的情况下发现htm文件是无法访问的,替换了jsp格式的文件即可以访问,这就说明了htm文件不能访问。 修改了成jsp格式之后可以访问,但是页面引用的js和css静态文件是引入失败的,如图。 这里我查找了相关的原因,在We原创 2016-04-22 12:26:50 · 12280 阅读 · 4 评论 -
maven项目迁移问题总结
今天完成了maven web项目,maven的好处就是自动管理jar包,不用像传统的webapp项目一样需要手动的把jar包添加到WEB-INF/lib下面,需求是移动到另一台电脑上演示,这个时候我要从头开始配置环境: 首先我们需要的工具有:JDK8mysqltomcatmavenecplise我们解压好了maven还要在ecplise中maven选择maven的路径安装到maven插原创 2016-04-29 19:50:01 · 3431 阅读 · 0 评论