kezhenxu94 / kezhenxu94.github.io Goto Github PK
View Code? Open in Web Editor NEW@kezhenxu94's public site
Home Page: http://kezhenxu94.github.io
@kezhenxu94's public site
Home Page: http://kezhenxu94.github.io
https://kezhenxu94.github.io/2020/01/30/Concurrent-classes-AtomicFieldUpdater/
原文: http://normanmaurer.me/blog/2013/10/28/Lesser-known-concurrent-classes-Part-1/作者: Norman Maurer译者: kezhenxu94 今天我想和大家讨论一个鲜为人知的工具类, 当在 Java 中涉及到原子操作的时候经常会使用到这个类; 只要你使用过 java.util.concurrent 包来处理一
https://kezhenxu94.github.io/2018/10/20/Check-code-style-with-Checkstyle/
一千个读者眼中有一千个哈姆雷特.一千个开发者键盘之下, 可能有一千零一种代码风格. 背景 本文所有代码可以从 GitHub 获得. 每个开发者都会有自己喜欢的代码风格, 但当多个开发者需要协作开发一个项目的时候, 如何避免产生图中这样的”圣战”呢. Checkstyle 是一款能够帮助开发者编写遵循一定规范的 Java 代码的工具. 它默认支持 Google 的代码风格规范和 Sun 的代
https://kezhenxu94.github.io/2018/05/18/Warning-Your-programming-career/
如何避免迷失在编程的黑色森林中 在我的编程生涯刚刚开始的时候,主要困扰我的一件事情就是编程语言/编程技术的选择。我应该学什么,从哪里入门?要得到我的第一份编程工作我需要学会什么?回望过去(距今大概已经 10 年),那时还没有像 Coursera,Udemy 和 SoloLearn 这样的在线教育学习平台。那时的我也还无法全靠自己就能寻找到通往成功事业的正确方向和完整道路。对于程序员这个岗位,高回报
https://kezhenxu94.github.io/2018/04/22/Implementations-of-COW-in-Java/
Background写时复制 (Copy on Write, COW) 有时也叫 “隐式共享”, 顾名思义, 就是让所有需要使用资源 R 的使用者共享资源 R 的同一个副本, 当其中的某一个使用者要对资源 R 进行修改操作时, 先复制 R 的一个副本 R’ , 再进行修改操作; Problem在 Java 集合框架中, 像 ArrayList, HashSet 等基础集合类是非线程安全的, 在多线
https://kezhenxu94.github.io/2018/03/28/Testing-API-with-curl-jq-Env-Vars/
Problem 介绍了如何使用 curl 和 jq 进行简单地测试 RESTful 接口; 在实际情况中, 我们通常会有多个部署环境, 如开发环境, 测试环境, 用户验收测试环境 (UAT), 正式环境等; 这些不同的环境通常会使用不同的域名区分, 但接口的路径总是一样的; 使用 curl 进行测试的时候, 如果需要切换不同的环境就需要修改接口的地址, 非常不便;像 Postman 这样的工具提供
https://kezhenxu94.github.io/2020/01/18/JMH-Java-Microbenchmark-Harness/
如何使用 JMH 编写 Java 基准测试JMH 是 Java Micro-benchmark Harness (Java 微基准测试工具) 的简称; 它能够帮助我们正确实现 Java 微基准测试, 本教程会介绍如何使用 JMH 来编写和运行 Java 微基准测试; 为何 Java 微基准测试难编写基准测试来准确测量大型应用中的某一部分是很困难的; JVM 或底层硬件的很多优化可能会在基准测试单独
https://kezhenxu94.github.io/2020/01/15/GitHub-contribution-best-practice/
本文是笔者在开源贡献中总结出来的一些关于 Git 操作的实践, 如果你有 “更佳” 的实践, 请在本文下方评论.本文以笔者自己的 Git 工作流开始, 然后以 Q/A 形式展开, 解释工作流中的各个步骤要解决的问题, 读完第一部分之后, 你可以随意选择你需要的部分进行阅读, 或在遇到问题时再来查阅. Git Flow0. Fork一般情况下我们并没有要贡献的项目的写入权限, 所以需要先创建自己
https://kezhenxu94.github.io/2018/05/27/Build-Your-Own-Cache/
All source code listed in this article are available in GitHub. BackgroundCaching is a critical technology in many high performance scalable applications. There are many choices in caching framework
https://kezhenxu94.github.io/2016/03/03/Java-ThreadLocal/
Lifecycle of Variables在 JDK 源代码中对类 ThreadLocal 的部分注释如下: This class provides thread-local variables. These variables differ from their normal counterparts in that each thread that accesses one (via it
https://kezhenxu94.github.io/2018/03/17/Testing-API-with-curl-jq-curl-basis/
本文使用的所有示例接口都来自 github 的公开接口, 对此表示感谢 curl 基本用法 使用 man curl 查看 curl 命令的完整手册 使用 curl 调用接口1$ curl 'https://api.github.com/users/github/repos' 尽管这里的接口 ‘https://api.github.com/users/github/repos' 两侧的
https://kezhenxu94.github.io/2018/04/21/BitSet-Not-a-Set/
Backgroundjava.util.BitSet 是 Java 中的一个类, 命名规则很像 上一篇文章中 的 EnumSet, 但 BitSet 却并不是 Java 集合框架中的一员: BitSet.java123public class BitSet implements Cloneable, java.io.Serializable { // ...} 对 Bit
https://kezhenxu94.github.io/2016/03/26/MySQL-Master-Slave/
BackgroundMySQL 主从服务器的作用之一是备份, 配置为从服务器 (slave) 的 MySQL 服务器将主服务器 (master) 发生的修改动作同步过来, 当主服务器发生故障的时候, 从服务器可以迅速替代主服务器提供服务. 关于 MySQL 主从服务器的配置本来非常简单, 但网上的配置教程也让我眼花缭乱, 有的教程使用的服务器版本过旧, 而 MySQL 更新非常快, 以前旧版本的配
https://kezhenxu94.github.io/2018/05/20/Jenkins-Getting-Started/
Jenkins 是什么Jenkins 是一个自动化服务器, 他可以用来将与构建, 测试, 交付和发布等相关的各种各样任务自动化. 根据经验, 一项任务要想能够自动化, 其操作步骤应该是相对固定的, 可重复的. 例如, 如果你想对代码进行单元测试, 其步骤通常都是更新最新代码, 运行单元测试脚本/命令, 对于使用 git 作为代码版本控制系统, maven 作为构建工具的项目来说, 步骤通常是:
https://kezhenxu94.github.io/2018/04/09/Load-Balancing-with-Nginx/
Problem使用 Nginx 进行负载均衡. Show Me the Codetest.conf12345678910111213141516171819202122232425log_format example '[$time_local]\t$remote_addr\t$upstream_addr\t"' '$http_user_agent"\t"$ht
https://kezhenxu94.github.io/2018/04/12/EnumSet-A-Special-Set/
ProblemEnumSet is a specialized implementation of java.util.Set, as its name implies, it is designed for use with Enums; so what’s the difference between EnumSet and a regular Set (say HashSet)? And w
https://kezhenxu94.github.io/2018/10/28/Design-Patterns-Visitor-in-ASM/
ASM 是一个 Java 字节码操作和分析框架, 可直接用二进制的方式(无需编译/反编译)修改已存在的类或动态生成新的类. 问题要开发像 ASM 这样的框架, 主要面临以下几个问题: 动态添加操作方法既然是一个字节码的操作和分析框架, 那么就要提供对字节码进行各种各样的操作, 且允许用户自定义操作类型. 如在 ASM 中, 除了内置对字节码进行输出和转换等默认实现之外, 还要允许用户对字节码
https://kezhenxu94.github.io/2018/03/17/Testing-API-with-curl-jq-Start/
Problem目前用于测试 RESTful 接口的工具多种多样, 从像 Postman, Cocoa Rest Client 这样的独立运行的应用程序, 到像 Postman 这样的浏览器插件, 以及像 Editor-based Rest Client 这样的 IDE 插件, 功能都非常专业和强大; 但对于非重度测试人员可能并不想在电脑上安装太多不常用的软件, 或者对于已经熟悉了命令行操作和 Sh
https://kezhenxu94.github.io/2020/01/15/GitHub-Idioms/
本文不定期更新, 添加更多常用语 在开源社区, 特别是 GitHub 上, 经常会有很多惯用语和缩写词, 如果不了解这些惯用语的话, 是很难跟别人顺畅沟通的, 本文总结了在 GitHub 上常用的一些惯用语,希望读者下次在 GitHub 上看到这些惯用语时不要觉得是天书/黑话, 更重要的是希望大家使用比较地道的惯用语和缩写, 类似于 3Q 这种就尽量只在国人社交软件上使用吧 :) 惯用语
https://kezhenxu94.github.io/2020/01/22/False-sharing-and-optimization/
Background我们知道, 在计算机运行的过程中, CPU 主要工作就是处理数据, 而存放这些数据的媒介一般分为几个层次, 离 CPU 从”近”到”远”依次是一级缓存(L1), 二级缓存(L2), 三级缓存(L3), (可能还有四级缓存(L4)等等), 内存, 硬盘. 距离 CPU 越近的媒介读写速度越快, 但是价格越昂贵, 因此容量越小; 要想程序运行速度最快, 理想情况下就是把我们所有需要
https://kezhenxu94.github.io/2018/04/11/Java-java-lang-Object-wait/
Why java.lang.Object从 wait 方法的完整方法签名可以看出, wait 方法是定义在 java.lang.Object 类中的方法; 众所周知, 在 Java 中 Object 类是所有类的父类, 要了解 Java 类库的设计者把 wait 方法定义在这样一个超级父类中的原因, 就先要了解 等待集合 (Wait Sets) 的概念; Wait Sets在 Java 中, 所有
https://kezhenxu94.github.io/2018/03/17/Caching-with-Nginx/
Problem过去几周, 随着公司产品的用户量不断增加, 每当高峰期 API 服务器(只有 1 个)总会因为用户请求数量过多导致响应时间过长, 客户端等待超时主动断开链接, 最终大部分用户的请求都没有得到正常响应. 经过分析发现 API 服务器响应时间过长的原因在于每次客户端请求接口时 API 程序都要向数据库发送查询语句, 且查询返回的数据量相当大, 因此第一反应是优化数据库查询 SQL 和给
https://kezhenxu94.github.io/2018/05/04/Java-Bridge-Methods-Explained/
Java 中的桥接方法是一种合成方法,在实现某些 Java 语言特性的时候是很有必要的。最为人熟知的例子就是协变返回值类型和泛型擦除后导致基类方法的参数与实际调用的方法参数类型不一致。 看一下以下的例子: 12345678910111213public class SampleOne { public static class A<T> { pu
https://kezhenxu94.github.io/2018/03/30/Scraping-Data-with-Scrapy-CrawlSpider/
Problem上一篇文章总结了使用 Scrapy 中的 scrapy.Spider 类扒取静态页面网站的方法; 文章末尾成功扒取到目标网站的数据, 下载了图片到本地文件, 但也发现了一些可以优化的地方: 待扒取的网页地址需要人工寻找: 我们需要使用选择器选择相册列表的 html 标签, 需要使用选择器选择翻页的 html 标签, 提取 url 链接; 下载的图片文件全部存放在一层目录下, 没有
https://kezhenxu94.github.io/2018/03/18/Testing-API-with-curl-jq-jq-basis/
A json file for testingview raw1{"status":200,"errorMsg":"Operation OK!","data":[{"id":10202,"idolId":158,"activityId":1026,"active":1,"title":"可以","introduce":" ","firstFrame":"http://videodebugoutpu
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.