TypeScript 高级技巧
用了一段时间的 typescript 之后,深感中大型项目中 typescript 的必要性,它能够提前在编译期避免许多 bug,如很恶心的拼写问题。而越来越多的 package 也开始使用 ts,学习 ts 已是势在必行。 以下是我在工作中总结到的比较实用的 typescri…
MySQL痿了,放不下这么多数据!
精彩文章。 Linux五件套之类的。 更多请关注。当然也可以关注公众号。 MySQL在达到一定数据量(我的经验是3T、单表1亿)时,复杂查询会有明显的延迟。继续分库分表,会严重增加业务复杂性,尤其对很多非互联网产品来说,急需一个分布式存储。 MySQL本身也做了一些努力,那就是…
一些 实用的 git 小技巧
前些月,写了一个关于 git 的表格,叫Git Cheat Sheet,现分享一些有用的小技巧,更多内容请移步,另有一个非常不错的关于 git 小技巧的项目 git-tips。 团队合作时,经常会出现这样的问题。这时候可以使用 git blame 来定位代码的最后…
2年java,蚂蚁一面,卒
更多精彩文章。 Linux五件套之类的。 更多请关注。当然也可以关注公众号。 其实我一个都没答上来。并不是因为我笨,是因为我不会。在大扰的帮助下,现在我会了,求求你再给我一个机会。 1、TreeSet背后的结构是TreeMap,也就是红黑树,能够实现自动排序。它通过equals…
SpringCloud服务的平滑上下线
以前都是手撸RPC,最近接触SpringCloud,深感痛心。主要有以下几点: 建议准备上微服务的同学,固定下一个版本,不要随意更新或降级。拿tomcat的basedir来说,1.5.8到1.5.13到1.5.16版本是换来换去,不小心点会出事故的。 如上,basedir先是从…
"Sed" 高级功能:我这小脑瓜都快绕晕了
sed命令有两个空间,一个叫pattern space,一个叫hold space。这两个空间能够证明人类的脑瓜容量是非常小的,需要经过大量的训练和烧脑的理解,才能适应一些非常简单的操作。 不信看下面简单的命令,作用是,删除文件中最后两行。 在《Linux生产环境上,最常用的一…
我就是不看好jpa
更多精彩文章。 知乎看到问题《SpringBoot开发使用Mybatis还是Spring Data JPA??》,顺手一答,讨论激烈。我实在搞不懂spring data jpa为啥选了hibernate作为它的实现,是“Gavin King”的裙带关系么? DAO层搞来搞去,从…
开源一个kafka增强:okmq-1.0.0
mq是个好东西,我们都在用。这也决定了mq应该是高高高可用的。某团就因为这个组件,出了好几次生产事故,呵呵。 大部分业务系统,要求的消息语义都是at least once,即都会有重复消息,但保证不会丢。即使这样,依然有很多问题: 一、mq可用性无法保证。 mq的意外死亡,造成…
发布系统有那么难么?
更多精彩文章。 如果一个上点规模的公司,技术团队有什么值得一做的系统,那么发布系统算一个。 1、 每个公司的流程和技术栈都是不一样的,生搬硬套,就像便秘一样不顺畅。 2、 发布系统技术开发成本不高,很容易搞。你要是觉得难搞,那一定是卡在复杂的公司人员环境和流程上。 3、 jen…
简单的面试题目,大跌眼镜的结果(JAVA)
大老远跑来面试,总不能聊几句就走人吧。碍于情面,起码也得聊上十几分钟。招聘高峰这种情况尤甚,浪费你我时间。所以越来越多的组织会采用电话面试的方式,进行初步筛选。 题目难度一再降低,结果却大跌眼镜,HR都哭了。以下是一个简单统计,样本几百人不等,能够全部答上来的,不超过10%。 …
使用expect实现自动2步登录
以前的公司,由于机器太多太多,使用了跳板机。it觉得仅证书系统不够安全,所以开启了二次验证。 也就是每次登陆,都要Google Authenticator中的动态令牌。 但我不想每次登陆机器都输入这个动态密码。 expect命令可以实现自动交互式任务,自动输入一些信息,无需人为…
Linux生产环境上,最常用的一套“Sed“技巧
sed命令应用广泛,使用简单,是快速文本处理的利器。它其实没多少技巧,背诵、使用是最合适的学习渠道,属于硬 技能。但它又很复杂,因为高级功能太多。本篇不去关注sed的高级功能,仅对常用的一些操作,进行说明。 随着使用,你会发现它和vim的一些理念是想通的,正则表达式的语法也基本…
到处是map、flatMap,啥意思?
更多精彩文章。 最近入职一个有趣的年轻同事,提交了大量大量的代码。翻开git记录一看,原来是用了非常多的java8的语法特性,重构了代码。用的最多的,就是map、flatMap之类的。 但是其他小伙伴不愿意了,虽然有的人感觉代码变的容易懂了,但有更多的人感觉代码变的很晦涩。 那…
程序员画像,十年沉浮
十年,转瞬即逝,人生进入下半场。众生皆苦,万相本无。且看风云变幻,慢品苦辣酸甜。小姐姐味道微信公众号首发。 更多精彩文章。 小胡很久没有笑过了。他在房价的次高点买了套超出自己承受能力的房子,紧接着老婆失业了,失业以后脾气变得特别的不好。 他每天都下班很晚,最近终于鼓足勇气换了份…
如何实现类似 lodash 的 get 与 merge 函数
lodash 基本上成为了写 javascript 工具库的标配,它广泛应用在各种服务端以及前端应用中,但是它的包体积略大了一些。对于服务端来说,包的体积并不是十分的重要,或者换句话说,不像前端那样对包的体积特别敏感,一分一毫都会影响页面打开的性能,从而影响用户体验。 正因为前…
【教程】如何做apm客户端(关键字:Zipkin、Jaeger、SkyWalking、OpenTracing)
随着微服务架构的流行,一次请求往往需要涉及到多个服务,因此服务性能监控和排查就变得更复杂。APM因此而生。 目前,市面上的APM服务端已经有了非常多的实现。比如Zipkin、Jaeger、SkyWalking、Elastic APM等(Pinpoint并不支持OpenTraci…
[jaeger] 四、微服务之调用链(Feign+SpringCloud)
终于到了我们的重点,微服务了。 与使用OkHttp3来实现的客户端类似,Feign接口本来也就是一个Http调用,依然可以使用Http头传值的方式,将Trace往下传。 本文更多的是关于SpringCloud的一些知识,你需要了解一些基本的Spring相关的知识。 Spring…
[jaeger] 三、实现一个分布式调用(OkHttp+SpringBoot)
很多情况,trace是分布在不同的应用中的,最常用的远程调用方式就是Http。 在这种情况下,我们通常通过增加额外的Http Header传递Trace信息,然后将其组织起来。 本部分通过构建一个目前最火的SpringBoot服务端,然后通过OkHttp3进行调用,来展示分布式…
从数据库到前端,使用 enum 代替 constant number
在我经历过的几个以node为主的后端项目中,都有一个文件 constant.js。顾名思义,里边保存着各种常量,而大多是字符串与数字的对应关系。 但是在实际工作中,根据数字来调试相当费劲,先不说后端代码中 where (status === 1) 这种可避免的神奇操作。(PS:…
[jaeger] 二、客户端使用 (Java版本)
本文通过两个简单的示例,说明如何使用java的api构建一个简单的调用链。更多连载请关注《小姐姐味道》。相关代码见github。 由于jaeger是基于OpenTracing的,所以只要你的应用支持OpenTracing协议,就可以和Jaeger集成起来。 接下来我们开动双手吧…