会员
众包
新闻
博问
闪存
赞助商
HarmonyOS
Chat2DB
所有博客
当前博客
我的博客
我的园子
账号设置
会员中心
简洁模式
...
退出登录
注册
登录
司青
博客园
首页
新随笔
联系
订阅
管理
上一页
1
2
3
4
5
6
···
27
下一页
2020年5月26日
【用Golang实现JVM第一篇】知识准备&前言
摘要: 学习JVM最好的方法,就是实现它,没有之一。 对JVM感兴趣的朋友可能会去主动寻找讲解JVM的书,比如《深入理解JVM》、《Java虚拟机规范》、《虚拟机的设计与实现》,但是这些书都是定性讲解,多数人看过以后对不少概念还是会很模糊,其根本原因就是我们无法只根据定义在脑袋里想象出具体用代码应该怎么实现
阅读全文
posted @ 2020-05-26 15:08 司青
阅读(11)
评论(0)
推荐(0)
2020年5月9日
Go使用chromedp库操作headless-chrome爬取"JS画出来的"网站
摘要: 随着类似Vue、Angular这类通过JS将web页面"画"出来的前端框架的流行,爬取网页不再像以前那样随便发个GET请求,解析HTML就能搞定了。对于使用这类框架制作的SPA(Single Page Web Application)网站来说,必须使用一个全功能浏览器将JS脚本执行一遍才能获得想要的
阅读全文
posted @ 2020-05-09 16:08 司青
阅读(273)
评论(0)
推荐(0)
2020年4月2日
使用Kafka时一定要注意防止消费速度过慢触发rebalance而导致的重复消费
摘要: 在Java应用中,我们往往会使用spring-kafka组件简单的设置一下group_id, topic就开始消费消息了,其实这样会埋下巨大的安全隐患,即当消费速度过慢时有可能会触发rebalance, 这批消息被分配到另一个消费者,然后新的消费者还会消费过慢,再次rebalance, 这样一直恶性
阅读全文
posted @ 2020-04-02 22:26 司青
阅读(36)
评论(0)
推荐(0)
2020年3月9日
业务系统如何正确实现防重名功能
摘要: 常见但是错误的实现 在业务系统中防重名是一个非常普遍的需求,例如用户注册时不允许用户名重复、已登录用户不可以在自己的账号范围内创建同名的某种实体等。很多人在实现的时候都是简单的先判断名字是否重复,如果没有则执行插入操作,如下: public void register(User user) { //
阅读全文
posted @ 2020-03-09 00:25 司青
阅读(22)
评论(0)
推荐(0)
2020年2月25日
Go1.14(即将发布)中的性能改进
摘要: Go1.14即将于2020年2月底发布,这个版本有一些值得注意的性能改进,如下: defer 跟正常的函数调用相比,defer几乎已经没有额外的开销了。你可以在对性能极度敏感的代码中放心的使用defer了。 调度器 Goroutine支持真正意义上的抢占式调度了。我们知道在老版本中,goroutin
阅读全文
posted @ 2020-02-25 01:20 司青
阅读(23)
评论(0)
推荐(0)
2019年12月19日
Go Web系统中的错误处理(可能是最佳)实践
摘要: 文章目录 不要直接无脑返回error使用runtime.Caller()添加代码位置信息使用错误嵌套保存原始错误错误的分类 在讨论所有的错误处理实践之前首先要接受一个事实,那就是每调用一个函数/方法都要检查一下返回值中的 err是否为空的操作是无法避免的,这可能是很多从Java转过来的开发者们除语法
阅读全文
posted @ 2019-12-19 11:47 司青
阅读(35)
评论(0)
推荐(0)
2019年11月19日
数据库事务中不可重复读与幻读的区别
摘要: 开门见山 可重复读仅能保证再次执行同样的查询时,先前返回【过】的结果一定跟之前一样,而不保证会不会多出别的记录。如果返回了之前没有出现过的记录,就是幻读。 隔离级别 数据库事务的四种隔离级别相信现在已经烂大街了,但是发现很多文章都没有解释清楚不可重复读non-repeatable read与幻读ph
阅读全文
posted @ 2019-11-19 18:21 司青
阅读(28)
评论(0)
推荐(0)
2019年10月26日
Netty对零拷贝(Zero Copy)三个层次的实现
摘要: 首先我们来看一下维基百科对零拷贝给出的定义: 零拷贝描述了一种计算机中的操作,即CPU在执行某项任务时不需要先将数据从内存中的一个位置移动到另一个位置就可以完成操作,从而节省了CPU时钟周期和内存带宽。 从上面的描述可以看出,其实只要是节省了一次或多次数据的复制就可以称之为零拷贝了,这其实是一种广义
阅读全文
posted @ 2019-10-26 14:13 司青
阅读(14)
评论(0)
推荐(0)
2019年8月2日
Go中方法接收者是指针类型和值类型的根本区别, 看这一篇就足够了
摘要: 要理解使用指针接收者和使用值接收者的根本区别只需要明确一点就够了:它们的方法名是不一样的。 方法名 我们拿Man和Woman两个简单的结构体举例: type Man struct { } type Woman struct { } 我们分别使用指针接收者和值接收者给它们添加一个Say()方法: //
阅读全文
posted @ 2019-08-02 16:48 司青
阅读(6)
评论(0)
推荐(0)
2019年7月29日
Git工作流: 主干开发tag上线
摘要: 使用git的朋友应该都熟悉一些常见的工作流,比如主干开发分支上线和分支开发主干上线。前者是指在master分支永远是开发版的最新代码,而分支上则是当前线上部署的代码,后者反之。这里给大家介绍一个我个人非常习惯的流程:主干开发,Tag上线。 只用master分支,上线打tag 所谓Tag上线是指我们全
阅读全文
posted @ 2019-07-29 11:16 司青
阅读(41)
评论(0)
推荐(0)
上一页
1
2
3
4
5
6
···
27
下一页
公告