跳到主要内容

深入理解Java序列化

· 阅读需 10 分钟

所谓序列化,就是将对象转为字节流,而反序列化则是将字节流还原为对象。

序列化可以将对象的字节序列持久化——保存在内存、文件、数据库中,在网络上传送对象的字节序列,或者用于 RMI(远程方法调用)。

例子

首先来看一个简单的例子。定义一个 User 类,并实现 Serializable 接口。

HashMap源码分析

· 阅读需 11 分钟

HashMap是很重要的数据结构,也是面试的宠儿,这里就HashMap的源码进行分析,以便理解HashMap的实现。

散列表

散列表(Hash table,也叫哈希表),是根据键(Key)而直接访问在内存存储位置的数据结构。 也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。 这个映射函数称做散列函数,存放记录的数组称做散列表。

散列函数能使对一个数据序列的访问过程更加迅速有效,通过散列函数,数据元素将被更快定位。散列函数有直接定址法、数字分析法、平方取中法、折叠法、随机数法、除留余数法等。

解决哈希冲突的方法一般有:开放定址法、链地址法(拉链法)、再哈希法、建立公共溢出区等方法。在开放定址法中解决冲突的方法有:线行探查法、平方探查法、双散列函数探查法等。开放定址法的缺点在于删除元素的时候不能真的删除,否则会引起查找错误,只能做一个特殊标记。只到有下个元素插入才能真正删除该元素。

数据结构

【实验楼】Kafka快速上手教程

· 阅读需 5 分钟

kafka 介绍与实践

基本概念

topic: Kafka处理的消息源

partition: topic物理上的分组,partition中每条消息都会被分配一个有序的id(offset)

message: 消息,通信的基本单位,每个producer可以向一个topic发布一些消息

broker:缓存代理,Kafka集群中的一台或多台服务器统称为broker

leader: 负责处理消息的读和写

replicas: 副本节点

isr: 正在服务中的节点

安装部署

启动hadoop:

$ hadoop/sbin/start-all.sh

静态博客搭建方法小结

· 阅读需 3 分钟

好久没写博客了,快要荒废了。也许是之前从Hexo静态博客迁移到typecho博客花了不少精力吧,说实话还是挺折腾的,静态博客其实也挺好的。秉承着对于之前静态博客的怀念,写一篇关于静态博客搭建的文章吧。

Hexo

以Hexo静态博客为例,首先需要安装Node.js,Mac/Linux的话推荐先安装nvm,一个Node.js的版本管理工具,详见:nvm-sh/nvm: Node Version Manager,然后安装Node.js。

之后全局安装hexo-cli:

$ npm install hexo-cli -g

Hexo具体使用方法可以看看官网:Hexo

使用cutycapt将网页转为图片

· 阅读需 2 分钟

有时需要在程序里将网页转为图片。虽然使用Chrome或Firefox的headless模式可以做到(不过有时也未必可以),但是,它们比较占用资源。这时,可以用cutycapt这个命令行小工具,它基于QT,非常小巧。

安装

在Ubuntu上安装比较简单,直接安装即可:

$ sudo apt install cutycapt

在ArchLinux上,它位于AUR上,名字叫cutycapt-qt5-git,安装:

$ yay cutycapt-qt5-git

注意,在ArchLinux上它的启动命令行是CutyCapt