Stephan14 Blog

享受编程,信仰技术

2018年回顾

浴火重生

离开360搜索 春节回北京之后就跟领导提了离职,原因真的是对工作方向不喜欢,自己也感到心很累。可能我这辈子都没有想到自己的第一份工作仅仅是正式工作了半年,但是得承认的是这半年真的收获了很多,觉得自己很幸运,毕业第一份工作就遇到了谭总,教会了我很多东西,带我见识了很多东西。 入职头条广告系统 怀着对新工作的无限期待与恐惧入职头条,记得自己是3月7号入职,在点名的时候没有点到我,后来查了系统...

门面模式与桥接模式

门面模式与桥接模式的区别

门面模式 门面模式是指通过对内的包装,对外只暴露预定的外观类。在抽象层面,子系统类被包装成一个Fecade类,客户类只需要知道Fecade类,而不需要知道复杂的子系统运作方式。听起来有点像建筑模式(Builder),都是把复杂的内容包装起来,以供简单调用。UML图如下: 优点 客户与系统解耦,客户对子系统的使用更简单; 便于系统的阅读和理解; 子系统单独的修改不会影响到外观...

C++ 右值的前世今生

右值的相关使用方式

问题与现状 现在有如下的代码: #include <stdio.h> //1 class B //2 { //3 }; ...

一致性

最终一致性的理解

本文是摘取了一些Werner Vogels关于最终一致性博客内容进行翻译,并在有些地方重新组织,加上了自己理解。 一致性问题的历史发展 完美的一致性模型是:当做了一个更新操作,所有的观察者将看到这个更新。 在70年代后期的数据库系统,这个完美的一致性模型第一次被认为很难达到。 在90年代中期,随着更大规模的互联网系统的出现,许多之前的实践被修正。人们开始思考有效性可能不是系统...

适配器模式

适配器模式分析与使用

简述 适配器模式(Adapter Pattern)是一种补救模式,将一个类的接口转换成客户希望的另外一个接口,从而使原本由于接口不兼容而不能一起工作的类可以一起工作。 模式结构 UML 结构图(类适配器): UML 结构图(对象适配器): Target(目标接口):所期望得到的接口 Adaptee(适配者):需要适配的类 Adapter(适配器):该模式的核心,具有将 ...

mysql sql语句分析

explain 详解

语法 explain < table_name > explain输出解释 +----+-------------+-------+-------+-------------------+---------+---------+-------+------+-------+ | id | select_type | table | type | possible_keys ...

文件系统

深入了解文件系统结构

文件与文件系统 文件是对磁盘的抽象,就像进程是对CPU的抽象和地址空间是对内存的抽象一样。文件是指一组带标识(标识即为文件名)的,在逻辑上有完整意义的信息项的序列 文件系统是操作系统中统一管理信息资源的一种软件,管理文件的存储,检索,更新,提供可靠安全的共享和保护手段,并且方便用户使用。文件系统实现了名字空间到磁盘空间的映射,影响了整个操作系统的性能 文件分类 普通文件:包含用户...

go 数据类型使用总结

《Go语言学习笔记》第五章总结

字符串 字符串为不可变字节序列,其本身为复合结构: type stringStruct struct { str unsafe.Pointer len int } 其中头部指针指向字节数组,没有NULL结尾,默认以UTF-8编码存储Unicode字符。 字符串的默认值不是nil,而是”” 支持 !=、 ==、 <、 >、+、 += 操作符 允许以...

C++ 编译连接遇到的问题

C++ multiple definition

背景 最近尝试编译C++项目,编译的时候遇到如下报错: .obj/Inotify.o:(.bss+0x0): multiple definition of `EVENT_NAME' .obj/FileServer.o:(.bss+0x0): first defined here .obj/server_main.o:(.bss+0x0): multiple definition of `EV...

分支预测

浅谈分支预测、流水线与条件转移

一个问题 在StackOverflow上有这么一个问题 Why is processing a sorted array faster than an unsorted array?。例子中,对一个数组进行条件求和,在排序前和排序后,性能有很大的差别。原始的例子是C++和Java的,这里将其换成了C# : static void Main(string[] args) { // G...