03 2019 档案
摘要:1. 红黑树是在二叉查找树的基础上延伸的。先看下二叉查找树。定义是:它不为空树时,它左子树上所有的元素都小于根节点的元素,而根节点右子树上所有的元素都大于根节点的元素。可以看下图(扒来的) 2. 为了保证二叉查找树不失衡(出现线性查找的情况),就有了平衡的二叉查找树:红黑树。 它除了满足二叉查找树的
阅读全文
摘要:给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。 换句话说,第一个字符串的排列之一是第二个字符串的子串。 示例1: 示例2:
阅读全文
摘要:给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。 示例 1: 示例 2:
阅读全文
摘要:1. 采用的方案:冒泡排序 和数组的冒泡排序的思想没有很大的区别。直接 看代码吧。 定义一下数据结构: 排序代码: 2. 保证不断链,每遍历一下就变换链的方向 定义数据结构: 代码: 3. 合并两个有序链表 4. 单链表的快排
阅读全文
摘要:1. 在Java中,程序员把内存控制权利交给 Java 虚拟机而不用像c++为一个 new 操作去写对应的 delete/free 操作,因此不是很容易出现内存泄露和溢出的问题。 Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分成若干个不同的数据区域 其中线程私有的有:虚拟机栈,本
阅读全文
摘要:1. ArrayList和LinkedList都是实现了List接口的容器类,用于存储一系列的对象引用。他们都可以对元素的增删改查进行操作。 2. ArrayList是实现了基于动态数组的数据结构,LinkedList是基于链表结构。 ArrayList可以以O(1)时间复杂度对元素进行随机访,Li
阅读全文
摘要:更细节的:https://blog.csdn.net/weixin_40271838/article/details/79998327 1. 为什么要使用线程池? 假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在线程中执行任务的时间,T3 销毁线程时间。 如果:T1 + T3 远大
阅读全文
摘要:1. 什么是ARP协议? 网络层以上的协议用IP地址来标识网络接口,但以太数据帧传输时,以物理地址来标识网络接口。因此我们需要进行IP地址与物理地址之间的转化。对于IPv4来说,我们使用ARP地址解析协议来完成IP地址与物理地址的转化(IPv6使用邻居发现协议进行IP地址与物理地址的转化,它包含在I
阅读全文
摘要:L1-001 Hello World (5 分) 这道超级简单的题目没有任何输入。 你只需要在一行中输出著名短句“Hello World!”就可以了。 AC代码:(直接输出记性) #include <iostream> #include <cstdio> #include <cstring> #in
阅读全文
摘要:1. 什么是DNS? DNS是域名系统的缩写,DNS通过将域名与实际的Web服务器连接来帮助引导Internet上的流量。从本质上讲,它需要一个人性化的请求 – 像simcf.cc这样的域名 – 并将其转换为计算机友好的服务器IP地址 – 如121.11.0.232。因为一个应用程序请求TCP打开连
阅读全文
摘要:给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。 例如,给定三角形: 自顶向下的最小路径和为 11(即,2 + 3 + 5 + 1 = 11)。 说明: 如果你可以只使用 O(n) 的额外空间(n 为三角形的总行数)来解决这个问题,那么你的算法会很加分。 解法:基础d
阅读全文
摘要:给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 进阶: 如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。 递归法求解:一个最大的子序和,我们从中间将这个序列分开,那么这个最大值有三种可能,这个最大值出现在左半边,
阅读全文
摘要:在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积。 示例:
阅读全文
摘要:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。 注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。 示例 1:
阅读全文
摘要:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。 注意你不能在买入股票前卖出股票。 示例 1:
阅读全文
摘要:1. 首先在介绍B树前,先看一个基础数据结构—二叉排序树。它的定义如下: 若左子树不空,则左子树上所有节点的值均小于它的根节点的值 若右子树不空,则右子树上所有节点的值均大于它的根节点的值 它的左、右子树也分别为二叉排序数(递归生成),如下图: 这样的数据结构能够帮助我们在O(logn) 的时间复杂
阅读全文
摘要:1. 内连接 结果: 从左表中取出每一条记录,去右表中与所有的记录进行匹配; 匹配必须是某个条件是左表中与右表中相同,才会保留结果,否则不保留; 1.等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。 2.不等值连接:在连接条件使用
阅读全文
摘要:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 示例 2: 示例 3:
阅读全文
摘要:给定一个字符串,逐个翻转字符串中的每个单词。 示例 1: 示例 2: 示例 3:
阅读全文
摘要:班上有 N 名学生。其中有些人是朋友,有些则不是。他们的友谊具有是传递性。如果已知 A 是 B 的朋友,B 是 C 的朋友,那么我们可以认为 A 也是 C 的朋友。所谓的朋友圈,是指所有朋友的集合。 给定一个 N * N 的矩阵 M,表示班级中学生之间的朋友关系。如果M[i][j] = 1,表示已知
阅读全文
摘要:在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 示例 1: 示例 2:
阅读全文
摘要:给定一个未经排序的整数数组,找到最长且连续的的递增序列。 示例 1: 最长上升子序列,可以不连续,就是dp来做了,具体可以看简单dp思想。
阅读全文
摘要:给定一个包含了一些 0 和 1的非空二维数组 grid , 一个 岛屿 是由四个方向 (水平或垂直) 的 1 (代表土地) 构成的组合。你可以假设二维矩阵的四个边缘都被水包围着。 找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为0。) 示例 1: 对于上面这个给定矩阵应返回 6。注意
阅读全文
摘要:1. 二叉树 定义结点类型 2. 二叉树的先序遍历:根节点——左子树——右字树 递归遍历: 非递归遍历:先序遍历时,每当我们压入一个结点,我们压入结点前对其进行访问 3. 二叉树的中序遍历:左子树——根节点——右字树 递归遍历: 非递归遍历:中序时我们需要在遍历完左子树后访问根节点,再去遍历右子树
阅读全文
摘要:1. 数组中唯一出现过一次的数 利用异或的特性:x ^ y ^ x = y ^ x ^ x = y。 2. 一个数组里除了一个数字之外,其他数字出现了n次 我们把这个数分解成二进制,计算出每一位出现1的个数,我们知道如果多次出现的话,1的个数是能够整除这个n,如果发现这个n 不能够被 整除的时候,我
阅读全文
摘要:1. 使用条件变量 判断是否任务B已经做完,然后再执行任务A。 测试代码可看:https://blog.csdn.net/guochao6531/article/details/78075882 2. 使用CountDownLatch。CountDownLatch其实可以把它看作一个计数器,只不过这
阅读全文
摘要:1. 对于服务器,每一个tcp连接都要占一个文件描述符,一旦这个文件描述符使用完了,就会返回错误。 我们知道操作系统上端口号1024以下是系统保留的,从1024-65535是用户使用的。由于每个TCP连接都要占一个端口号,所以我们最多可以有60000多个并发连接?但是事实并不是这样。 我们还知道对于
阅读全文
摘要:1. 内存溢出:简单地说内存溢出就是指程序运行过程中申请的内存大于系统能够提供的内存,导致无法申请到足够的内存,于是就发生了内存溢出。 内存泄漏:内存泄漏指程序运行过程中分配内存给临时变量,用完之后却没有被GC回收,始终占用着内存,既不能被使用也不能分配给其他程序,于是就发生了内存泄漏。 2. 避免
阅读全文
摘要:1. 计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,会涉及到数据的读取和写入,但由于CPU执行速度很快,而从内存读取数据和向内存写入数据的过程跟CPU执行指令的速度比起来要慢的多,因此如果任何时候对数据的操作都要通过和内存的交互来进行,会大大降低指令执行的速度。因此在CPU里面
阅读全文
摘要:1. 为什么需要垃圾回收? 因为内存是有限的,在不断的分配内存空间而不回收的话内存迟早都会被消耗完,所以垃圾回收是必须的。 2. 触发GC 的条件: 1.GC在优先级最低的线程中运行,一般在应用程序空闲即没有应用线程在运行时被调用。 2.Java堆内存不足时,GC会被调用。 触发Full GC:调用
阅读全文
摘要:1. String 1.Java 中String 是一个不可变类,即创建一个String对象后,是不能直接改变字符串中的某个字符的。 2.为什不可变?因为用于存储String值的仍然是一个char型数组,并且注意到它是final修饰的,不可更改。 3.设计成不可变的好处:效率(因为对象不可变,所以可
阅读全文
摘要:1. int 和Integer 的区别 1.int 是一个基本数据类型,而Integer 是int 的包装类。 2.Integer 变量必须要实例化之后才能使用。 3.Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值 。 4.I
阅读全文
摘要:7-2 列出连通集 (25 分) 给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集。假设顶点从0到N−1编号。进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点。 输入样例: 8 6 0 7 0 1 2 0 4 1 2 4 3 5 输出样例: { 0
阅读全文
摘要:7-1 水仙花数 (20 分) 水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:1。 本题要求编写程序,计算所有N位水仙花数。 输入样例: 3 输出样例: 153 370 371 407思路:遍历100-999,每次都按题意检测一下是否满足,满足则输出,但是这题
阅读全文
摘要:1. 开放定值法: 也叫再散列法,当关键字key的哈希地址p=H(key)出现冲突时,以p为基础,产生另一个哈希地址p1,如果p1仍然冲突,再以p为基础,产生另一个哈希地址p2,…,直到找出一个不冲突的哈希地址pi ,将相应元素存入其中。 通常都是用以下公式计算:Hi=(H(key)+di)% m
阅读全文
摘要:1. 我们知道Map是一个 key-val 的集合,HashMap是基于Hash表的Map接口的非同步实现。 2. HashMap的基本数据结构是数组和链表。(借鉴一张图) HashMap的存储原理:声明一个下标范围比较大的数组来存储元素,另外设计一个哈希函数获得每一个元素的Key(关键字)的函数值
阅读全文
摘要:1. 在Web应用中,服务器把网页传给浏览器,实际上就是把网页的HTML代码发送给浏览器,让浏览器显示出来。而浏览器和服务器之间的传输协议是HTTP协议。 2. HTTP(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式。绝大多数Web开发都是建立在HTTP
阅读全文
摘要:1. KMP算法是应用于字符串匹配问题的。比方说给你两个字符串,寻找其中一个字符串是否包含另一个字符串啊这样的问题。 一般来说,我们可以暴力的去跑,从目标字符串str(假设长度为n)的第一个下标选取和ptr长度(长度为m)一样的子字符串进行比较,如果一样,就返回开始处的下标值,不一样,选取str下一
阅读全文
摘要:1. 线程安全就是多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取完,其他线程才可使用。不会出现数据不一致或者数据污染。 线程不安全就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是“脏”数据。 比方说ArrayList
阅读全文
摘要:1. 在网络链路传输数据的时候如何协调多个发送和接收节点对一个共享广播信道的访问,也就是所谓的多路访问问题,因为所有的节点都能传输帧,两个以上的节点可能会同时传输帧。当发生这种情况时,所有节点同时接到多个帧;也就是说,传输的帧在所有接收方处发生碰撞了。通常,碰撞帧的信号纠缠在一起。因此,涉及此次碰撞
阅读全文
摘要:1. 首先我们知道TCP可靠传输原理中的停止等待协议,该协议就是发送方每发送一个报文段后就停止发送,一直等收到接收方的确认后再发送下一个报文段。 TCP通信是全双工的,我们假定A为发送方,B为接收方。A会有一个发送窗口,B有一个接收窗口。 发送窗口表示在没有收到B确认的情况下,A也可以连续把发送窗口
阅读全文
摘要:1. 进程之间通信的方式有:信号,管道 https://www.cnblogs.com/Carrie-0173/p/6425202.html ,消息队列,共享内存。较熟悉一下两种。 2. 信号通信机制: 信号可以在任何时候发送给某一进程,而无须知道该进程的状态。如果进程未处于执行状态则信号被内核保存
阅读全文
摘要:1. 如何查看一个进程的详细信息,如何追踪一个进程的执行过程 通过pstree命令(根据pid)进行查询进程内部当前运行了多少线程:# pstree -p 19135(进程号) 使用top命令查看(可以查看到线程情况)# top -Hp 19135 2. 跟踪某个应用程序的运行过程 跟踪已运行的进程
阅读全文
摘要:1. 插入排序 算法原理:从整个待排序列中选出一个元素插入到已经有序的子序列中去,得到一个有序的、元素加一的子序列,直到整个序列的待插入元素为0,则整个序列全部有序。 具体的实现的时候,我们一般选择第一个元素作为有序的序列,将后面的元素插入到前面有序的序列直到整个序列有序。 时间复杂度:插入排序在最
阅读全文
摘要:1. 首先,拥塞控制和流量控制是不一样的。 拥塞控制是防止过多的数据注入到网络中,可以使网络中的路由器或链路不致过载,是一个全局性的过程。 流量控制是点对点通信量的控制,是一个端到端的问题,主要就是抑制发送端发送数据的速率,以便接收端来得及接收。 2. 拥塞的标志:1.重传计时器超时 2.接收到三个
阅读全文
摘要:1. TCP的特点 特点:它是一个点到点的通信机制,只能有一个发送方和一个接收方;它提供是一个可靠的,按序的字节流机制;使用流水线机制,通过拥塞控制和流量控制的机制设置窗口尺寸;发送方和接收方都有缓存;它是一个全双工,能双向传输数据的面向连接的通信,通信双方必须在发送数据之前建立连接,连接状态只能在
阅读全文
摘要:1. 孤儿进程 如果父进程先退出,子进程还没退出那么子进程将被托孤给init进程,这是子进程的父进程就是init进程(1号进程). 用到的Linux函数有:fork 创建一个新进程,vfork 创建一个子进程,以供执行新程序,常与execve等同时使用,execve 运行可执行文件,getpid 获
阅读全文
摘要:1. FIFO 先进先出页面置换算法: 优先淘汰最早进入内存的页面,亦即在内存中驻留时间最久的页面。 看下实例: 缺页次数15次,缺页率:15/20 2. LRU最近最久未使用置换算法 当需要淘汰一个页面时,总是选择在最近一段时间内最久不用的页面予以淘汰。 缺页次:12次,缺页率:12/20 3.
阅读全文
摘要:1. 存储器管理的主要对象是内存,由于对外存的管理与对内存的管理相类似,只是它们的用途不同,即外存主要用来存放文件,所以我们把对外存的管理放在文件管理。 2. 存储层次至少有三级:CPU寄存器,主存,辅存 3. 在多道程序环境下,要使程序运行,必须先为之创建进程。而创建进程的第一件事,便是将程序和数
阅读全文
摘要:1. 在多道程序环境下,进程数目往往多于处理机数目,致使它们竞争使用处理机。这就要求系统能按某种算法,动态地把处理机分配给就绪队列中的一个进程,使之执行。一个作业从提交开始,往往要经历三级调度:高级调度、中级调度、低级调度。 1.高级调度:调度对象是作业。 2.中级调度:提高内存利用率和系统吞吐量。
阅读全文
摘要:1. 程序顺序执行时的特征:顺序性,封闭性,可再现性 2. 进程的六大特征: 1.结构特征,通常的程序是不能并发执行的,我们会为之配置一进程控制块,即PCB。程序段,数据,PCB构成了进程实体。 2.动态性,进程的实质是进程实体的一次执行过程 3.并发性,多个进程实体同存于内存中,且能在一段时间内同
阅读全文
摘要:1. 查找最晚入职员工的所有信息 解答:limit 的使用, 通常 limit offset,rows 一般是用于select语句中用以从结果集中拿出特定的一部分数据。 offset是偏移量,表示我们现在需要的数据是跳过多少行数据之后的,可以忽略;rows表示我们现在要拿多少行数据。默认是0。 注释
阅读全文