前言
本博客仅做学习笔记,如有侵权,联系后即刻更改
科普:
Redis
NoSQL技术
- 基于内存的数据库,并且提供一定的持久化功能
Redis和MongoDB是当前使用最广泛的NoSQLRedis
- 它的性能十分优越,可以支持每秒十几万此的读/写操作,
其性能远超数据库,并且还支持集群、分布式、主从同步等配置,原则上可以无限扩展,让更多的数据存储在内存中,更让人欣慰的是它还支持一定的事务能力,这保证了高并发的场景下数据的安全和一致性。- Redis 在 Java Web 主要有两个应用场景:
存储缓存用的数据;
需要高速读/写的场合使用它快速读/写;
MongoDB
应用于各种规模的企业、各个行业以及各类应用程序的开源数据库。
- MongoDB 是专为可扩展性,高性能和高可用性而设计的数据库。
它可以从单服务器部署扩展到大型、复杂的多数据中心架构。利用内存计算的优势,MongoDB 能够提供高性能的数据读写操作。
MongoDB 的本地复制和自动故障转移功能使您的应用程序具有企业级的可靠性和操作灵活性。
Python中的GIL(全局解释器锁)
GIL并不是Python的特性,Python完全可以不依赖于GIL。
- 如果多线程的操作中不是IO密集型,并且计算操作不是原子级的操作时,那么我们需要考虑线程安全问题
- 始终围绕共享可变状态的读取和写入加锁
Python
sort和sorted的区别
- L.sort() 函数只适用于列表排序,而sorted()函数适用于任意可以迭代的对象排序。
- L.sort() 函数排序会改变原有的待排序列表,而sorted()函数则不会改变。所以在使用列表进行排序时,需要考虑是否需要保存原列表,如果无需保存原列表,则优先使用L.sort() 节省内存空间,提高效率。
- 两个函数通过定义 key 和 cmp 都可以完成排序,但是 key 的效率要远远高于 cmp,所以要优先使用 key 。
- 当目标文件夹中只有文件时,我们使用os模块的listdir()方法即可:该方法可以返回目标路径下的文件和文件夹的名字列表,参数就是目标路径。
- os.walk()方法可以生成三元组,也就是我们代码中的filepath,dirnames,filenames,我们将他们分别打印出来可以看到
- 进程
是并发执行的程序在执行过程中分配和管理资源的基本单位,是一个动态概念,竞争计算机系统资源的基本单位。- 线程
是进程的一个执行单元,是进程内科调度实体。比进程更小的独立运行的基本单位。线程也被称为轻量级进程。- 区别
线程共享本进程的地址空间,而进程之间是独立的地址空间。- python在任何时候,只可能有一个线程在执行代码
在Cpython 解释器(Python语言的主流解释器)中,有一把全局解释锁(GIL, Global Interpreter Lock),在解释器解释执行Python 代码时,任何Python线程执行前,都先要得到这把GIL锁。
当一个线程遇到I/O 任务时,将释放GIL
算法
- 前序(根左右),中序(左根右),后序(左右根)
光有前序遍历和后序遍历是无法还原二叉树的。
- 堆排序适合于数据量非常大的场合(百万数据)。
堆排序不需要大量的递归或者多维的暂存数组。这对于数据量非常巨大的序列是合适的。比如超过数百万条记录,因为快速排序,归并排序都使用递归来设计算法,在数据量非常大的时候,可能会发生堆栈溢出错误。
堆排序会将所有的数据建成一个堆,最大的数据在堆顶,然后将堆顶数据和序列的最后一个数据交换。接下来再次重建堆,交换数据,依次下去,就可以排序所有的数据。- 内存空间不足的时候使用归并排序,能够使用并行计算的时候使用归并排序。
总结
小小励志
有些事你现在不做,一辈子都不会做了。
如果你想做一件事,全世界都会为你让路。
《搭车去柏林》