Java AtomicInteger类使用

2019-10-21
阅读 5 分钟
3.2k
这个问题发生的原因是++counter不是一个原子性操作。当要对一个变量进行计算的时候,CPU需要先从内存中将该变量的值读取到高速缓存中,再去计算,计算完毕后再将变量同步到主内存中。这在多线程环境中就会遇到问题,试想一下,线程A从主内存中复制了一个变量a=3到工作内存,并且对变量a进行了加一操作,a变成了4,此时线...

平衡二叉树——AVL

2019-10-05
阅读 2 分钟
2.4k
之前写过的二叉排序树(BST)在插入、删除和查找等基本操作的平均时间为O(logN),但在最坏的情况下,这些基本运算的时间均会增至O(n)(因为退化成了链表)。为了避免这些情况发生,人们研究了许多种动态平衡的方法,使得在树中插入或删除元素时,通过调整树的形态来保持树的“平衡”,使之既保持BST的性质不变又保证树的高...

lex的简单使用

2019-09-30
阅读 4 分钟
4.9k
Lex是lexical compiler的缩写,是Unix环境下非常著名的工具, Lex (最早是埃里克·施密特和 Mike Lesk 制作)是许多 UNIX 系统的标准词法分析器(lexical analyzer)产生程式,而且这个工具所作的行为被详列为 POSIX 标准的一部分。Lex的基本工作原理为:由正则表达式生成NFA,将NFA变换成DFA,DFA经化简后,模拟生成词法分...

Java实现的一个简单HashMap(翻译)

2019-09-01
阅读 8 分钟
4.4k
如何创建Hash表 对于把K(键)-V(值)这样的键值对插入Hash表中,需要执行两个步骤: 使用散列函数将K转换为小整数(称为其哈希码)。 哈希码用于查找索引(hashCode%arrSize),并且首先搜索该索引处的整个链表(单独链)以查找已存在的K。 如果找到,则更新其值,如果不是,则将K-V对存储为列表中的新节点。 复杂性...

二叉搜索树之构建

2019-07-21
阅读 2 分钟
3k
二叉搜索树 二叉搜索树(BST)又叫二叉查找树(Binary Sort Tree),它是一种树型结构,具有如下特征: 若它的左子树不为空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不为空,则右子树上所有结点的值均大于它的根结点的值 它的左、右子树分别为二叉排序树 没有键值相等的节点 设计这样的结构主要是为...

MongoDB副本集搭建

2019-07-13
阅读 3 分钟
2.8k
MongoDB是现在最为流行的NoSQL数据库之一。在大数据时代,传统的关系型数据库遇到了高并发读写、海量数据高效存储、高可扩展性和高可用性这些难题。以MySQL为例,在数据量很大需要分表分库的时候,它本身不提供分片能力,需要自己另建服务。 而NoSQL就是为了解决这些问题而诞生了的。注: NoSQL(NoSQL = Not Only SQL )...

RabbitMQ三四事

2019-05-19
阅读 5 分钟
5.1k
对于非常健壮稳定的后台系统,我们必须得考虑到各种宕机的情况:物理宕机,应用自身出错崩溃等,而这个时候我们的应用需要做到重启后数据依旧不丢失,这个问题就是数据持久化,也就是说数据持久化到了磁盘。在RabbitMQ中,如果要保证消息发送到broker,我们首先需要做到三点

一个导出小工具

2019-04-01
阅读 1 分钟
2.7k
说明 一个导出QQ群成员信息的工具 使用 双击QunExporter.exe,会打开[链接]页面(利用CEF项目),登录QQ账号,软件获取登录信息 点击获取群列表按钮,之后即可导出群成员信息 下载源码

RabbitMQ二三事

2019-03-28
阅读 2 分钟
3.8k
RabbitMQ简单理解就是一个队列服务,我们的生产者不断地往它投递消息,而消费者不断地从它那里获取消息。但相较于利用redis的List这类简单队列,RabbitMQ的消息投递更灵活一点。首先需要知道一些RabbitMQ中的通信概念:

二叉树的基本运算2

2019-02-13
阅读 3 分钟
2.8k
这一篇是接上一篇文章二叉树的基本运算 二叉树的遍历 二叉树遍历分为三种:前序、中序、后序(取决于根节点): 前序遍历:根结点 -> 左子树 -> 右子树 中序遍历:左子树 -> 根结点 -> 右子树 后序遍历:左子树 -> 右子树 -> 根结点 另外还有一种层次遍历,即每一层都从左向右遍历。譬如,对于下面的二...

在Ubuntu上快速安装单机版Kubernetes

2018-08-25
阅读 7 分钟
13.8k
Kubernetes是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。

写一个引导程序(boot loader)(翻译)

2018-07-07
阅读 2 分钟
5.5k
首先,你需要安装NASM汇编器和QEMU来模拟一个虚拟机。用QEMU很好,因为我们不用担心有时候不小心写了烂的OS代码而把硬件给搞坏了;) 。在win 10的wsl或Ubuntu上你可以用这个命令来安装它们(之前可以用sudo apt-get update更新一下软件源):

Thinking——C模拟Exception

2018-06-26
阅读 2 分钟
2k
C中没有exception,所以我们可以用函数返回值来判断错误类型。但有时候又希望在顶层能统一处理错误,让代码更简洁一点。其实第一个想到的可能是goto语句,但是goto不能跳转到另一个函数的某个label,不过C提供了另外两个函数来完成这个任务:setjmp 和 longjmp。

Thinking——斐波拉契数列不用递归

2018-05-29
阅读 3 分钟
3k
这个数列生成规则很简单,每一项都是前两项的和,举例1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233……用数学符号来描述更好

Thinking——nodejs实现的SEO相关的库

2018-03-29
阅读 3 分钟
3.5k
SEO是为了网站在搜索引擎中的自然排名更靠前,引入更多的用户流量。SEO有很多技巧,譬如官网多发优质文章,文章的url做成静态化,文章多出现一些搜索相关的关键字,自建站群等等。

Thinking——Debian On Windows初试

2018-03-27
阅读 1 分钟
2.5k
Windows Subsystem for Linux(简称WSL)是一个为在Windows 10上能够原生运行Linux二进制可执行文件(ELF格式)的兼容层。它是由微软与Canonical公司合作开发,目标是使纯正的Ubuntu 14.04 "Trusty Tahr"映像能下载和解压到用户的本地计算机,并且映像内的工具和实用工具能在此子系统上原生运行。

Thinking——glide在windows上的一个bug

2018-03-13
阅读 1 分钟
4.5k
glide是Go的一个依赖管理工具(非官方的),我下载了0.13.1这个Release版本,然后发现在windows上执行glide install后出错

Just for fun——C#应用和Nodejs通讯

2018-02-23
阅读 2 分钟
8.2k
进程通信常见的进程通讯的方法有:管道(Pipe)命名管道信号消息队列其他管道是比较简单基础的技术了,所以看看它。Node IPC支持Node官方文档中Net模块写着:IPC SupportThe net module supports IPC with named pipes on Windows,and UNIX domain sockets on other operating systems.Class: net.ServerAdded in: v0.1....

Just for fun——Slim借力Swoole

2018-01-31
阅读 7 分钟
6.9k
Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs. At its core, Slim is a dispatcher that receives an HTTP request, invokes an appropriate callback routine, and returns an HTTP response. That’s it.

Just for fun——PHP7扩展编写中的宏

2018-01-25
阅读 7 分钟
3.1k
PHP内核架构 SAPI是PHP的最上层,它是PHP的应用接口层,对于源码目录为sapi main是PHP的主要代码,主要是输入/输出,Web通信,以及PHP框架的初始化操作,对于源码目录为main ZendVM是PHP解释器的主要实现,即ZendVM,对于源码目录为Zend 截一张php-src的图,目录都有对应 PHP的生命周期 PHP根据不同SAPI的实现,各阶段的...

Just for fun——基于Swoole做个小框架

2018-01-19
阅读 3 分钟
4.5k
使 PHP 开发人员可以编写高性能的异步并发 TCP、UDP、Unix Socket、HTTP,WebSocket 服务。Swoole 可以广泛应用于互联网、移动通信、企业软件、云计算、网络游戏、物联网(IOT)、车联网、智能家居等领域。 使用 PHP + Swoole 作为网络通信框架,可以使企业 IT 研发团队的效率大大提升,更加专注于开发创新产品。

Just for fun——Docker做个NMP环境

2018-01-14
阅读 5 分钟
6.6k
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

Just for fun——Nginx配Lua写个hello world

2017-12-06
阅读 2 分钟
3.7k
可扩展性:Lua的解释器是100%的ANSI编写的,它提供了非常易于使用的扩展接口和机制,所以Lua的脚本很容易的被C/C++ 代码调用,也可以反过来调用C/C++的函数

Just for fun——PHP框架之简单的路由器(2)

2017-11-20
阅读 6 分钟
2.2k
改进 紧接上一篇文章Just for fun——PHP框架之简单的路由器(1)。代码下载 效率不高原因 对于以下合并的正则 {代码...} 最终匹配的是分组中的某一个,我们需要的子匹配也是那个分组中的,然而从结果看 {代码...} 这里是最后一个路由被匹配了,但是其他分组的子匹配也被填充了,这是多余的。 解决思路 PCRE正则里?|也是非...

Just for fun——迅速写完快速排序

2017-11-15
阅读 4 分钟
2.6k
快速排序快速排序的话,应用了分治的思想,选取一个中间值,把小于它的值放左边,大于它的值放右边,然后再对这两个分组应用同样的方法,递归下去。挖坑挖坑是自己快速回忆实现这个算法的形象叫法。如果现在有数组 {代码...} 挖出第一个位置的值,存起来,现在有一个空的坑位了,需要填上刚开始的时候,i指向初始的位置...

Just for fun——PHP框架之简单的路由器(1)

2017-11-12
阅读 9 分钟
5.1k
对于有占位符的路由,正确调用callback时传入占位符参数,譬如对于路由:/user/{id},当请求为/user/23时,传入参数$args结构为

Just for fun——go实现一下观察者模式

2017-11-12
阅读 2 分钟
4.5k
代码 {代码...} 测试 输出 {代码...}

Just for fun——PHP框架之简单的模板引擎

2017-11-11
阅读 2 分钟
3.9k
原理 使用模板引擎的好处是数据和视图分离。一个简单的PHP模板引擎原理是 extract数组($data),使key对应的变量可以在此作用域起效 打开输出控制缓冲(ob_start) include模板文件,include遇到html的内容会输出,但是因为打开了缓冲,内容输出到了缓冲中 ob_get_contents()读取缓冲中内容,然后关闭缓冲ob_end_clean(...

Just for fun——用Node写一个简单压测的脚本

2017-11-03
阅读 2 分钟
2.9k
async和await Async/Await应该是最简单的异步解决方案了。举个例子,写个暂停功能: {代码...} 控制台先输出start,稍等3秒后,输出了end。 代码 {代码...} 说明 concurrency量可以设置并发请求次数 测试

Just for fun——C/C++函数返回局部变量的问题

2017-10-23
阅读 2 分钟
3.4k
一般来说,在函数内对于存在栈上的局部变量的作用域只在函数内部,在函数返回后,局部变量的内存已经释放。因此,如果函数返回的是局部变量的值,不涉及地址,程序不会出错;但是如果返回的是局部变量的地址(指针)的话,就造成了野指针,程序运行会出错,因为函数只是把指针复制后返回了,但是指针指向的内容已经被释...