目录

Life in Flow

知不知,尚矣;不知知,病矣。
不知不知,殆矣。

存档: 2019 年 09 月 (7)

Netty

剖析:启动服务 # 服务启动主线 * Selector selector = sun.nio.ch.SelectorProviderImpl.openSelector() * ServerSocketChannel serverSocketChannel = provider.openServerSocketChannel() * selectionKey = javaChannel().register(eventLoop().unwrappedSelector(), 0, this); * javaChannel().bind(localAddress, config.getBacklog()); * selectionKey.interestOps(OP_ACCEPT); • Selector 是在 new NioEventLoopGroup()(创建一批 NioEventLoop)时创建。 • 第一次 Register 并不是监听 OP_ACCEPT,而是 0: selectionKey = javaChannel().register(eventLoop().unwrap....

ElasticSearch

全文搜索引擎  全 ⽂搜索引擎是 ⽬前 ⼴泛应 ⽤的主流搜索引擎。它的 ⼯作原理是计算机索引程序通过扫描 ⽂章中的每 ⼀个词,对每 ⼀个词建 ⽴ ⼀个索引,指明该词在 ⽂章中出现的次数和位 置,当 ⽤户查询时,检索程序就根据事先建 ⽴的索引进 ⾏查找,并将查找的结果反馈给 ⽤户的。 数据分类 结构化数据:通常可以通过 TRDB 以表的方式存储和搜索、也可以建立索引,通过 b-tree 等数据结构快速搜索数据。 非结构化数据:全文数据,不定长或无固定格式的数据。例如:邮件、word 文档等。对非结构化数据的搜索方法有两种:顺序扫描法、全文搜索法。 顺序扫描法  按字 ⾯意思,我们可以了解它的 ⼤概搜索 ⽅式,就是按照顺序扫描的 ⽅式查找特定的关键字。⽐如让你在 ⼀篇篮球新闻中,找出"科 ⽐"这个名字在哪些段落出现过。那你肯定需要从头到尾把 ⽂章阅读 ⼀遍,然后标记出关键字在哪些地 ⽅出现过。这种 ⽅法毋庸置疑是最低效的,如果 ⽂章很 ⻓,有 ⼏万字,等你阅读完这篇新闻找到"科 ⽐"这个关键字,那得花多少时间。 全文搜索法  对 ⾮结构化数据进 ⾏顺序扫描很慢,可以将 ⾮结构化数据中的....

Shiro

什么是权限控制  将指定用户绑定到指定资源上,只能对指定资源进行(CRUD)操作。 限框架核心知识 ACL 和 RBAC ACL: Access Control List 访问控制列表  以前盛行的一种权限设计,它的核心在于用户直接和权限挂钩。  例子:常见的文件系统权限设计(Linux 文件系统权限设计), 直接给用户加权限 优点:简单易用,开发便捷。 缺点:用户和权限直接挂钩,导致在授予时的复杂性,比较分散,不便于管理。 RBAC: Role Based Access Control  基于角色的访问控制系统。权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。  例子:基于 RBAC 模型的权限验证框架与应用 Apache Shiro、Spring Security。 优点:简化了用户与权限的管理,通过对用户进行分类,使得角色与权限关联起来 缺点:开发对比 ACL 相对复杂  总结:不能过于复杂,规则过多,维护性和性能会下降, 更多分类 ABAC、PBAC 等。 Apache Shiro VS Spring Security Spring Security ....

Jmeter

常用压力测试工具对比 loadrunner: 性能稳定,压测结果及细粒度大,可以自定义脚本进行压测,但是太过于重大,功能比较繁多 。 apache ab(单接口压测最方便): 模拟多线程并发请求,ab命令对发出负载的计算机要求很低,既不会占用很多CPU,也不会占用太多的内存,但却会给目标服务器造成巨大的负载, 简单DDOS攻击等 。 webbench: webbench首先fork出多个子进程,每个子进程都循环做web访问测试。子进程把访问的结果通过pipe告诉父进程,父进程做最终的统计结果。 压测不同的协议和应用 Web - HTTP, HTTPS (Java, NodeJS, PHP, ASP.NET, …) SOAP / REST Webservices FTP Database via JDBC LDAP 轻量目录访问协议 Message-oriented middleware (MOM) via JMS Mail - SMTP(S), POP3(S) and IMAP(S) TCP 等等 使用场景及优点 功能测试 压力测试 分布式压力测试 纯 Java 开发 上手容....

Continuous Integration

持续集成  持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。 JDK [root@localhost test]# tar -zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/ [root@localhost jdk1.8.0_91]# pwd [root@localhost jdk1.8.0_91]# vim /etc/profile /usr/local/jdk1.8.0_91 JAVA_HOME=/usr/local/jdk1.8.0_91 export JAVA_HOME CLASSPATH=.:$JAVA_HOME/lib export CLASSPATH PATH=$PATH:$JAVA_HOME/bin:$CLASSPATH export PATH [root@localhost jdk1.8.0_91]# source /etc/profile [root@loca....

GitLab

简介  是一个用于仓库管理系统的开源项目,使用 Git 作为代码管理工具,并在此基础上搭建起来的 Web 服务。​ 基础功能免费,高级功能收费。 基础功能开源,可自行搭建​ 。 可以进行权限控制,使得代码对部分人可见​ 。 GitLab 使用方便,非常适合企业内部使用。 部署  必须双核,内存最好 3G,否则报 502.   # 在防火墙里开放http跟ssh端口 [root@localhost ~]# yum install lokkit yum install curl policycoreutils openssh-server openssh-clients systemctl start postfix.service chkconfig postfix on​  lokkit -s http -s ssh # 添加gitlab仓库,并安装 curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo b....

Git

简介  Git 是一个分布式版本控制软件,最初由(Linus Torvalds)创作。  同类型软件有 SVN、cvs,Git 相比于他们最大的优势就在于 Git 是分布式的 。  Git 允许多个远程仓库存在,使得这样一种工作流成为可能:每个开发者拥有自己仓库的写权限和其他所有人仓库的读权限。 这种情形下通常会有个代表“官方”项目的权威的仓库。 要为这个项目做贡献,你需要从该项目克隆出一个自己的公开仓库,然后将自己的修改推送上去。 接着你可以请求官方仓库的维护者拉取更新合并到主项目。 维护者可以将你的仓库作为远程仓库添加进来,在本地测试你的变更,将其合并入他们的分支并推送回官方仓库。 部署  git-2.9.5 [root@localhost test]# yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel [root@localhost test]# yum install gcc perl-ExtUtils-MakeMaker [root@localhost test]# yum re....