- 博客(35)
- 问答 (1)
- 收藏
- 关注
原创 C++输出一个空心梯形
C++输出一个空心梯形// day05.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。//#include <iostream>int main(){ int n = 0; printf("请输入一个数值:"); scanf("%d", &n); int nCount = n + 1; int nSpace = n + 1; for (int i = 0; i < n; i++) { for (int k = 0;
2022-02-02 19:11:35 1121
原创 短网址系统设计与实现
把一个长网址转成短网址的服务比如https://bitly.com/转换之后网址的后缀不超过7位(字符或者数字)关于系统设计的第一个要素:场景和限制使用场景:提供短网址服务位公司其它各业务服务功能:一个长网址转成短网址并存储;根据短网址还原长url要求短网址的后缀不超过7位(大小写字母和数字 )在https://bitly.com/中 的qps中预估峰值插入请求数...
2019-10-12 17:49:00 421
原创 什么是RESTful
Representational State Transfer表现层状态转移,由HTTP协议的主要设计者Roy Fielding提出资源(Resources),表现层(Representation),状态转化(State Transfer)是一种以资源为中心的web软件架构风格,可以用Ajax和RESTful web服务构建应用资源(Resources):使用uri指向的一个...
2019-10-12 15:45:48 86
原创 常用Python Web框架对比
Django:大而全,内置ORM,Admin等组件,第三方插件Flask:微框架,插件机制,比较灵活Tornado:异步支持的微框架和异步网络库什么是MVC?M:模型Model 负责业务对象和数据库的交互(ORM)V:视图View 负责与用户的交互展示C:控制器Controller 接受请求参数调用模型和视图完成请求解耦数据,展示和...
2019-10-12 15:03:25 224
原创 使用缓存的模式
缓存的使用场景;Redis的使用;缓存使用中的坑缓存使用问题:数据一致性问题;缓存穿透,击穿、雪崩问题常用的缓存使用模式Cache Aside:同时更新缓存和数据库Read/Write Through:先更新缓存,缓存负责同步更新数据库Write Behind Caching:先更新缓存,缓存定期异步更新数据库如何解决缓存穿透问题?大量查不到的数据的请求落到...
2019-10-12 11:29:28 93
原创 Redis持久化方式
快照方式:把数据快照放在磁盘二进制文件中,dump.rdbAOF(Append Only File):每一个写命令追加到appendonly.aof中可以通过修改Redis配置实现什么是redis事务?和Mysql的事务有什么不同?将多个请求打包,一次性,按序执行多个命令的机制Redis通过MULTI,EXEC,WATCH等命令实现事务功能Python re...
2019-10-07 18:24:32 70
原创 缓存Cache
为什么要使用缓存什么是缓存?数据交换的缓冲区(称作Cache),当某一硬件要读取数据时,会首先从缓存中查找需要的数据,如果找到了则直接执行,找不到的话则从内存中找常用的缓存右Redis和Memcached缓解关系数据库(常见的是Mysql)并发访问的压力:热点数据减少响应时间:内存IO速度比磁盘块提升吞吐量:Redis等内存数据库单机就可以支撑很大的并发...
2019-10-07 17:45:55 193
原创 sql语句常用连接
sql语句常用连接内连接(INNER JOIN):两个表都存在匹配时,才会返回匹配行外链接(LEFY/RIGHT JOIN):返回一个表的行,及时另一个没有匹配全连接(FULL JOIN):只要某一个表存在匹配就返回内连接将左表和右表能够关联起来的数据连接后返回类似于切两个表的"交集" 这样比喻可能不够且当,但是可以这样理解select * from A ...
2019-10-07 16:57:39 154
原创 mysql索引
什么是 索引?为什么需要索引?索引是数据表中一个或者多个列进行排序的数据结构索引能大幅提升检索速度创建,更新索引本身也会耗费空间和时间什么是B-Tree?查找结构的进化史线性查找:一个个找,实现简单;缺点:太慢二分查找:有序,简单,缺点:要求是有序的,插入特别慢(插入最后一个数据还好,如果在第一个数据后面插入就会造成后面 的数据都向后移动一位...
2019-10-07 16:38:19 87
原创 mysql数据库基础
什么是事务?事务是数据库并发控制的基本单位事务可以看作是一系列的SQL语句集合事务必须要么全部执行成功,要么全部执行失败(回滚)事务的ACID特性ACID是事务的四个基本特性原子性(Atomicity):一个事务中所有操作全部完成或者失败一致性(Consistency):事务开始和结束之后数据完整性没有被破坏隔离性(Isolation):允许多个事务同时对数...
2019-10-07 15:37:03 72
原创 Python并发网络库
Toenado Gevent AsyncioTornado并发网络库同时也是一个web微框架Gevent绿色线程(greenlet)实现并发,猴子补丁修改socketAsyncio Python3内置的并发网络库,基于原生协程Tornado适用于微服务,实现Restful接口低层基于Linux多路复用在python2中可以通过携程或者回调实现异步编程不过生态不完...
2019-10-07 14:53:11 160
原创 Unix 网络编程中提到5种网络类型
Unix 网络编程中提到5种网络类型Blocking IO 阻塞式IONonblocking IO 非阻塞式IOIO multiplexing 多路复用技术Signal Driven IO 信号驱动IOAsynchronous IO 异步IO如何提升服务器并发能力?一般常见的提升并发能力的方式多线程模型,创建新的线程处理请求多进程模型,创建新的进程处理...
2019-10-07 11:48:22 143
原创 如何使用socket发送http请求
import sockets =socket.socket()s.connect(('www.baidu.com',80))http = b"GET / HTTP/1.1\r\nHost:www.baidu.com\r\n\r\n"s.sendall(http)buf = s.recv(1024)print(buf)s.close()
2019-10-06 21:26:02 414
原创 HTTP
GET 获取POST创建PUT更新DELETE删除HTTP GET/POST的区别Restful语义上一个是获取,一个是创建GET是幂等的,POST是非幂等的(创建的时候会影响数据库)GET请求参数放到url(明文),长度限制;post放在请求体,更安全什么是幂等?哪些HTTP方法是幂等的幂等方法是无论调用多少次都能得到相同结果的HTTP方法例如...
2019-10-06 19:39:17 89
原创 HTTP常见状态码
1** 信息。服务器收到请求,需要请求者继续执行操作2**成功。操作被成功接收并处理3**重定向。需要进一步操作完成请求4**客户端错误。请求有语法错误或者无法完成的请求5**服务器错误。服务器在处理请求的过程中发生错误牢记常见状态码的含义(220,301,302,400,403,500)200表示成功301表示永久重定向302表示临时重定向400请求错误4...
2019-10-06 19:05:58 78
原创 操作系统内存管理机制
什么是分页机制操作系统为了高效管理内存,减少碎片逻辑地址和物理地址分离的内存分配管理方案程序的逻辑地址划分为固定大小的页(Page)物理地址划分为同样大小的桢(Frame)通过页表对应逻辑地址和物理地址什么是分段机制数据共享,数据保护,动态链接等通过段表实现逻辑地址和物理地址的映射关系每个段内部是连续的内存分配,段和段之间是离散分配的...
2019-10-06 16:49:52 681
原创 Python如何使用多线程
threading模块threading.Thread类用来创建线程start()方法启动线程可以用join()等待线程结束Python如何使用多线程?Python中有GIL(全局解释器锁),可以用多进程实现cpu密集程序multiprocessing多进程模块Multiprocessing.Process类实现多进程一般用在cpu密集程序里,避免...
2019-10-06 16:20:47 97
原创 进程与线程的对比
进程是对运行时程序的封装,是系统资源调度和分配的基本单位线程是进程的子任务,cpu调度和分配的基本单位,实现进程内并发一个进程可以包含多个线程,线程依赖进程存在,并共享进程内存什么是线程安全一个线程修改被另外一个线程覆盖Python哪些操作是线程安全的?一个操作可以在多线程环境中安全使用,获取正确的结果线程安全的操作好比线程是顺序只想而不是并发执行(i+=1这个是...
2019-10-06 16:10:58 141
原创 Linux常用命令
man命令查询方法,但是man方法比较晦涩,看起来不是太直观。使用工具自带的help 比如pip --help这里介绍一个man的替代工具tldr。pip install tlar常见的文件操作工具chown/chmod/chgrpls/rm/cd/cp/mv/touch/rename/ln(软连接和硬链接等)locade/find/grep定位查找和搜索...
2019-10-06 15:46:19 73
原创 python支持部分函数式编程特性
把电脑的运算视作数学上的函数计算(lambda演算)高阶函数:map/reduce/filter无副作用,相同的参数调用始终产生同样的效果map的用法-------------------------------------------------------------------------------------------------------------...
2019-10-05 21:29:23 232
原创 Python行为型设计模式
迭代器模式(Interator):通过统一的接口迭代对象观察者模式(Observer):对象发生改变的时候,观察者执行相应的动作策略模式(Strategy):针对不同规模输入使用不同的策略------------------------------------------------------------------------------------迭代器模式Pyth...
2019-10-05 21:05:57 1301
原创 Python结构型模式
常见结构型设计模式装饰器模式(Decorator):无需子类化扩展对象功能代理模式(Proxy):把一个对象的操作代理到另一个对象适配器模式(Adapter):通过一个间接层适配统一接口外观模式(Facade):简化复杂对象的访问问题享元模式(Flyweight):通过对象复用(池)改善资源利用,比如连接池Model-View-Controller(MVC):解耦展示逻辑和...
2019-10-05 20:45:05 216
原创 python创建型模式
常见创建型模式工厂模式(Factory):解决对象创建问题构造模式(Builder):控制复杂对象的创建原型模式(Prototype):通过原型的克隆创建新的实例单例(Borg/Singleton):一个类只能创建同一个对象对象池模式(Pool):预先分配同一类型的一组实例惰性计算模式(Lazy Evaluation):延迟计算(python的property)...
2019-10-05 20:24:48 298
原创 什么是装饰器
python中一切皆对象,函数也可以当做参数传递装饰器是接收函数作为参数,添加功能后返回一个新函数python通过@使用装饰器------------------------------编写一个记录函数耗时的装饰器import timedef log_time(func): def _log(*args, **kwargs): beg...
2019-10-05 19:07:38 183
原创 二叉树
二叉树的遍历方法都是相对根说的先序 就是先处理根,然后左子树,最后右子树中序 就是先左子树,中间处理根,最后右子树后序 就是先左子树,然后右子树,最后处理根堆其实是完全二叉树,有最大堆和最小堆最大堆:对于每个非叶子节点V,V的值都比它的两个孩子大最大堆支持每次pop操作获取最大的元素,最小堆获取最小元素用堆来完成topk问题,从海量数字中寻找最大的K个im...
2019-10-01 18:34:07 135 1
原创 python中的字典与集合
dict/set 底层都是哈希表哈希表其实就是一个数组根据哈希函数快速定位一个元素,平均查找O(1) 非常快不断加入元素会引起哈希表重新开辟空间,拷贝之前的元素到新数组解决哈希冲突的方法有链接法和探查法(开放寻址法),在python中采用二次探查法...
2019-10-01 17:37:12 76
原创 栈(stack)是先进后出结构
使用Python list 或者 collectionsdeque实现栈的先进后出from collections import dequeclass Stack: def __init__(self): self.deque = deque() def push(self, value): return self.deque.appe...
2019-10-01 17:29:41 507
原创 数据结构之队列
队列是先进先出结构python是使用list或者collections.deque实现队列from collections import dequeclass Queue: def __init__(self): self.items = deque() def append(self, value): return self.it...
2019-10-01 17:07:24 50
原创 链表的反转
class Solution: def reverses(self,head): pre = None cur = head while cur: nextnode=cur.next cur.next=pre...
2019-10-01 16:30:26 54
原创 Python list/tuple的区别
都是线性结构,支持下表访问list是可变对象,tuple保存的是引用不可变(tuple中保存的list这里面的list可变)。list没法作为字典的key,tuple可以(可变对象不可hash)什么是LRUCacheLeast-Recently-Used替换掉最近最少使用的对象缓存剔除策略,当缓存空间不够用的时候需要一种方式剔除key常见的有LRU,LFU等...
2019-09-29 16:13:42 63
原创 Python dict的底层结构
dict底层使用的哈希表 为了支持快速查找使用哈希表作为底层结构 哈希表平均查找时间复杂度O(1) CPython解释器使用二次探查解决哈希冲突问题哈希表是如何解决哈希冲突的 常见的有链接法和探查法 探查法又分为线性探查和二次探查哈希表是如何扩容的 哈希表其实就是一个数组...
2019-09-29 15:40:35 414
原创 python单元测试
针对程序模块进行正确性检验一个函数,一个类进行验证自底向上保证程序正确性为什么要写单元测试三无代码不可取(无文档,无注释,无单元测试)保证代码逻辑的正确性(甚至有些采用测试驱动开发(TDD))单测影响设计,移测的代码往往是高内聚低耦合的,往往写的越好的代码越容易测试回归测试,防止改一处整个服务不可用单元测试相关的库nose/pytest较为常用...
2019-09-25 15:46:48 55
原创 python的生成器和协程序
生成器(Generator)就是可以生成值的函数,当一个函数里有了yield关键字就成了生成器,生成器可以挂起执行并且保持当前的状态。举个例子:def simple_gen(): yield 'hello' yield 'world'gen = simple_gen()print(type(gen)) #'genera...
2019-09-25 15:17:50 106
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人