Posts
All the articles I've posted.
-
对感知机算法的一些理解
技术笔记机器学习假设了对于某个问题存在一个上帝函数,给定一个输入就能得到一个确定的输出,计算机可以通过样本数据在假设的函数空间中找到一个近似上帝函数的函数,我们可以利用这个近似函数来进行预测。 现实世界的问题大体可以分为两类:分类和回归。 分类问题就是对一个东西判断它所属的类别,例如判断一张照片里面的动物是...
-
怎样写线程安全的代码
技术笔记前言 多线程编程是软件开发中最棘手的问题之一。无论什么时候用多线程来操作同一份数据,都会出现并发问题。这就让写线程安全的代码成为一件非常困难的事情。本文将会从并发问题的本质出发,带你了解问题的根源,然后通过实例阐述保证线程安全的难点在哪里,最后提供常见的并发控制技术的原理和例子,希望能够帮助读者更好...
-
MAB问题的解法与应用(万字长文)
技术笔记 目录 MAB问题 MAB是多臂老虎机(Multi Armed Bandit)的缩写,MAB问题就是假设有个赌徒到赌场里面摇老虎机,赌场里面有10个老虎机,每个老虎机的赢钱概率是不一样的,此时他不知道每个老虎机的赢钱概率,而且他只有100个币,也就是说只能摇100次,如果他想最大化收益应该怎么摇?...
-
50行代码实现一个KV数据库
技术笔记最简单的KV数据库需要多少行代码实现?答案是不到50行。接下来我会带你实现一个基于日志顺序写入的数据库,它的功能很简单,支持写入和查询字符串类型的key和 value。 一个KV数据库最重要的是存储实现,因为它的查询语法很简单,根据key查询value就行,不像关系型数据库还需要实现解析器和优化器来...
-
从零开始写KV数据库:基于哈希索引
技术笔记前言 新的KV数据库层出不穷,我们经常听说的KV数据库如RocksDb、Hbase等都是基于日志结构的存储引擎。最近我在看《数据密集型应用系统设计》,里面有一章专门在讲日志结构的存储引擎的演进过程,纯看理论不过瘾,所以我决定根据书里的理论动手自己实现一个KV数据库。同时,为了能顺便学习Rust,所以...
-
Java 类隔离加载的正确姿势
技术笔记什么是类隔离技术 只要你 Java 代码写的足够多,就一定出现这种情况:系统新引入了一个中间件的 jar 包,编译的时候一切正常,一运行就报错:java.lang.NoSuchMethodError,然后就哼哧哼哧的开始谷歌找解决方法,最后在几百个依赖包里面找的眼睛都快瞎了才找到冲突的 jar,把问...
-
Java 日志框架冲突问题排查与总结
技术笔记Java 日志框架冲突问题排查与总结 前言 Java 有很多的日志框架可以选择,当同一个项目中出现多种日志框架时就很容易出现日志框架冲突的问题,导致日志打印不出来。本文将以一次典型的日志冲突排查问题为例,提供排查步骤和思路,最后分析日志框架冲突的原因。 一般行文思路都是先讲 Why,再讲 How,这...
-
多视角看区块链
技术笔记前言 像很多新技术一样,区块链开始火起来的时候评价是两级分化的,有人觉得区块链会成为下一代的互联网的基础设施,有人觉得区块链没有任何价值。很多时候观点的不同是因为看的角度不一样,如果能从多个角度看区块链,或许能得到更客观的观点,因此本文会分别从技术和业务的视角来分析区块链。 从技术的视角看区块链 从...
-
分布式系统:一致性协议
技术笔记一致性模型本质上是进程与数据存储的约定,通过一致性模型我们可以理解和推理在分布式系统中数据复制需要考虑的问题和基本假设。那么,一致性模型的具体实现有一些呢?本文会介绍一致性协议实现的主要思想和方法。 什么是一致性协议 一致性协议描述了特定一致性模型的实际实现。 一致性模型就像是接口,而一致性协议就像...
-
分布式系统:Lamport 逻辑时钟
技术笔记分布式系统解决了传统单体架构的单点问题和性能容量问题,另一方面也带来了很多的问题,其中一个问题就是多节点的时间同步问题:不同机器上的物理时钟难以同步,导致无法区分在分布式系统中多个节点的事件时序。1978年Lamport在《Time, Clocks and the Ordering of Event...