- 博客(33)
- 收藏
- 关注
原创 网络编程基础大纲
OSI七层网络协议 经典协议与数据包 三次握手与四次挥手 TCP拥塞控制 为啥会出现粘包、拆包,如何处理? 基于golang实现TCP、UDP、Http服务器与客户端
2021-01-07 00:24:13 128
原创 golang学习笔记
1.切片的内部结构,三个参数,指向某个连续数组的指针ptr,元素的个数len,内部数组的容量cap2.切片容量的增长方式,按指数级增长,1 2 4 8 16 32 ....3.切片的定义s1 := []int{1,2,3,4}s2 := make([]int, 3, 5)数组的定义var arr [3]intarr1 := [4]int{1,2,3,4}arr2 := [...]int{1,2,4,5}...
2020-12-11 19:08:40 98
原创 操作系统面试题
1、进程和线程的区别进程和线程的根本区别是进程是操作系统资源分配的基本单位,而线程是处理器任务调度和执行的基本单位。另外区别还有资源开销、包含关系、内存分配、影响关系、执行过程等。资源开销:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。包含关系:如果一个进程内有多个线程,则执行过程不是一条线的,而是多条线(线程)共同完成的;线程是进程的一
2020-09-23 11:44:09 141
原创 数据结构与算法面试题
1、为什么MySQL选择B+树做索引B+树的磁盘读写代价更低:B+树的内部节点并没有指向关键字具体信息的指针,因此其内部节点相对B树更小,如果把所有同一内部节点的关键字存放在同一盘块中,那么盘块所能容纳的关键字数量也越多,一次性读入内存的需要查找的关键字也就越多,相对IO读写次数就降低了。 B+树的查询效率更加稳定:由于非终结点并不是最终指向文件内容的结点,而只是叶子结点中关键字的索引。所以任何关键字的查找必须走一条从根结点到叶子结点的路。所有关键字查询的路径长度相同,导致每一个数据的查询效率相当。
2020-09-22 17:24:26 69
原创 计算机网络面试题
1、TCP、UDP协议有什么区别?TCP是面向连接,UDP是无连接,发送前不需要建立联系 TCP服务可靠,无差错,不丢失,不重复 TCP面向字节流,UDP面向报文 TCP只能点对点,UDP支持一对多 TCP逻辑通信是全双工的可靠信道,UDP是不可靠信道...
2020-09-22 11:26:14 94
原创 Java 比较器
一、继承Comparable接口,并实现compareTo()方法(内部比较器)这种方式就是让自己编写的类继承Comparable接口,并实现compareTo()方法,这种情况下,在使用sort()方法时,不用指定具体的比较器,sort()方法会使用对象自己的比较函数来完成对象的排序。import java.util.ArrayList;import java.util.function.Consumer;public class InternalComparator implement
2020-08-06 04:00:42 96
原创 Java 多线程
启动线程的三种方式 1:Thread 2: Runnable 3:Executors.newCachedThradThread的几个方法:sleep():让线程进入阻塞队列,时间到了之后进入就绪队列 yield():让出cpu,放弃一次当前的执行进入就绪队列 join():当前线程进入阻塞队列,直到调用的线程完全执行完之后,唤醒当前线程进入就绪队列synchronized(Object),这里的Object不能是String常量 Integer Longsynchronized方法和非s.
2020-07-31 04:59:11 156 1
原创 设计模式之代理模式
代理模式的特点:抽象角色:通过接口或抽象类声明真实角色实现的业务方法。 代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。 真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色调用在Java多线程中的实现中使用了代理模式,当我们需要开启多线程执行某一项任务时,需要创建一个类DoWork继承自Runnable,并重写Run()抽象方法,也就是真实角色所要实现的业务逻辑。把DoWork的对象传入Thread的对象中实现代理。在T
2020-07-17 23:06:17 86
原创 Java集合
Collection接口有3个子接口,Set 、List 、Queue一、List接口1、List的特点(有序、不唯一、索引):有序的集合,存储元素和取出元素的顺序是一致的(存储123 取出123) 有索引,包含了一些带索引的方法 允许存储重复的元素2、List的实现类:ArrayList:底层由数组实现 LinkedList:底层由链表实现 Vector:和ArrayList类似,但线程安全,较ArrayList效率低二、Set接口1、Set的特点:无序、唯一2、S
2020-07-05 23:34:00 98
原创 Java 无符号右移和有符号右移的区别
Java中>>和>>>的区别>>:带符号右移。正数右移高位补0,负数右移高位补1。比如:4 >> 1,结果是2;-4 >> 1,结果是-2。-2 >> 1,结果是-1。>>>:无符号右移。无论是正数还是负数,高位通通补0。对于正数而言,>>和>>>没区别。...
2020-04-30 16:41:39 643
原创 leetcode 38.报数
报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数。其前五项如下:1. 12. 113. 214. 12115. 1112211被读作"one 1"("一个一") , 即11。11 被读作"two 1s"("两个一"), 即21。21 被读作"one 2", "one 1"("一个二","一个一...
2019-11-26 14:40:41 120
原创 leetcode 35.搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0...
2019-11-26 14:39:30 61
原创 leetcode 33.搜索旋转排序数组
假设按照升序排序的数组在预先未知的某个点上进行了旋转。( 例如,数组[0,1,2,4,5,6,7]可能变为[4,5,6,7,0,1,2])。搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回-1。你可以假设数组中不存在重复的元素。你的算法时间复杂度必须是O(logn) 级别。示例 1:输入: nums = [4,5,6,7,0,1,2]...
2019-11-26 14:38:14 69
原创 leetcode 28.实现strStr()
实现strStr()函数。给定一个haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回-1。示例 1:输入: haystack = "hello", needle = "ll"输出: 2示例 2:输入: haystack = "aaaaa", needle = ...
2019-11-26 14:36:45 68
原创 leetcode 27.移除元素
给定一个数组 nums和一个值 val,你需要原地移除所有数值等于val的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两...
2019-11-26 14:18:51 73
原创 leetcode 26.删除排序数组中的重复项
给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例2:...
2019-11-26 13:58:17 57
原创 leetcode 21.合并两个有序链表
将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4/** * Definition for singly-linked list. * type ListNode struct { * Va...
2019-11-26 13:57:01 62
原创 leetcode 20.有效的括号
给定一个只包括 '(',')','{','}','[',']'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: "()"输出: true示例2:输入: "()[]{}"输出: true示例3:输入: "(]"输出: false示例4:输...
2019-11-26 13:56:04 62
原创 leetcode 19.删除链表的倒数第N个节点
给定一个链表,删除链表的倒数第n个节点,并且返回链表的头结点。示例:给定一个链表: 1->2->3->4->5, 和 n = 2.当删除了倒数第二个节点后,链表变为 1->2->3->5.说明:给定的 n保证是有效的。进阶:你能尝试使用一趟扫描实现吗?func removeNthFromEnd(head *ListNo...
2019-11-26 13:54:57 61
原创 leetcode 15.三数之和
给定一个包含 n 个整数的数组nums,判断nums中是否存在三个元素 a,b,c ,使得a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]func three...
2019-11-26 13:53:38 47
原创 leetcode 14.最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串""。示例1:输入: ["flower","flow","flight"]输出: "fl"示例2:输入: ["dog","racecar","car"]输出: ""解释: 输入不存在公共前缀。func longestCommonPrefix(strs []string) string ...
2019-11-24 15:06:15 51
原创 leetcode 13.罗马数字转整数
罗马数字包含以下七种字符:I,V,X,L,C,D和M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做II,即为两个并列的 1。1...
2019-11-24 14:43:56 54
原创 leetcode 12.整数转罗马数字
罗马数字包含以下七种字符:I,V,X,L,C,D和M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做II,即为两个并列的 1。1...
2019-11-24 14:42:58 76
原创 leetcode 11.盛最多水的容器
给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点(i,ai) 。在坐标内画 n 条垂直线,垂直线 i的两个端点分别为(i,ai) 和 (i, 0)。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器,且n的值至少为 2。图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示...
2019-11-24 14:41:13 52
原创 leetcode 9.回文数
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。fu...
2019-11-24 14:39:41 42
原创 leetcode 8.字符串转换整数 (atoi)
请你来实现一个atoi函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,这些字符可...
2019-11-24 14:38:49 158
原创 leetcode 7.整数反转
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21func reverse(x int) int { num := calNums(x)-1 var res int for x/10 !=0 || x%1...
2019-11-24 14:36:20 49
原创 leetcode 6.Z字形变换
将一个给定字符串根据给定的行数,以从上往下、从左到右进行Z 字形排列。比如输入字符串为 "LEETCODEISHIRING"行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:"LCIRETOESIIGEDHN"。请你实现这个将字符串进行指定行数变换的函数:...
2019-11-24 14:35:19 51
原创 leetcode 5.最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"func centerSpread(s string, left int, right int)string{ i,j := left,righ...
2019-11-24 14:33:42 72
原创 leetcode 3.无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。示例1:输入: "abcabcbb"输出: 3解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是"w...
2019-11-24 14:30:34 58
原创 leetcode 2.两数相加
2、给出两个非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 ...
2019-11-22 17:19:32 86
原创 leetcode 1.两数之和
1、给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]fun...
2019-11-22 17:17:23 48
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人