Clay 的技术空间

用进废退 | 艺不压身

前言

本文适用于在 Centos/Debian/Ubuntu 等 Linux 发行版系统上,使用单机搭建 Zookeeper 集群。

Zookeeper 简介

Zookeeper 是一个高效的分布式协调服务,可以提供配置信息管理、命名、分布式同步、集群管理、数据库切换等服务。它不适合用来存储大量信息,可以用来存储一些配置、发布与订阅等少量信息。Hadoop、Storm、消息中间件、RPC 服务框架、分布式数据库同步系统,这些都是 Zookeeper 的应用场景。

Zookeeper 集群简介

在 Linux 单机上搭建 Zookeeper 集群,至少需要三个节点。

角色划分

Zookeeper 集群有三种角色划分,分别是 leaderfollowerobserver

  • 领导者(leader):负责进行投票的发起和决议,更新系统状态。
  • 跟随者(follower):用于接收客户端请求,并向客户端返回结果,以及在选举过程中参与投票
  • 观察者(observer):可以接收客户端连接,将写请求转发给 leader 节点,但是不参与投票过程,只同步 leader 的状态,通常用作对查询操作做负载。
阅读全文 »

前言

这里将参考 JDK 1.7 的 HashMap 底层源码,模拟手写一个简易版的 HashMap。

思路

JDK 1.7 是如何处理哈希冲突的?

在 JDK 1.7 中,HashMap 在处理哈希冲突时采用的是链地址法(Separate Chaining)。当发生哈希冲突时,即多个键被映射到了同一个哈希桶(数组的位置),HashMap 会将这些键值对存储在同一个哈希桶对应的链表中。具体来说,在 JDK 1.7 中,HashMap 的每个哈希桶(数组的位置)实际上是一个链表,每个链表存储了哈希值相同的键值对。当执行 Put 操作时,HashMap 首先会计算键的哈希值,然后确定该键应该存储在数组的哪个位置。如果该位置已经存在了链表,HashMap 就会遍历该链表,检查是否已经存在相同键的键值对。如果存在相同的键,则 HashMap 会更新相应的值;如果不存在相同的键,则 HashMap 会将新的键值对添加到链表的末尾。链地址法的优点是它能够处理哈希冲突,并且在一定程度上保持了 HashMap 的性能。然而,在负载因子较高的情况下,即链表较长的情况下,查询键值对的效率可能会降低,因为需要遍历链表来找到目标键值对。

JDK 1.8+ 是如何处理哈希冲突的?

在 JDK 1.8 之后,HashMap 的实现发生了变化。JDK 1.8 引入了红黑树来替代链表,以改善在负载因子较高时的性能,这种结构称为 “链表与红黑树混合实现”。具体来说,当哈希冲突发生时,如果链表的长度超过一定阈值(默认为 8),HashMap 会将链表转换为红黑树。这样做的目的是为了在链表长度较长时提高查询、修改和删除操作的效率,因为红黑树的时间复杂度更稳定,为 O (log n)。而当链表长度较短时,仍然保持使用链表结构,因为在较短的链表中,链表的遍历效率更高。值得一提的是,当红黑树中元素个数小于一定数量时,会转换回原来的链表结构,JDK 设置这个默认数量为 6 个。

阅读全文 »

PO 持久对象

PO (Persistant Object) - 持久对象,就是对应数据库中某个表中的一条记录,多个记录可以用 PO 的集合表示。PO 中应该不包含任何对数据库的操作。Entity (实体) 就是典型的 PO 对象。

DO 领域对象

DO (Domain Object) - 领域对象,就是从现实世界中抽象出来的有形或无形的业务实体。

TO 数据传输对象

TO (Transfer Object) - 数据传输对象,在不同的应用程序之间传输的对象。

阅读全文 »

大纲

版心

在 PC 端,由于分辨率和屏幕较大,网页版心一般是固定宽度且水平居中的。网页版心的宽度设置示例如下:

屏幕分辨率版心宽度
低分辨率 900 ~ 100
高分辨率 1100 ~ 1300
阅读全文 »

大纲

CSS 基础

横向布局

行内块横向布局的问题

  • 代码换行会造成元素之间有默认间距
  • 行内块是沿基线对齐(底部对齐),具体表现为当给元素设置垂直方向的内外边距时,会影响周围的元素
阅读全文 »

大纲

CSS 基础

行高与行间距

行间距

在 HTML 中,展示的文字涉及到下述几条基准线,包括顶线 (绿色)、中线 (蓝色)、基线 (红色)、底线 (紫色)。行距是指一行底线到下一行顶线的垂直距离。

阅读全文 »

大纲

CSS 基础

常用文本属性

1
2
3
4
5
6
7
8
9
10
11
12
/* 字体颜色 */
color: blue;
/* 字体大小,Chrome默认字体大小是16px */
font-size: 60px;
/* 字体类型,Chrome默认字体类型是微软雅黑;字体可以设置多个,用逗号隔开,按照顺序依次识别,如果全部字体都不被识别,则使用系统默认字体 */
font-family: "宋体";
/* 水平水平居中 */
text-align: center;
/* 字体加粗,正常值是400或者normal,加粗是700 */
font-weight: 700;
/* 首行缩进,建议使用 em 单位: 1em = 当前一个字体的大小 */
text-indent: 2em;
阅读全文 »

最新公告

电台节目《星空夜话》 于 2021 年 2 月正式恢复播出,主持人是黄纬,电台收听频段依旧是 91.4(仅限广深佛),播出时段是 22:30 - 00:00(周一~周五)。

序言

偶然的情况下在豆瓣上看到了文章 - 我很想念《星空夜话》,跟作者一样也是《星空夜话》的忠实听众,于是有了以下的碎碎念。

节目历史

《星空夜话》是广东新闻广播推出的深夜情感电台节目,电台收听频段是 91.4(仅限广深佛),播出时段是 22:15 - 00:00(周一~周五)。这档节目最初的名称是《谈情谈到十二点》,而《谈情谈到十二点》的前身是午间版的《男生女生配》。最初的节目主持人是吕囡囡,后来节目改版了,吕囡囡和孙潇毅开始搭档主持节目,记忆犹新的是节目改版后,片头的那句 “我们总有故事发生”。忘了过了多久,孙潇毅后来离开了《星空夜话》,转去做音乐电台,然后就再也没在《星空夜话》里出现过了。后来男主播黄纬加入《星空夜话》,与吕囡囡轮流主持节目。可惜吕囡囡在 2015.03.21 主持完最后一期节目后也离开了《星空夜话》,转去做午间节目《微博大视野》,刚好那段时间吕囡囡结婚了(三个月闪婚),记得最后那期(2015.03.21)节目的主题是《以最骄傲的姿态离开》。最后,《星空夜话》就剩下黄纬在继续主持节目了。

阅读全文 »

大纲

前言

Web 标准

Web 标准是由 W3C(万维网联盟组织)组织制定,包括以下三部分:

  • 结构: HTML
  • 表现: CSS
  • 行为: JavaScript

浏览器内核

  • IE: trident 内核
  • Firefox: gecko 内核
  • Opear: webkit 内核
  • Safari: webkit 内核
  • Chrome: blink 内核,属于 webkit 内核的一个分支
阅读全文 »

前言

对象拷贝(Object Copy)就是将一个对象的属性拷贝到另一个有着相同类类型的对象中去。在程序中拷贝对象是很常见的,主要是为了在新的上下文环境中复用对象的部分或全部数据。

浅拷贝

浅拷贝(Shallow Copy)只拷贝指向某个对象的指针(内存地址),而不拷贝对象本身,新旧对象还是共享同一块内存,类似一个分支。

阅读全文 »