自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(55)
  • 收藏
  • 关注

原创 Kafka Producer模块分析

1. 概述一、Kafka Producer包含哪些部分其实我们讨论producer时,指的是用户接触的clients.producer这个util包,其中包含了发送数据到哪台机器、怎样序列化、分批发送与拒绝消息等等的发送策略。但这些讨论不包括Kafka接到这些消息后怎样处理的问题,这些是broker(即kafka server端)需要去处理的部分。二、Producer与Broker的关系producer会维护将要发送的topic表,在必要时向broker要这些topic的元信息,并在client端

2020-07-05 14:03:08 586

原创 头条基础架构 - 面试题 - 三个线程并发打出ABC的字母

题目描述有三个线程,分别能够打出A,B,C三个字母,如何让它们并发协作的打出ABCABCABC…这样的字符串?(仅使用ReentrantLock的功能)思路一 Lock使用一个lock与对应创建的condition,思路如下:使用一把锁来控制同时三个线程的串行执行,但此时仍无法保证三个线程抢到锁的顺序;发现当前不应该自己输出时,使用condition进入await状态;在成功打印后,使用condition唤醒其它沉默的线程;那么通俗来讲,流程就变成三个人不断抢锁,抢到锁后发现没轮到自己干活

2020-06-21 23:39:21 418

原创 认知复杂度——估算项目代码的理解成本

1. 摘要Cognitive Complexity:认知复杂度,是由sonarQube设计的一个算法,算法将一段程序代码被理解的复杂程度,估算成一个整数——可以等同于代码的理解成本。IntellliJ IDEA支持sonar插件,可以实时计算函数的认知复杂度,当复杂度过高时将提醒重构。认知复杂度的计算基于以下三规则:语法糖不增加理解难度、打断线性代码执行增加理解难度、多层嵌套增加理解难度。2. 历史背景(可略过)2.1 概要最初工业界普遍使用圈复杂度(Cyclomatic Complexity)

2020-06-05 19:12:59 5946

原创 Redis设计 - Sentinel哨兵

背景Redis单独实现了一个Sentinel模块,用于监听主从实例,主动下线问题的主实例,替换从实例,以达到Redis的高可用。初始化初始化Sentinel时指定监控的主实例列表masters,向主实例们改起连接,伪装成它们的一个客户端。Sentinel每隔十秒发送一条INFO消息给主服务器,获取主服务器状态,及对应的从服务器实例并连接。连接其它结点Sentinel还以两秒一次的频率,向...

2020-05-02 16:58:48 227 1

原创 Redis设计 - 主从与复制功能

一、简述Redis提供了slaveof命令,使当前结点A定期接受另一结点B的数据。我们称B为主服务器(以下称为master),A为B结点的从服务器(以下称为slave)。在2.8版本开始,主从功能开始完善,通过初始的全量同步,及后续不断的增量同步,来实现主从的一致。二、Redis 2.8以前的老版本redis slave初次连上master时,发送SYNC命令完成初次的全量数据同步,后续m...

2020-05-02 15:36:04 239

原创 golang容易掉进的坑(一)

案例一 switch-case会自动结束下面这段代码会出现什么结果呢?func test(a int) string { switch a { case 4: case 3: return "hit" } panic("noooo")}func main() { fmt.Println(test(4))}如果在其它语言中,结果是打印出hit并结束程序,而在go...

2018-11-30 16:13:22 340 1

原创 [MySQL] 使用索引覆盖优化业务查询

一、在MySQL表中,有一项无法忽略的部分,那就是索引——因为它直接或间接的决定了业务查询的时间复杂度。一个差的索引,会导致SQL操作需要扫描全表,来查出符合条件的数据行,这当然是一个悲剧。我们有必要,但也很容易去避免以下这种情况的发生,只要针对业务查询建对应的索引就可以了。但是,只需要建出对应的索引就可以了吗?当然是不够的,核心操作业务如果需要的字段很少,通过索引覆盖,性能可以达到一个质...

2018-03-26 02:40:10 286

原创 Kafka基础概念

Kafka有什么用途?举例有如下场景: 1. 当前有一个接口提供创建用户一个草稿评论 2. 检查草稿后,若合法则将其推到线上,发现违禁字则删除。 3. 若删除则记录用户不合法次数+1 4. 推到线上后将文章评论数+1,并通知文章作者收获了一条评论 5. 。。。。上述操作的后续操作可以无限拓展下去,如果放在一个“创建评论”中写完未免过于冗长。站在事件驱动的角度来看,好像一滴水滴入湖中,引发起

2017-12-08 09:49:08 418

原创 [MySQL] 基础数据类型优化

一、选择优化的数据类型整数类型 存储整数可使用TINYINT \ SMALLINT \ MEDIUMINT \ INT \ BIGINT,分别对应8、16、24、32、64位存储空间,可选用需求范围内最小的数据类型。INT UNSIGNED等表示对应的无符号类型。 MySQL可以为整数指定宽度,如INT(11),但这样对存储不会有影响 ,只是指定了交互工具显示的字符个数(如命令行等工具)实数

2017-07-10 15:19:56 404

翻译 Java的日期与时间(十六)java.time.format.DateTimeFormatter

Java的日期与时间原文链接 作者:Jakob Jenkov 译者:阿为 目录:http://blog.csdn.net/tjgykhulj/article/details/68952451 (所有译者备注将以此形式出现,删除线表示有争议或不明确的地方)十六、java.time.format.DateTimeFormatterDateTimeFormatter类是Java 8中日期时间功能里

2017-04-03 23:57:14 12902

翻译 Java的日期与时间(十五)java.time.ZonedDateTime

Java的日期与时间原文链接 作者:Jakob Jenkov 译者:阿为 目录:http://blog.csdn.net/tjgykhulj/article/details/68952451 (所有译者备注将以此形式出现,删除线表示有争议或不明确的地方)十五、java.time.ZonedDateTimeZonedDateTime类是Java 8中日期时间功能里,用于表示带时区的日期与时间信

2017-04-03 23:56:07 15707

翻译 Java的日期与时间(十四)java.time.LocalDateTime

Java的日期与时间原文链接 作者:Jakob Jenkov 译者:阿为 目录:http://blog.csdn.net/tjgykhulj/article/details/68952451 (所有译者备注将以此形式出现,删除线表示有争议或不明确的地方)十四、java.time.LocalDateTimeLocalDateTime类是Java 8中日期时间功能里,用于表示当地的日期与时间的类

2017-04-03 23:54:38 13430

翻译 Java的日期与时间(十三)java.time.LocalTime

Java的日期与时间原文链接 作者:Jakob Jenkov 译者:阿为 目录:http://blog.csdn.net/tjgykhulj/article/details/68952451 (所有译者备注将以此形式出现,删除线表示有争议或不明确的地方)LocalTime类是Java 8中日期时间功能里表示一整天中某个时间点的类,它的时间是无时区属性的(早上10点等等)。比如你需要描述学校几

2017-04-03 23:53:45 11208

翻译 Java的日期与时间(十二)java.time.LocalDate

Java的日期与时间原文链接 作者:Jakob Jenkov 译者:阿为 目录:http://blog.csdn.net/tjgykhulj/article/details/68952451 (所有译者备注将以此形式出现,删除线表示有争议或不明确的地方)十二、java.time.LocalDateLocalDate类是Java 8中日期时间功能里表示一个本地日期的类,它的日期是无时区属性的。

2017-04-03 23:48:41 5442

翻译 Java的日期与时间(十一)java.time.Duration

Java的日期与时间原文链接 作者:Jakob Jenkov 译者:阿为 目录:http://blog.csdn.net/tjgykhulj/article/details/68952451 (所有译者备注将以此形式出现,删除线表示有争议或不明确的地方)十一、java.time.Duration一个Duration对象表示两个Instant间的一段时间,是在Java 8中加入的新功能。一个D

2017-04-03 23:29:39 21824

翻译 Java的日期与时间(十)java.time.Instant

Java的日期与时间原文链接 作者:Jakob Jenkov 译者:阿为 目录:http://blog.csdn.net/tjgykhulj/article/details/68952451 (所有译者备注将以此形式出现,删除线表示有争议或不明确的地方)十、java.time.InstantInstant类在Java日期与时间功能中,表示了时间线上一个确切的点,定义为距离初始时间的时间差(初

2017-04-03 23:27:40 14858 1

翻译 Java的日期与时间(九)Date与String的转换

Java的日期与时间原文链接 作者:Jakob Jenkov 译者:阿为 目录:http://blog.csdn.net/tjgykhulj/article/details/68952451 (所有译者备注将以此形式出现,删除线表示有争议或不明确的地方)九、Date与String的转换Java中的java.text.SimpleDateFormat类适用于日期与字符串的相互转换,我曾经重写过

2017-04-03 23:26:55 1558

翻译 Java的日期与时间(八)java.util.TimeZone

Java的日期与时间原文链接 作者:Jakob Jenkov 译者:阿为 目录:http://blog.csdn.net/tjgykhulj/article/details/68952451 (所有译者备注将以此形式出现,删除线表示有争议或不明确的地方)八、java.util.TimeZoneJava中的java.util.TimeZone类用于表达时区,当你进行跨时区的java.util.

2017-04-02 19:47:00 19677

翻译 Java的日期与时间(七)java.util.Calendar和GregorianCalendar

Java的日期与时间原文链接 作者:Jakob Jenkov 译者:阿为 目录:http://blog.csdn.net/tjgykhulj/article/details/68952451 (所有译者备注将以此形式出现,删除线表示有争议或不明确的地方)七、 java.util.Calendar和GregorianCalendarJava中的java.util.Calendar类适用于计算日

2017-04-02 19:17:30 1627

翻译 Java的日期与时间(六)java.sql.Timestamp

Java的日期与时间原文链接 作者:Jakob Jenkov 译者:阿为 目录:http://blog.csdn.net/tjgykhulj/article/details/68952451 (所有译者备注将以此形式出现,删除线表示有争议或不明确的地方)(你会发现这一章有非常多内容同上一章相似,你的感觉是对的,因为原作者统一了描述格式,甚至在后续的章节中还会反复出现。)六、java.sql.

2017-04-02 19:16:24 3660

翻译 Java的日期与时间(五)java.sql.Date

Java的日期与时间原文链接 作者:Jakob Jenkov 译者:阿为 目录:http://blog.csdn.net/tjgykhulj/article/details/68952451 (所有译者备注将以此形式出现,删除线表示有争议或不明确的地方)五、java.sql.DateJava中的java.sql.Date类适用于JDBC(数据库连接)API,如果你需要往java.sql.Pr

2017-04-02 17:48:41 15726 1

翻译 Java的日期与时间(四)java.util.Date

Java的日期与时间原文链接 作者:Jakob Jenkov 译者:阿为 目录:http://blog.csdn.net/tjgykhulj/article/details/68952451 (所有译者备注将以此形式出现,删除线表示有争议或不明确的地方)四、java.util.Datejava.util.Date是Java设计的第一批时间类,如今其中的大部分方法都不推荐使用了(Deperec

2017-04-02 17:43:48 1629

翻译 Java的日期与时间(三)计算运行时间

Java的日期与时间原文链接 作者:Jakob Jenkov 译者:阿为 目录:http://blog.csdn.net/tjgykhulj/article/details/68952451 (所有译者备注将以此形式出现,删除线表示有争议或不明确的地方)三、Java中计算运行时间在Java中使用System.currentTimeMillis()来记录程序运行时间非常简单。只要在操作前后各记

2017-04-02 16:46:43 1704

翻译 Java的日期与时间(二)System.currentTimeMillis()

Java的日期与时间原文链接 作者:Jakob Jenkov 译者:阿为 目录:http://blog.csdn.net/tjgykhulj/article/details/68952451 (所有译者备注将以此形式出现,删除线表示有争议或不明确的地方)二、System.currentTimeMillis()这个静态方法System.currentTimeMillis()将返回自1970年1

2017-04-02 15:55:25 1682

翻译 Java的日期与时间(目录)

Java的日期与时间原文链接 作者:Jakob Jenkov 译者:阿为 目录: (所有译者备注将以此形式出现,删除线表示有争议或不明确的地方)简述System.currentTimeMillis()Time Measurementjava.util.Datejava.sql.Datejava.sql.Timestampjava.util.Calendar与GregorianC

2017-04-02 15:51:39 2579

翻译 Java的日期与时间(一)简述

Java的日期与时间原文链接 作者:Jakob Jenkov 译者:阿为 目录:http://blog.csdn.net/tjgykhulj/article/details/68952451 (所有译者备注将以此形式出现,删除线表示有争议或不明确的地方)一、简述Java中提供的日期和时间功能,实在让人非常头疼。因此我将Java中日期与时间类放在一起,做了一个小小的教程,希望能帮助大家对这些功

2017-04-02 15:44:09 784

原创 函数调用时,系统底层做了什么?

一去年面试的时候,曾经被问到过这样的问题:“你对汇编了解吗?那么调用一个C函数时系统底层做了什么?” 我仔细回想上课学到的内容,发现已经忘光了,重新去翻了翻《深入理解计算机系统》这本书,得到了解答。在此记下给自己加深印象。二首先要回想的是一些基础概念: 栈帧(stack frame):机器用栈来传递过程参数与返回信息,为单个过程分配的那部分栈称为它的栈帧。 %ebp:寄存器,在IA32模型中

2017-02-26 15:31:07 1115

原创 模仿与学习MyBatis - 1.6 注解与Session:sql语句

本文收录于模仿与学习MyBatis系列 简述在上一篇中,实现了一个MapperProxy类,代入接口会生成一个mapper,通过它来调用方法,将输出begin #方法名 end这样的字串。 而在本篇中将讨论的是,什么是注解,MapperProxy如何与注解搭配起来,回调session中的方法。即要达到如下图中的效果,最后分析一下这样设计的原因。 最终结果是一个Java Maven项目,

2016-12-09 00:23:09 556

原创 模仿与学习MyBatis - 1.5 Mapper与动态代理

本文收录于模仿与学习MyBatis系列 简述在本篇中,将讨论与解释动态代理,以及Mapper在MyBatis中的意义。最终实现一个基础的Mapper代理类,实现Session.getMapper()功能。 最终结果是一个Java Maven项目,代码存在github上。动态代理代理是一种设计模式,即对于一个类A,设计一个拥有同样接口的代理类P,负责为A进行统一的预处

2016-12-08 22:00:21 1091 1

原创 模仿与学习MyBatis - 1.4 SessionFactory与Session

本文收录于模仿与学习MyBatis系列 简述在前一章《模仿与学习MyBatis - 1.3 xml配置的解析》中,对指定的文件实行了一个基本的DataSource解析类XMLConfigBuilder。在本篇中将讨论以及实现一个最基本的SessionFactory(关于Session的意义可跳转到这里)。计划未来所有Session,都统一通过SessionFactory.openSession

2016-12-07 20:20:23 983

原创 模仿与学习MyBatis - 1.3 xml配置的解析

本文收录于模仿与学习MyBatis系列 简述在前一章《模仿与学习MyBatis - 1.2 DataSource与Session》中实现了一个基本的DataSource与Session。但是DataSource的值需要在Java代码中设置的,不是很利于更改配置。所以在这一篇,新增一个XMLConfigBuilder类,能读取xml文件并生成一个DataSource。 最终产生的是一个Java M

2016-12-07 17:32:31 939 1

原创 模仿与学习MyBatis - 1.2 DataSource与Session

本文收录于模仿与学习MyBatis系列 综述本篇将实现1.1章中提到的两个类:DataSource:实现标准的javax.sql.DataSource接口, 用于获取数据库连接。Session:可以直接调用exec(sql)来执行sql语句(在DataSource指定的数据库中操作)最终产生的是一个Java Maven项目,代码存在github。DataSourcepublic class

2016-12-05 23:17:05 1346

原创 模仿与学习MyBatis - 1.1 综述:MyBatis核心功能

本文收录于模仿与学习MyBatis系列综述在模仿MyBatis框架的开始阶段,我不打算讨论一个非常宏大的世界观。因为大部分初学者,包括我,在刚接触这类框架前,都是一头雾水的。如果没有一些基本的概念理解,就列举出那十几个大模块、它们之间如何交互,分析它们的源码,我觉得不是很有意义。 那么,先从一些简单的概念开始。MyBatis的意义MyBatis核心功能可以总结为:Java的SQL映射。举例来说,当

2016-12-05 20:50:45 1667

原创 模仿与学习MyBatis - 实现自己的ORM层框架

目录陆续新增中,敬请期待第一版 综述:MyBatis核心功能DataSource与Sessionxml配置的解析SessionFactory与SessionMapper与动态代理注解与Session:sql语句注解与Session:返回值映射vxml配置的解析:返回值映射第二版 暂无 前言对于MyBatis,前前后后接触了有一段时间了。最初是懵懵懂懂的,听说它是可以直接将sq

2016-12-05 17:21:28 3281 2

原创 [Java] 浅谈泛型的意义与不足

示意 - 泛型代码泛型是什么有什么用为什么要有泛型示意 - 泛型代码// 类的泛型class Two<A,B> { public A first; public B second; public Two(A a, B b) { first = a; second = b; }}class Test { // 方法的泛

2016-04-13 11:14:00 5868

原创 [Emacs] 1.3 我的常用按键配置

更新.emacs;;; 按键设置(add-to-list 'load-path "~/.emacs.d/lisp/")(load "key.el")然后在.emacs.d中新建文件夹lisp,并新建文档key.el,接下来的代码默认插入在文件key.el中。透明度单纯有配色还是不够有感觉,接下来的代码设置F7为透明度切换按键。(这里是代码出处);;; f7设置透明度,初始为(85 55)(gl

2015-11-21 14:35:45 683

原创 [Emacs] 1.2 尝试配置emacs(基础与配色)

基础设置读到这里已经了解了一些基本操作,现在打开配置文件(C-x C-f .emacs),将下列配置粘贴进去(复制后在文件中按M-y);;; 去掉菜单与工具栏(tool-bar-mode -1)(menu-bar-mode -1);;; 设置初始为空板(setq inhibit-startup-message t)(setq initial-scratch-message "");;;

2015-11-21 13:22:42 587

原创 [Emacs] 1.1 进一步的概念与操作

缓冲区emacs中的一个页面称为一个缓冲区 当打开多个缓冲区时,可通过C-x b name切换到名字为name的。 更方便的可以通过C-x 方向键,来向左或向右切换缓冲区。多窗口有很多时候需要同时看多个文件(比如一边是文档,一边是代码)。emacs在这方面是很方便 :C-x 1 //只保留当前窗口C-x 2 //将当前窗口分成上下两块C-x 3 //将当前窗口分成左右两块C-x 0 //关

2015-11-21 12:54:16 412

原创 [Emacs] 1.0 安装与基本使用

安装直接在shell输入sudo apt-get install emacs基本可以安装到最新版的Emacs入门使用可以直接打开emacs,也可以通过在shell中输入emacs指令打开。 打开后正常来讲会看到欢迎界面,此界面中有新手教程可以看,网上资料也有不少了。记一些基本概念: C-x 表示按住Ctrl再按x M-x 表示按住Alt再按x(在多数键盘上是这样的) 例如:C-x C-f f

2015-11-21 12:20:36 766

原创 [Emacs] 使用w3m上网

安装(w3m)配置(在emacs中)快捷键(emacs下使用w3m)安装首先下载w3m需要的包:(w3m\emacs支持\图片支持)sudo apt-get install w3m w3m-el w3m-img配置安装后在.emacs中加入;;; 调用w3m库 (autoload ‘w3m “w3m” “interface for w3m on emacs” t) (setq w3m-co

2015-11-21 11:14:34 3219

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除