SQLAlchemy在Flask中的应用

记录SQLAlchemy在Flask中的应用

阅读全文

使用ORM进行快速开发

对象关系映射(ORM)可以建立类和数据库表直接的映射,一个类实例可以映射到这张表中的一个行。通过这样的模型,直接在编程语言层面对对象的操作就可以映射到对数据库管理系统(RDBMS)的操作。从开发的角度看,ORM免去了编写各种tables和CRUD SQL语句的麻烦。

阅读全文

函数式链表

链表似乎是数据结构中最简单,使用过程式语言实现链表的思路一般是:定义结点,通过指针把结点连接起来。然后在这链表上通过大量的指针操作实现插入、删除、定位等功能,甚至,在链表上添加一层抽象,把添加head、tail、len变量分别快速确定头结点、尾结点和链表长度。实践表面,这是一种高效的方法。但如果换个思路,实现链表就马上变得困难了—使用函数式,难点在于结点和结...

阅读全文

实现一个简单的协程调度器

协程是用户空间线程又叫绿色线程,使用协程的好处是可以实现自己的协程调度器,另外是协程非常轻量。但由于协程对操作系统是透明的,所以协程无法实现真正的并行运行。因此协程通常用于I/O密集性的处理。那么如何实现一个协程调度器呢?这就是本文的话题。

阅读全文

基于Redis的自动补全算法

使用Redis实现搜索引擎的自动补全功能

阅读全文

Go语言中的迭代器

上篇写到C语言中的迭代器,今天写写Go语言中实现迭代器模式的方法。Go语言称为next C,在实现迭代器上,完全可以使用C语言中的思路,语法上更简练。但这里不使用这种经典的方式,而是使用Go语言本身带有的特性。我们会使用它的channel特性、goroutine特性和闭包特性。为了简单表达,这里的实现依旧使用双链表,如果要迭代更复杂的数据结构,比如树型结构...

阅读全文

C语言中迭代器在数据结构中的应用

C语言中,为给定数据结构设计迭代器的思路。

阅读全文

C语言中的迭代器

C语言中的迭代器的实现方式。

阅读全文

ACID和BASE对比

说到关系型数据库的事务我们一定会想到ACID特性,在实际开发发现ACID特性的约束太大了。例如在分布式情景下,C 一致性(Consistent)往往要牺牲性能为代价,同时又有CAP的约束(CAP可参看谈谈CAP定理)。实际的业务可能对性能要求很高或者业务对数据不需要强一致性。这样,我们可以考虑系统的BASE特性。今天就细聊ACID、BASE及其对比。

阅读全文

LRU算法的优化

常见的LRU算法的实现方式是:一条双链表+HashMap。旧文LRU算法的实现(Python版)和Go实现LRU算法、LRU算法的实现(Java版)讨论和实现过LRU算法。采用的思路都是一条双链表以时间戳大小排序组织排序数据,HashMap快速定位根据键指定的数据。 忽略实现的具体编程语言,这样的实现思路在特性场景下是有问题的。今天就来讨论如何优化LRU算法...

阅读全文

数据库并发控制的实现原理

介绍数据库的并发控制原理。

阅读全文

常用正则表达式

常用正则表达式

阅读全文

二叉搜索树转换成排序双向链表

遇到一道有趣的问题:把二叉搜索树转换成排序的双向链表。分享下思路,感受转换过程的优雅。先前写过二叉树的遍历和二叉树迭代器和二叉搜索树的原理、实现和应用。通过这两篇文章马上可以得到思路。 思路:建立二叉搜索树,为其添加中序遍历迭代器,迭代二叉树,树结点以键有序输出,把结点的left指针看做是链表结点prev指针,类似地,结点right指针看做是链表结点next...

阅读全文

基于CAS实现线程安全的单例模式

之前写到基于CAS实现的锁,也写过各类语言实现单例模式,其中包括线程安全的实现和线程不安全的实现。线程安全的实现大致思路都是加锁,其中性能较好的是double-check的加锁方法。另外对于Java可以使用synchronized实现封锁,它本质上也是使用了锁;还有一类方式是使用静态内部类,由于类的加载机制,这样实现的单例模式也是线程安全的。类的加载机制也是...

阅读全文

基于CAS实现的锁

好久没有更新博客了,这两个月发生的几件事情耽误了很多计划,现在总算慢慢步入正轨…今天写写平时在并发编程中使用锁的实现原理。本文以Java和Go语言为例。 Java和Go语言中的锁都是基于CAS实现,CAS就是比较和交换(Compare And Set)这是一个原子过程,需要硬件层面提供支持,在汇编上涉及核锁。 Java中java.util.concurren...

阅读全文

Java中各种Lock的使用

介绍几种锁的基本使用。

阅读全文

Java线程间通信

Java线程间通信

阅读全文

LRU算法的实现(Java版)

前文写到Go和Python实现LRU算法及LRU算法的相关讨论,本文讲述使用Java实现LRU算法。Java自带的集合框架非常强大,实现LRU算法可以直接使用LinkedHashMap集合框架。关于LRU算法的原理见Go实现LRU算法 ,Python实现的LRU算法见LRU算法的实现(Python版)。 实现首先我们谈谈LinkedHashMap。它的一个...

阅读全文

谈Go装饰器及其应用

Python的一个重要语法特性是装饰器,它本身还提供了’@’这样优雅的语法糖使用装饰器。装饰器本质上是闭包的一个应用。Go支持闭包,也就可以说Go也支持装饰器,只是Go编译器提供的“糖”太小了,不能像Python一样优雅地使用装饰器。但,这并不阻碍我们使用装饰器这个方便的特性。

阅读全文

Go实现LRU算法

LRU算法是一种页面置换算法。常见的页面置换算法包括:random、FIFO、LRU、LFU。 采用随机random的置换算法效率并不好,没有利用好页面置换调度序列的信息,更加没有考虑程序的局部性原理。 FIFO实现简单,但没有利用好程序的局部性原理,会出现Belady现象。Belady现象指系统分配的页面数增加了,可是缺页率依然在增加。可以配合程序的局部性...

阅读全文