架构师技术栈
其他
最近,我在Spring的BeanUtils踩了不少坑~
大家好,我是磊哥。分享一个,我用Spring的BeanUtils踩坑过程,项目中在和第三方进行联调一个接口,我们这边发送http请求给对方,然后接收对方的回应,代码都是老代码。根据注释,对方的SDK中写好的Request类有一个无法序列化的bug,所以这边重新写了一个Request类,基本属性都是相同的,但是重点是有一个属性是静态内部类,还有两个是list属性,类似于下面这样:private
2021年4月25日
其他
Java 8 中 Map 骚操作之 merge() 的用法
怎么用?假设我们有这么一段业务逻辑,我有一个学生成绩对象的列表,对象包含学生姓名、科目、科目分数三个属性,要求求得每个学生的总成绩。加入列表如下:注
2021年4月24日
其他
还在写大量 if 来判断?试试用一个规则执行器来替代它
(nationalityRuleDto.getNationality().startsWith(MATCH_NATIONALITY_START))
2021年4月23日
其他
事务注解 @Transactional 失效的3种场景及解决办法
Test(10,20,30))操作将会保存到数据库不会进行回滚。第三种事务方法内部捕捉了异常,没有抛出新的异常,导致事务操作不会进行回滚。示例代码如下。@Componentpublic
2021年4月22日
其他
TikTok二面:“聊聊二维码扫码登录的原理”
大家好,我是磊哥。前几天看了极客时间一个二维码的视频,写的不错,这里总结下在日常生活中,二维码出现在很多场景,比如超市支付、系统登录、应用下载等等。了解二维码的原理,可以为技术人员在技术选型时提供新的思路。对于非技术人员呢,除了解惑,还可以引导他更好地辨别生活中遇到的各种二维码,防止上当受骗。二维码,大家再熟悉不过了购物扫个码,吃饭扫个码,坐公交也扫个码注
2021年4月21日
其他
还在用 Guava Cache?它才是 Java 本地缓存之王!
Filter,对于每个key,用n个byte每个存储一个标志用来判断key是否在集合中。原理就是使用k个hash函数来将key散列成一个整数。在W-TinyLFU中使用Count-Min
2021年4月19日
其他
高清PDF:172份,7701页,互联网大厂面试题
7701页!整理的面试题,内容列表第3版:面试题,部分预览第3版:互联网大厂面试题,怎么领取?添加,磊哥个人信,备注:面试题
2021年4月18日
其他
Spring 的 Controller 是单例还是多例?怎么保证并发的安全
大家好,我是磊哥。我们经常说单例还是多例,那么究竟他们不同的根源在哪?或者说我们应该从哪一方面具体的去理解了,至于这个问题,今天来分享一波答案:controller默认是单例的,不要使用非静态的成员变量,否则会发生数据逻辑混乱。正因为单例所以不是线程安全的。我们下面来简单的验证下:package
2021年4月17日
其他
为什么 MySQL 默认值为 null,它不推荐?
oracle).MySQL中支持在含有NULL值的列上使用索引,但是Oracle不支持.这就是我们平时所说的如果列上含有NULL那么将会使索引失效。严格来说,这句话对与MySQL来说是不准确的。
2021年4月15日
其他
为什么大家都说SELECT * 效率低
没了”陈小哈:“....??(几个意思)”面试官:“嗯...好,那你还有什么要问我的么?”陈小哈:“我问你个锤子,把老子简历还我!”无论在工作还是面试中,关于SQL中不要用“SELECT
2021年4月14日
其他
如何访问Redis中的海量数据?避免事故产生
大家好,我是磊哥。今天,磊哥,跟大家分享一下,如何访问Redis中的海量数据?避免事故产生有时候我们需要知道线上的redis的使用情况,尤其需要知道一些前缀的key值,让我们怎么去查看呢?今天老顾分享一个小知识点事故产生因为我们的用户token缓存是采用了【user_token:userid】格式的key,保存用户的token的值。我们运维为了帮助开发小伙伴们查一下线上现在有多少登录用户。直接用了keys
2021年4月13日
其他
跟狗屎一样的代码,到底该如何重构?
大家好,我是磊哥。磊哥,跟大家分享一下,跟狗屎一样的代码,到底该如何重构?其实,代码都是不断改出来的,没有谁一开始就能写出漂亮的代码,因为需求都是不断变更的。在不断变更代码的时候,对代码进行思考,调整结构。一、重构原则1、何谓重构对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。另一种解释是:使用一系列重构手法,在不改变软件可观察行为的前提下,调整其结构。重构不止是代码整理,它提供了一种高效且受控的代码整理技术2、为何重构改进软件设计:如果没有重构,程序的设计会逐渐变质,重构很像是在整理代码,你所做的就是让所有的东西回到应处的位置上。帮助找到bug:对代码进行重构,可以深入理解代码的作为,在搞清楚程序结构的同时,想不把bug揪出来都难。提高编程速度:良好的设计是快速开发的根本,改善设计、提高可读性,减少错误,这些都是提高质量。3、何时重构任何情况下我都反对专门拨出时间进行重构。重构本来就不是一件应该特别拨出时间做的事情,重构应该随时随地的进行。三次法则第一次做某件事情是只管去做;第二次做类似的事情会产生反感;第三次再做类似的事,你就应该重构最常见的重构时机是想给软件添加新特性的时候;重构的另个一原动力是:代码的设计无法帮助我轻松的添加所需要的特性修改错误的时候review代码的时重构间接层和重构计算机科学是这样一门科学:它相信所有的问题都可以通过增加一个间接层来解决。大多数重构都为程序引入了更多的间接层,重构往往把大型的对象拆成多个小型的对象,把大型的函数拆成多个小型的函数。但是,间接层是一把双刃剑。每次把一个东西分成两份,你就需要多管理一个东西。如果某个对象委托另一个对象,后者又委托另一个对象,程序会愈加难以阅读。何时不该重构:有时候既有代码实在太混乱,重构它还不如重新写一个来得简单。重写而非重构的一个清楚讯号是:现有代码根本不能正常运作。二、代码的坏味道1、重复代码如果你在一个以上的地点看到相同的程序结构,那么可以肯定:设法将它们合二为一,程序会变得更好
2021年4月11日
其他
19 个接私活平台,你有技术,就有钱!
成立于2014年11月,是一家创新型的互联网公司,致力于通过创新的开发方式,为软件技术开发行业带来改变,提供更快速、更高性价比的软件定制服务。“快码”的意思是“快速编写代码”。公司采用“专属项目经理
2021年4月10日
其他
除了负载均衡,Nginx还可以做很多,限流、缓存、黑白名单等
大家好,我是磊哥。可以说,Nginx应该是现在最火的web和反向代理服务器,没有之一。她是一款诞生于俄罗斯的高性能web服务器,尤其在高并发情况下,相较Apache,有优异的表现。那除了负载均衡,她还有什么其他的用途呢,下面我们来看下。一、静态代理Nginx擅长处理静态文件,是非常好的图片、文件服务器。把所有的静态资源的放到nginx上,可以使应用动静分离,性能更好。二、负载均衡Nginx通过反向代理可以实现服务的负载均衡,避免了服务器单节点故障,把请求按照一定的策略转发到不同的服务器上,达到负载的效果。常用的负载均衡策略有1、轮询将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。2、加权轮询不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同。给配置高、负载低的机器配置更高的权重,让其处理更多的请;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,并将请求顺序且按照权重分配到后端。3、ip_hash(源地址哈希法)根据获取客户端的IP地址,通过哈希函数计算得到一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是客户端要访问服务器的序号。采用源地址哈希法进行负载均衡,同一IP地址的客户端,当后端服务器列表不变时,它每次都会映射到同一台后端服务器进行访问。4、随机通过系统的随机算法,根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。5、least_conn(最小连接数法)由于后端服务器的配置不尽相同,对于请求的处理有快有慢,最小连接数法根据后端服务器当前的连接情况,动态地选取其中当前积压连接数最少的一台服务器来处理当前的请求,尽可能地提高后端服务的利用效率,将负责合理地分流到每一台服务器。三、限流Nginx的限流模块,是基于漏桶算法实现的,在高并发的场景下非常实用。1、配置参数limit_req_zone定义在http块中,$binary_remote_addr
2021年4月9日
其他
还在用Logback?Log4j2的异步性能已经无敌了,还不快试试
……基本用法终于介绍完了Log4j2的强大,现在来介绍下Log4j2的基本使用。引用log4j2的maven依赖log4j-api在log4j-core中已经有依赖了,直接依赖core即可
2021年4月8日
其他
面试官:Maven 的这 7 个问题你思考过没有?
在实际中我们可以在IDEA中直接利用插件帮助我们生成想法3:既然是最近依赖策略,那么我们就直接使用显式依赖指定版本,那不就是最靠近项目的么?使用
2021年4月6日
其他
开源一个SpringBoot + Mybatis + Vue的代码生成器
大家好,我是磊哥。对很多人来说,未知、不确定、不在掌控的东西,会有潜意识的逃避。这里,推荐一款代码生成工具,可自定义模板生成不同的代码,支持MySQL、Oracle、SQL
2021年4月5日
其他
吊炸天的 Docker 图形化工具:Portainer,必须推荐给你
,点击连接现在就可以使用了,点击Local进入仪表盘主页面。91_10.png容器页面来源:my.oschina.net/u/200350/blog/3125682近期技术热文1、IDEA
2021年4月4日
其他
IDEA 这样配置注释模板,让你高出一个逼格
配置注释模板,的各种小技巧,IDEA中设置注释模板主要分为两个部分,分别是创建Java文件时类的注释和方法的注释。这里为大家详细介绍一下方法首先,打开
2021年4月3日
其他
Java 里的 for (;;) 与 while (true),哪个更快?
(;;)哪个“效率更高”这种规范没有规定的问题,答案都是“看实现”,毕竟实现只要保证语义符合规范就行了,而效率并不在规范管得着的范畴内。首先看javac对下面俩语句的编译结果以Oracle/Sun
2021年4月2日
其他
自从上了 Prometheus 监控,睡觉真香!
Vector、Scalar、String)、Operator、Function马云说:“虽然阿里巴巴是全球最大的零售平台,但阿里不是零售公司,是一家数据公司”。Prometheus
2021年4月1日
其他
MySQL分页场景(limit,offset)为什么会慢?
单机大概2,3秒。我就问我导师为什么,他反问“索引场景,mysql中获得第n大的数,时间复杂度是多少?”答案的追寻确认场景假设status上面有索引。select
2021年3月31日
其他
爽!!一个注解,搞定 SpringBoot 操作日志
StringBuilder!Java8的StringJoiner,真香!3、查询提升200倍,ClickHouse你值得拥有!4、百度开源:分布式配置中心,名叫BRCC第3版:互联网大厂面试题包括
2021年3月30日
其他
查询提升200倍,ClickHouse你值得拥有!
大家好,我是磊哥。今天磊哥,给大家分享一个,近年来备受关注的开源列式数据库,主要用于数据分析领域。目前国内社区火热,各个大厂纷纷跟进大规模使用:一、ClickHouse
2021年3月27日
其他
百度开源:分布式配置中心,名叫BRCC
大家好,我是磊哥。今天磊哥,给大家分享一个,百度开源的,BRCC分布式配置中心,用于统一管理应用服务的配置信息,避免各类资源散落在各个项目中,简化资源配置的维护成本。作为一种轻量级的解决方案,部署简单,同时支持多环境、多版本、多角色的资源管理,可以在不改变应用源码的情况下无缝切换和实时生效配置信息。地址:https://github.com/baidu/brccBRCC由三部分组成:管理端、服务端、SDK,其中:管理端
2021年3月25日
其他
徒手撸了一个API网关,理解更透彻了,代码已上传github,自取~
大家好,我是磊哥。磊哥,今天,来分享一篇,从零开始写一个,高性能的网关的文章。一、背景最近在github上看了soul网关的设计,突然就来了兴趣准备自己从零开始写一个高性能的网关。经过两周时间的开发,我的网关ship-gate核心功能基本都已完成,最大的缺陷就是前端功底太差没有管理后台😤。二、设计2.1
2021年3月24日
其他
使用雪花id或uuid作为MySQL主键,被老板怼了一顿!
TABLE来重建表并优化页的填充,这将又需要一定的时间消耗。结论:使用innodb应该尽可能的按主键的自增顺序插入,并且尽可能使用单调的增加的聚簇键的值来插入新行2.3
2021年3月23日
其他
字节二面,让写一个LFU缓存策略算法,懵了
移除最小的元素**淘汰最小的元素这里调用了Collections.min方法,然后通过比较key的compare方法,找到计数最小和时间最长的元素,直接从缓存中移除~/**
2021年3月22日
其他
蚂蚁开源增强版 SpringBoot,都有高级特性?
冲突,有效降低企业级多模块开发时团队间的沟通成本。项目地址开源地址:https://gitee.com/sofastack/sofa-boot近期技术热文1、JDK
2021年3月19日
其他
JDK 16 新特性,正式发布!程序员:追不上了...
增强提案(JEP);而现在,我们改为更易于管理、更容易预测的六个月周期,在较小的特性版本中提供增强特性。这些更改的范围从重大特性到小型改进和例行维护、错误修复和文档改进。每个更改都在
2021年3月18日
其他
感受 lambda 之美!高级特效,真的很有用!
转换成块常用的流操作是将其分解成两个集合,Collectors.partitioningBy帮我们实现了,接收一个Predicate函数式接口。将示例学生分为会唱歌与不会唱歌的两个集合。public
2021年3月17日
其他
RabbitMQ 延迟队列,太实用了!
https://github.com/rabbitmq/rabbitmq-delayed-message-exchange首先我们创建交换机和消息队列,application.properties
2021年3月16日
其他
实战 2000w 数据大表的优化过程,提供三种解决方案
*,将需要查找的字段列出来使用连接(join)来代替子查询拆分大的delete或insert语句可通过开启慢查询日志来找出较慢的SQL不做列运算:SELECT
2021年3月15日
其他
放弃 Notepad++,事实证明,还有 5 款更牛逼……
的特色功能:良好的扩展功能,官方称之为安装包(Package)。右边没有滚动条,取而代之的是代码缩略图,这个功能非常赞强大的快捷命令“可以实时搜索到相应的命令、选项、snippet
2021年3月14日
其他
“团队禁止使用Lombok”,被我狠狠的反驳了!
大家好,我是磊哥。今天,磊哥,跟大家聊一聊,经常在其它各个地方在说公司禁止使用Lombok,我一直不明白为什么不让用,今天看到一篇文章列举了一下“缺点”,这里我只想狠狠地反驳,看到列举的理由我竟无言以对。JDK
2021年3月13日
其他
精选 21道 Redis 最常问面试题!
命令覆盖原来的数据,也就是说,修改key对应的value和使用另外相同的key和value来覆盖以后,当前数据的生存时间不同。整编:微信公众号,搜云库技术团队,ID:souyunku比如说,对一个
2021年3月12日
其他
面试官:String长度有限制吗?是多少?
大家好,我是磊哥。今天,磊哥,跟大家分享一下,之前遇到的一个面试题,String长度有限制吗?是多少?真的有长度限制吗?磊哥我告诉你,真有长度限制,并且在在JVM编译中还有规范。磊哥就遇到过面试的时候问这个的,而且在之前开发的中也真实地遇到过这个String长度限制的场景(将某固定文件转码成Base64的形式用字符串存储,在运行时需要的时候在转回来,当时文件比较大),那这个规范限制到底是怎么样的,咱们话不多说先䁖䁖去。String首先要知道String的长度限制我们就需要知道String是怎么存储字符串的,String其实是使用的一个char类型的数组来存储字符串中的字符的。存储String的容器原来是它那么String既然是数组存储那数组会有长度的限制吗?是的有限制,但是是在有先提条件下的,我们看看String中返回length的方法。String类中的length方法由此我们看到返回值类型是int类型,Java中定义数组是可以给数组指定长度的,当然不指定的话默认会根据数组元素来指定:int[]
2021年3月11日
其他
第3次重读 Effective Java,这 50 个技巧最值!
}}2、多个构造函数时,考虑使用构造器尤其在进行Android开发时,会碰到这种情况。通常是一个对象,具有多个成员变量可能需要初始化,常规方法,需要提供大量构造函数。例如://
2021年3月10日
其他
阿里开源:轻量级,单元测试 Mock 工具!
大家好,我是磊哥。今天,磊哥,给大家推荐一款,阿里巴巴开源,Java单元测试增强工具,换种思路写Mock,让单元测试更简单。无需初始化,不挑测试框架,甭管要换的方法是被测类的私有方法、静态方法还是其他任何类的成员方法,也甭管要换的对象是怎么创建的。写好Mock方法,加个@MockMethod注解,一切统统搞定。TestableMock
2021年3月9日
其他
面试官问:Kafka 会不会丢消息?怎么处理的?
将消息入库,时间可能会超过1000ms上面的示例是自动提交的例子。如果此时,insertIntoDB(record)发生异常,消息将会出现丢失。接下来是手动提交的例子:Properties
2021年3月8日
其他
为什么不建议你用去 “! = null” 做判空?
pattern(空对象模式)改造后类定义如下,这样定义findAction方法后,确保无论用户输入什么,都不会返回null对象
2021年3月7日
其他
真狠,为了干掉 HTTP ,Spring团队又开源nohttp了!
三种批量插入方式的比较,我推荐第3个3、面试官问:前后端分离项目,有什么优缺点?4、发现一个,轻量级,分布式日志,标记追踪神器第2版:互联网大厂面试题包括
2021年3月6日
其他
哦,这就是Java的优雅停机?(实现及原理)
优雅停机?这个名词我是服的,如果抛开专业不谈,多好的名词啊!其实优雅停机,就是在要关闭服务之前,不是立马全部关停,而是做好一些善后操作,比如:关闭线程、释放连接资源等。再比如,就是不会让调用方的请求处理了一增,一下就中断了。而处理完本次后,再停止服务。Java语言中,我们可以通过Runtime.getRuntime().addShutdownHook()方法来注册钩子,以保证程序平滑退出。(其他语言也类似)十大城市,程序员工作内推群高清
2021年3月5日
其他
MyBatis 三种批量插入方式的比较,我推荐第3个!
#{item.isPackage},#{item.factoryId},#{item.projectName},#{item.spec},#{item.length},#{item.weight},
2021年3月4日
其他
面试官问:前后端分离项目,有什么优缺点?
一、前戏前后端分离已成为互联网项目开发的业界标准使用方式,通过nginx+tomcat的方式(也可以中间加一个nodejs)有效的进行解耦,并且前后端分离会为以后的大型分布式架构、弹性计算架构、微服务架构、多端化服务(多种客户端,例如:浏览器,车载终端,安卓,IOS等等)打下坚实的基础。这个步骤是系统架构从猿进化成人的必经之路。核心思想是前端html页面通过ajax调用后端的restuful
2021年3月3日
其他
发现一个,轻量级,分布式日志,标记追踪神器!
TLog能解决什么痛点随着微服务盛行,很多公司都把系统按照业务边界拆成了很多微服务,在排错查日志的时候。因为业务链路贯穿着很多微服务节点,导致定位某个请求的日志以及上下游业务的日志会变得有些困难。这时候很多童鞋会开始考虑上SkyWalking,Pinpoint等分布式追踪系统来解决,基于OpenTracing规范,而且通常都是无侵入性的,并且有相对友好的管理界面来进行链路Span的查询。但是搭建分布式追踪系统,熟悉以及推广到全公司的系统需要一定的时间周期,而且当中涉及到链路span节点的存储成本问题,全量采集还是部分采集?如果全量采集,就以SkyWalking的存储来举例,ES集群搭建至少需要5个节点。这就需要增加服务器成本。况且如果微服务节点多的话,一天下来产生几十G上百G的数据其实非常正常。如果想保存时间长点的话,也需要增加服务器磁盘的成本。当然分布式追踪系统是一个最终的解决方案,如果您的公司已经上了分布式追踪系统,那TLog并不适用。TLog提供了一种最简单的方式来解决日志追踪问题,它不收集日志,也不需要另外的存储空间,它只是自动的对你的日志进行打标签,自动生成TraceId贯穿你微服务的一整条链路。并且提供上下游节点信息。适合中小型企业以及想快速解决日志追踪问题的公司项目使用。为此我为了TLog适配了三大日志框架,支持自动检测适配。支持dubbo,dubbox,spring
2021年3月2日
其他
还在用JDK6的同学,来看看JDK13新特性详解吧
SocketImpl实现java.net.SocketImpl此版本已删除对为JavaSE1.3及更早版本编译的自定义实现的支持。此更改对SocketImpl为Java
2021年3月1日