一文理解Flask Web开发

Flask作为Python语言中最为轻量的Web框架, 由于其核心内容的简洁以及良好的可拓展性, 一直受到广泛的开发者所喜爱。 对比于Django, Flask并没有”我给你的就是最好的, 别管那么多, 拿着用就好”的思想, 而是让开发者自己做出选择, 自己设计开发一个组件, 或者挑选一个你喜欢的第三方库。 »

那些有趣的数据结构与算法(02)--Bitmap

在我刚接触Python这门开发语言时, 并没有想用它做Web后端开发, 而是拿来写爬虫。 第一个接触的爬虫框架就是Scrapy。 网络爬虫绕不开的一个话题就是URL去重问题。 在Scrapy原生框架下, 使用的是集合来对URL进行去重的。 集合本身采用哈希表实现, 是一种典型的以空间换时间的数据结构, 当URL数量极为庞大时, 使用这种策略的去重很有可能导致内存溢出而造成服务器宕机的问题。 此时, Bitmap走进了我的视线。 »

Redis基本数据结构与实现

Redis内置了5种对外开放的数据结构, 分别是字符串, 列表, 集合, 有序集合以及哈希对象。 每一种数据结构的底层实现都会由存入的数据产生动态变化, 这也是Redis具有极佳吞吐量的原因之一。 本篇文章主要描述其基本数据结构的实现以及这些结构在使用时的注意事项。 »

分布式系统基础学习(04)--Nginx

Nginx不管是在单机部署还是在集群部署下, 都起着非常重要的作用。 底层由C语言编写, 并且采用事件驱动模型对Socket连接进行管理, 所以有着非常高效的请求处理能力, 并且支持海量的并发。 本篇文章不会对Nginx的底层原理进行深究, 而是整理自己在工作中所遇到的一些问题和积累的经验。 »

分布式系统基础学习(03)--消息队列(RabbitMQ)

消息队列常常被用于跨进程通信, 异步调用, 系统解耦以及流量削峰等场景下。 目前市场上的消息队列种类繁多, 有LinkedIn开源的kafka, 阿里开源的RocketMQ, 以及使用较为广泛的RabbiMQ。 Redis虽然也可以做消息队列, 但是更多的是用来做缓存和其它工具使用。 但是随着Redis 5.0 版本的发布, Redis的功能越来越丰富, 也不排除在未来的某一天也能够占据消息队列的重要一席。 »

分布式系统基础学习(02)--应用间通信(gRPC)

我始终认为, 随着语言和计算机技术的发展, 分布式系统才是互联网技术的未来。 而现在众多的分布式开源技术, 如Zookeper, SpringCloud等的蓬勃发展也证明这一点。 在分布式的系统中, A服务可能由Java编写, B服务可能由Python编写, C服务可能由PHP编写, 服务于服务之间的通信固然可以使用HTTP协议以RESTful-API的方式进行通信, 但是由于许多不必要的数据传输, 例如HTTP请求头, 会降低服务之间的通信速度, 在高并发的场景下极有可能成为系统瓶颈。 所以, 就有了RPC通信机制。 »

分布式系统基础学习(01)--通信(TCP/UDP)

分布式系统是一个很庞大的话题, 在我个人的知识版图中, 也仅仅只是对一小部分土地进行了开荒。 不管是分布式系统, 还是单机应用系统, 都是建立在互联网通信机制之上的。 而提到通信, 就不得不提到TCP/UDP这两个非常经典的协议。 »

Java并发编程(07)--锁

锁在并发编程中可以说是必须使用的一种资源保护技术, 而且是一种及其庞大且复杂的技术, 随着计算机学科的发展, 锁技术同样的在不断的发展和优化。 作为一个开发者, 当然无法直接深入到CPU的最底层去理解锁的原理, 但是通过一些其它的手段可以间接的理解锁的原理以及运行机制。 本篇文章进行一个现阶段的总结, 整理一下所学的全部关于锁的知识, 涉及的编程语言包括Python和Java, 应用包括MySQL以及Redis, 如有错误, 还请指正。 »