自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(33)
  • 收藏
  • 关注

原创 程序员后端学习路线大体了解

GitHub上比较火的路线对勾颜色标志紫色:强烈建议学习绿色:备选方案,选择这个学习或是绿色灰色:路线图中的顺序不严格(随时学习)可作为进阶纯灰色:不建议学习,过时第一部分:Internet(网络部分)1.整个互联网网络怎样运行的。(计算机网络)计算机网络中基础概念:五层协议,HTTP,浏览器,DNS每一层的所做的事情,要搞清楚。2.什么是HTTP–HTTPS(学习前端必须了解的协议,后端也需要学习)3.浏览器是怎么工作的(前端所需要了解的,后端也需要了解)什么是DNS,什么是域名

2021-07-01 22:17:36 3546 1

原创 剑指offer(jz41--jz50)

jz41 和为S的连续正数序列描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列?思路暴力解法:遍历两遍数组,穷举找到所有的序列。优化解法(滑动窗口):考虑到序列是连续的,可以维护一个两个指针,计算序列值,终止条件是序列的中间数

2021-06-24 08:32:14 285

原创 运输层协议TCP与UDP

地位:运输层向它上面的应用层提供通信服务,属于面向通信部分的最高层,同时也是用户功能最低层。存在:当网络的边缘部分的两台主机进行端到端的通信时,只有主机的协议栈才有运输层,网络核心的路由器转发分组时都只能用到下三层的功能。存在的必要:网络层只能把信息传送到对应的主机上,但根本上通信的是主机之间的进程,只有网络层无法送到准确的进程。所以需要运输层掌控端到端即应用进程之间的通信。运输层重要功能:复用和分用。复用:一台主机上的进程要与其他主机进程通讯,都要经过同一个运输层协议。分用 :主机接收到的数据都

2021-06-23 11:26:18 357

原创 剑指offer(jz31--jz40) python!!

jz31 整数中1出现的次数(从1到n整数中1出现的次数)描述输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数例如,1~13中包含1的数字有1、10、11、12、13因此共出现6次思路直接方法:把1-n个数字拼接成一个字符串,遍历出1的个数,最简单直接的方法。时间复杂度接近于kn。基本可行代码如下:def jz31(s): count=0 t='' for i in range(len(s)): t+=str(i) for j in t: if j=='1':

2021-06-23 07:30:01 406

原创 网络层IP地址与数据链路层MAC地址

区别:从体系结构来看,MAC地址是属于数据链路层和物理层使用的地址IP地址是网络层及以上的各层使用的地址,是一种逻辑地址。IP地址是用软件实现的。在通信线路上进行传输的是MAC帧,运输首先看的是MAC帧。从主机1向主机2发送,无论中间发生了什么事,源ip地址和目标ip地址始终不会改变,改变的是物理地址。细节:(1)在ip层抽象的互联网上只能看到ip数据报。(2)ip数据报有具体的ip地址,但路由器只根据网络号进行路由选择(3)局域网的链路层,只能看见MAC帧。(4)尽管各个网络的硬件体系不同,

2021-06-22 15:06:08 3572

原创 剑指offer(jz21--jz30)

jz21 栈的压入弹出序列描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)思路分析创建一个栈,进行进栈操作,同时进行出栈的判断,最后判断栈里是否还有元素,以此判断是否是出栈顺序。判断条件就是栈是否为空。代码如下:def solution(pu

2021-06-22 06:52:32 212

原创 运输层安全协议---SSL与TLS

SSL作用在端系统应用层的HTTP和运输层之间,在TCP上建立起一个安全通道,为通过TCP传输的应用层数据提供安全保障。SSL2.0/3,0 TLS1.0/1.1/1.2未使用SSL时,应用层的数据是通过TCP套接字与运输层进行交互。SSL应该是运输层协议,但实际上,HTTP把SSL驻留在应用层,在应用层的下面加上了一层SSL子层,之间有一个SSL套接字,是两者之间的编程接口API。SSL应用广泛,最常见的是用在HTTP上。TCP的HTTPS端口号是443.大致流程:浏览器先建立TCP连接,先

2021-06-21 16:59:54 511

原创 网络层提供的两种服务

计算机网络领域,网络层应该怎么向运输层提供服务,是面向连接还是无连接?争论的实质就是,计算机通讯中,可靠交付应当由谁来负责,是网络还是端系统?传统电信网的主要业务是提供电话服务,面向连接的通信方式。部分人希望两台计算机之间先建立连接,建立一条虚电路。这样减少开销,不用记录主机的地址,只需要记住虚电路的编号。电话机适合这种虚电路,因为电话机没有差错处理能力,只能端对端进行传输,保障语音通话质量。互联网可以采用这种方式,但造价比较比较贵,(交换机)。为了降低造价,让运行方式更加灵活。采用无连接,简单灵活,

2021-06-21 12:06:17 177

原创 剑指offer(jz11--jz20)

jz11 二进制中1的个数描述输入一个整数,输出该数32位二进制表示中1的个数。其中负数用补码表示。思路把整数n当做一个而二进制数,每次与n-1做按位与操作,再每次把n向右移动一位。代码如下:def solution(n): count=0 while n!=0: count+=1 n=n&(n-1) return count比较讲究技巧。还有除2取模法。二进制移位法。jz12 数值的整数次方描述给定一个double类型的浮点数base和int类型的整数expon

2021-06-21 07:33:17 1949

原创 剑指offer(jz1--jz10)

jz1 二维数组中的查找描述在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。[[1,2,8,9],[2,4,9,12],[4,7,10,13],[6,8,11,15]]给定 target = 7,返回 true。给定 target = 3,返回 false。思路根据数组的特点,一行递增,一列递增。要查找数字是否在该数组中,遍历是暴力解法。由于

2021-06-20 11:22:57 183

原创 总结Python中涉及的面向对象技术(OOD)

OOD基本概念1.类:一种描述具有相同的属性和方法的集合2.封装:通过集成在一起形成类,让使用者通过外部接口访问内部的内容,比如属性和方法。3.多态:通过类生成的对象,有着不同的形态。4.继承:可以被其他类进行继承,同样继承其方法和属性。类的声明与定义下面创建一个类:class Yanshi(object): def __init__(self,*args): passinit 方法进行创建实例的初始化,并绑定属性到类的实例上。calss Yanshi: def __init__

2021-06-19 21:29:01 676

原创 Linux常用命令

查看端口占用情况:losf -i 8080 查看8080端口占用情况netstat -anp | grep 端口号netstat -nultp(此处不用加端口号)查看所有正在被占用端口关机 (系统的关机、重启以及登出 )shutdown -h now 关闭系统init 0 关闭系统telinit 0 关闭系统shutdown -h hours:minutes & 按预定时间关闭系统shutdown -c 取消按预定时间关闭系统shutdown -r now 重启r

2021-06-19 14:26:29 106

原创 数据结构之区别与实际的应用场景

列表与链表1.列表创建刚开始是开辟了连续的空间而且连续空间的大小是一定的,插入和删除需要移动更多的元素。列表的常用方法是append与pop,都是从尾部进行操作链表不需要开辟连续的空间,只需要改变指针。所以它的插入与删除是常数时间。2.列表应用场景:批量处理数据,动态调整元素个数,大部分时间是被读取切片。天然实现栈操作。链表应用场景:频繁的插入删除元素,对线性表的长度难以估计。列表实现栈(头部作为栈顶):class Stack: def __init__(self):

2021-06-19 14:07:41 228

原创 Python装饰器

什么是装饰器包装函数的函数,相当于要对一个函数进行相关的操作,把目标函数当做一个对象,封装到另一个函数中,这个充当容器的函数叫做装饰器。装饰器一个简单的函数,返回两个数的值:def add(a.b): return a+badd(1,2)新的需求,计算这个函数运行所需的时间:import datetime def add(a,b): start=datatime.datatime.now() result=a+b end=datatime.datetime.now() print

2021-06-19 12:59:16 111

原创 六月七日小记

文章目录测试思想1.整体大于细节2.越早介入测试,就能越早发现问题,风险越小。3.考虑到负责的模块最坏情况是怎样的,会造成怎样的后果,尽早采取措施。测试工具通识技能工程能力测试思想1.整体大于细节世上没有完美的系统,只要是人写的代码,就会有bug,测试工程师就是要把bug减到最少。1)测试抓住重点,主要功能流程要多过几遍2)学会梳理系统框架和业务流程,出现的bug不仅出现在自己负责的模块上,还有可能出现在所依赖的模块上。2.越早介入测试,就能越早发现问题,风险越小。3.考虑到负责的模块最坏情况

2021-06-07 20:44:57 233 4

原创 MySQL的架构和内部模块(1)

文章目录MySQL可视化工具MySQL查询缓存MySQL可视化工具以Navicat premium为例,连接MySQL数据库,并可视化。启动MySQL服务-关闭MySQL服务此处要以管理员身份打开终端。此时Navicat premium开启的连接,把自身作为一个客户端,连接到MySQL服务端上,并且进行的数据操作平行更新。连接是TCP通信连接,安全可靠。长连接,连接之后,操作完不会立马断开(短连接),而是保持一段时间的连接。查询是同步的,有时会阻塞,但更安全。show global sta

2021-06-02 15:39:18 146

原创 数据结构之二叉搜索树的查询与删除操作

二叉搜索树删除纯叶子节点删除只有左孩子只有右孩子左右孩子都有纯叶子节点删除代码如下(考虑是不是根节点):if not node.lchild and not node.rchild: if not node.parent: self.root=None if node==node.parent.lchild: node.parent.lchild=None

2021-05-15 12:19:01 166

原创 数据结构之二叉搜索树的插入与遍历

二叉搜索树二叉搜索树介绍二叉搜索树的python建立二叉搜索树的插入数据操作二叉搜索树的遍历操作前部遍历中部遍历(数据排序)尾部排序逐层遍历二叉搜索树介绍二叉搜索树的python建立建立空的二叉搜索树,只存在空根节点代码如下:class Node: def __init__(self,val): self.val=val self.parent=None self.lchild=None self.rchild=Noneclass Tree: def __init__(se

2021-05-13 19:31:36 167

原创 网络编程之TCP多人聊天

服务端转发信息:from socket import *from threading import Threadsockets=[]def main(): server_socket=socket(AF_INET,SOCK_STREAM) server_socket.bind(('',9999)) server_socket.listen() while True: client_socket,client_info=server_socket.acc

2021-05-11 14:50:23 171

原创 网络编程之TCP通信

TCP代码如下(服务端):from socket import *server_socket=socket(AF_INET,SOCK_STREAM)server_socket.bind(('',8888))server_socket.listen()client_socket,client_info=server_socket.accept()while True: recv_date=client_socket.recv(1024) print('接收到%s的消息%s'%

2021-05-11 11:37:13 116

原创 网络编程之UDP通信

知识点UDP编程(利用套接字):from socket import *from threading import Threadudp_socket=socket(AF_INET,SOCK_DGRAM)udp_socket.bind(('',9999))def send(): while True: data=input('请输入需要发送的信息:') addr=('192.168.64.1',8888) udp_socket.sen

2021-05-11 10:40:16 106

原创 数据结构之哈希表

哈希表

2021-05-10 21:12:41 105

原创 数据结构之双链表

双链表的建立代码如下:class Node: def __init__(self,item): self.item=item self.prior=None self.next=Nonenode=Node(1)node1=Node(2)node1.prior=nodenode2=Node(3)node1.next=node2node2.prior=node1双链表的删除class Node: def __init__(self,item): self.item=

2021-05-09 22:06:54 115

原创 数据结构之链表的插入与删除

链表的插入与删除链表的插入链表的删除链表的插入实现代码如下:class Link_list: def __init__(self,item): self.item=item self.next=Nonedef creat_link_list(li): head=Link_list(li[0]) foot=head for j in li[1:]: node=Link_list(j) foot.next=node foot=node return headhead=cr

2021-05-09 21:14:35 675

原创 数据结构之单向链表

单向链表链表简介链表的创建与遍历头插法尾插法链表简介创建简单的链表:class Node: def __init__(self,item): self.item=item self.next=Nonea=Node(1)b=Node(2)c=Node(3)a.next=bb.next=cprint(a.next.next.item)输出为 3,此时item相当于数值,next相当于指针。链表的创建与遍历头插法创建一个链表,并插入更多的数据,每次插入都把新的当做头部。代码

2021-05-09 15:22:48 101

原创 利用队列解决广度优先搜索之迷宫问题

迷宫问题广度优先搜索代码实现如下广度优先搜索算法思路:由起点出发,把起点节点处的可行路径进行进队操作,起点进行出队操作,并把进队的节点进行记录父节点的次序。把循环进行到终点时,再根据最终节点的记录的次序找出父节点,回溯到起点。代码实现如下from collections import dequemaze=[[1,1,1,1,1,1,1,1,1,1],[1,0,1,0,1,1,1,1,1,1],[1,0,0,0,1,1,1,1,1,1],[1,0,1,0,1,1,1,1,1,1],[1,0

2021-05-08 17:34:23 256

原创 利用栈解决深度优先搜索之迷宫问题

迷宫问题问题简介代码实现问题简介算法思路:给出起点和终点,并循环每一步可能走的四个方向,寻找能走的每一步,并把每一步走过的路封死,当走到绝境时,开始回到之前的可以走的路,直到到达终点。如果没有路,则返回到起点。代码实现maze=[[1,1,1,1,1,1,1,1,1,1],[1,0,1,0,1,1,1,1,1,1],[1,0,0,0,1,1,1,1,1,1],[1,0,1,0,1,1,1,1,1,1],[1,0,1,0,1,1,1,1,1,1],[1,0,1,0,0,0,0,1,1,1

2021-05-08 15:52:22 227

原创 Python的内置模块实现队列

collections模块之deque简单创建一个队列,并实现进队出队操作:from collections import dequequeue=deque([1,2,3],5) //创建一个长度为5的队列,并进队1,2,3queue.append(4) //进队4queue.popleft() //把1出队,剩余2,3,4queue.append(5) //2,3,4,5queue.append(6) //2,3,4,5,6queue.append(7) //3,4,5,6,7 当进队队

2021-05-07 17:19:49 168

原创 数据结构之队列

线性队列队列线性队列环形队列队列像栈一样,队列也是一种线性表。它允许在表的一端插入数据,在另一端删除元素。插入元素的这一端称之为队尾(rear)。删除元素的这一端我们称之为队首(front)。队列的特性:队尾插入元素,队首删除元素FIFO(先进先出)线性队列建立顺序队列结构必须为其静态分配或动态申请一片连续的存储空间,并设置两个指针进行管理。一个是队头指针front,它指向队头元素;另一个是队尾指针rear,它指向下一个入队元素的存储位置。每次在队尾插入一个元素是,rear增1;每次在队

2021-05-06 10:42:32 341

原创 栈的应用之括号匹配问题

括号匹配问题给定一个字符串,其中的字符只包含三种括号:花括号{ }、中括号[ ]、圆括号( ),即它仅由 “( ) [ ] { }” 这六个字符组成。设计算法,判断该字符串是否有效,即字符串中括号是否匹配。括号匹配要求括号必须以正确的顺序配对,如 “{ [ ] ( ) }” 或 “[ ( { } [ ] ) ]” 等为正确的格式,而 “[ ( ] )” 或 “{ [ ( ) }” 或 “( { } ] )” 均为不正确的格式。解决此问题,单纯从每种括号的数量上进行匹配是错误的,比如对于 “[ ( ] )

2021-05-06 08:53:44 408

原创 数据结构之栈的Python实现

栈:Python实现栈简介Python实现栈简介栈(Stack)又称堆栈,它是一种运算受限的线性表,其限制是仅允许在表的一端进行插入和删除运算。人们把此端称为栈顶,栈顶的第一个元素被称为栈顶元素,相对地,把另一端称为栈底。向一个栈插入新元素又称为进栈或入栈,它是把该元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称为出栈或退栈,它是把栈顶元素删除掉,使其下面的相邻元素成为新的栈顶元素。在日常生活中,有许多类似栈的例子,如刷洗盘子时,依次把每个洗净的盘子放到洗好的盘子上,相当于进栈;取用

2021-05-05 16:50:06 180

原创 数据结构之C语言的数组与python列表的比较

C语言的数组与python列表的比较C语言中的数组特点Python中的列表结构C语言中的数组特点(1)在C语言中,数组一旦被定义后,占用的内存空间就是固定的,容量就是不可改变的,既不能在任何位置插入元素,也不能在任何位置删除元素,只能读取和修改元素,我们将这样的数组称为静态数组。反过来说,如果数组在定义后可以改变容量,允许在任意位置插入或者删除元素,那么这样的数组称为动态数组。1、PHP、JavaScript 等解释型的脚本语言一般都支持动态数组,而 C、C++ 等编译型的语言一般不支持动态数组。2

2021-05-05 16:26:16 2743

原创 查找算法与排序算法之Python实现

查找算法与排序算法查找算法顺序查找二分查找排序算法冒泡排序选择排序简单选择排序选择排序插入排序快速排序堆排序堆排序topk问题归并排序希尔排序计数排序桶排序基数排序查找算法顺序查找顺序查找是按照序列原有顺序对数组进行遍历比较查询的基本查找算法。对于任意一个序列以及一个给定的元素,将给定元素与序列中元素依次比较,直到找出与给定关键字相同的元素,或者将序列中的元素与其都比较完为止。代码实现如下:def order_find(li,val): for i in range(len(li)):

2021-05-04 15:33:03 162

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除