自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(214)
  • 资源 (2)
  • 收藏
  • 关注

原创 windows上抓包出现大包未分片以及关闭tso方法

目前很多网卡已经支持IP片以及IP/TCP/UDP等协议的校验和计算,用来减少内核层面的运算(减少CPU负载),当协议层发现网卡支持相应的特性时,会将相应的处理交给网卡操作。如上面提到的校验和,正常情况下,校验和由对应的协议层处理,但在网卡使能情况下会将其推迟到网卡层面处理,网卡处理结束后直接发送,这就是为什么wireshark抓到的报文里面的校验和会提示不正确的原因,同样地,TCP会选择不大于滑动窗口的报文(该报文可能大于MSS),交由网卡去分片处理。关闭大量传送减负v2。

2023-12-11 18:11:13 857

原创 redis远程连接不上问题

1. 检查防火墙是否关闭2. 检查端口是否开放如果是云服务器,那么需要配置安全组 6379,检查是否开放相应端口3. 是否配置密码和更改配置文件的端口3.1 首先要在redis.conf里面将密码配置上3.2 需要更改bind套接字默认安装是绑定的本地回环地址如果是这样我们只能本机访问,想远程登陆是不现实的我们需要在redis.conf文件里面去进行更改bind:0.0.0.0所谓服务器监听,是指服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实

2022-04-04 16:15:49 5053 1

原创 端口扫描工具

在验证云服务器某个端口是否对外开放时,通过远程telnet IP 端口 经常看不出来端倪。我们可以检查云服务器防火墙是否关闭。2. 端口扫描 查看开放端口域名端口扫描-在线端口检测开放检查-IP端口批量扫描在线工具 (jsons.cn)...

2022-03-28 21:57:29 608

原创 如何编写测试用例?

例如:给你一个杯子,你会如何测试呢?1. 功能测试(关注产品的基本功能,这是基本保障)1.1 水杯有水情况下能否正常装水(水的深度从空到满)1.2 水杯有水能否正常喝到水 (水杯中水深从空到满)1.3 水杯是否有盖子,盖子盖住后是否漏水1.4 水杯是否有保温功能,保温功能是否正常保温2. UI测试(主要关注产品的外观,颜色设计等方面)2.1 外观是否完整2.2 布局、颜色搭配是否让人感觉舒适2.3 图案是否易磨损,是否易掉色3. 易用性测试(主要关注用户使用时是否方便

2022-03-18 14:00:53 817

原创 什么是好的case?测试在开发流程中起到什么作用?

什么是好的case?覆盖度广,正常情况case , 异常情况 我们对于用户的约束是比较低的,我们的case需要测试出代码的鲁棒性 重复度低,我们自己建设的自动化,每天跑这个case是需要耗费资源的,要用有限的资源尽可能的覆盖 易于修改,当dev那边出现修改时候我们这边的改动 易于理解,我们可以根据case很快的复现问题测试在工作中起到什么作用?首先,一个产品的交付离不开 产品,运营,设计,研发,测试等的共同努力。开发去酒吧点了一杯鸡尾酒出来了, 产品去酒吧点了一杯威士忌出来了,测试去..

2022-02-10 16:18:47 504

原创 git 三板斧

1. git rebase的使用 先在master 下pull保持本地和远程同步切换回branchgit rebase mastergit pullgit commit --amend 修改commit信息git push origin + 分支2. 代码冲突问题git branch -vv 查看本地和远程分支关系git branch -d + 分支 删除本地分支git branch -D + 分支 强制删除本地分支git checkout -b +分支 orig

2022-01-24 16:40:26 359

原创 我在校园定位更改

VLAN创建vlan(1) 创建单个vlanSwitch(config) #vlan 20(2)批量创建vlanSwitch(config)#vlan databaseSwitch(vlan-db)vlan 10-22指定创建端口类型Switch(config-if)# switchport mode trunk端口默认为Access,Access端口可以不用再指明建立端口和VLAN之间的连接在接口模式下将该接口加入某个vlan,这样一次可以只添加一个接口Switch(config-

2021-10-05 14:04:34 165

原创 python中闭包与装饰器

函数中定义函数。能不能直接调用内部函数呢?答案是不可以def func(): #外部函数 print('this is func') def func1(): #内部函数 print('this is func1')我们可以直接调用func(),但是不可以调用func1()怎么调用呢?我们可以将内部的函数进行returndef func(): #外部函数 print('this is func') def func1(): #内部函数

2021-08-03 17:39:06 110

原创 python函数

语法:def myfunction(): print('this is a function')函数中带有参数def myfunction(number): print('this is a function ' + str(number))myfunction(5)我们在学习C语言的时候知道,实际参数给形式参数传递的时候以值的形式传递,因此对于形式参数的更改并不会对于实际参数造成影响。我们看看python的def myfunction(number): num

2021-08-02 16:08:17 136

原创 python四种基本数据类型

列表(list) : 一种有序可以更改的集合。允许重复成员元组 (Tuple) :一种有序并且不可更改的集合,允许重复成员集合(Set): 一个无序和无索引的集合。没有重复成员词典 (Dictionary)是一个无序,可变有索引的集合,拥有键和值。没有重复成员列表 (list)方括号编写thislist = ["apple", "banana", "cherry"]可以通过索引访问 (正向的索引从0开始,反向索引 -1表示倒数第一个)print(thislist[1])支持范围索引 (

2021-08-02 14:45:15 1679

原创 Go语言中有关数组传递参数问题

Go数组向函数传递参数在学习C语言 C++的时候我们一定会学习指针,在数组向函数传参时候我们会有值传递和地址传递问题。同样在go语言中也不可避免这个问题。分为静态数组的传递和动态数组的传递什么是静态数组?静态数组就是数组长度固定不变的数组。eg:var Array[5] int = [5]int {1,2,3,4}静态数组像函数传递参数是一个值传递package mainimport "fmt"func printArr(arr1 [4]int){ arr1[0] = 1

2021-06-21 18:44:02 518

原创 Go语言中多个返回值函数写法

Go语言中和C C++有很大不同在于函数可以具有多个返回值。我们来看看写法一个返回值写法package mainimport "fmt"func return_sigle(r1 int,r2 int ) int{ fmt.Println("r1 = ", r1,"r2 = ",r2) return 10}func main(){ test := return_sigle(10,100) fmt.Println("test = " , test)}多个返

2021-06-21 15:36:32 280

原创 IP交换机与路由器配置

VLAN创建vlan(1) 创建单个vlanSwitch(config) #vlan 20(2)批量创建vlanSwitch(config)#vlan databaseSwitch(vlan-db)vlan 10-22指定创建端口类型Switch(config-if)# switchport mode trunk端口默认为Access,Access端口可以不用再指明建立端口和VLAN之间的连接在接口模式下将该接口加入某个vlan,这样一次可以只添加一个接口Switch(config-

2021-05-05 20:31:25 1839 2

原创 前k个高频单词

leetcode第 692题题目描述给一非空的单词列表,返回前 k 个出现次数最多的单词。返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。来看输入输出:...

2021-04-28 09:33:43 162

原创 dp之等差数列划分

leetcode 413 等差数列划分题目描述如果一个数列至少有三个元素,并且任意两个相邻元素之差相同,则称该数列为等差数列。A = [1, 2, 3, 4]返回: 3, A 中有三个子等差数组: [1, 2, 3],[2, 3, 4] 以及自身[1, 2, 3, 4]。我们看到后首先会想:这个数列必须连续,我们能不能暴力获取到所有情况呢?写一个方法判断数列是否等差,然后获取到数列所有组合情况。答案是肯定可以,但是时间复杂度呢?我们想要获取到这个数列得组合情况我们时间复杂度为n-2 +

2021-04-27 21:57:21 174

原创 厄尔筛法计算质数

出自leetcode第204题题目描述:统计所有小于非负整数 n 的质数的数量。input : n = 10output :4解释:小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7我们很容易想到就是暴力查找,从2到n-1找到满足条件的质数进行加加操作,很快写下了第一种思路:class Solution {public: bool isPrime(int x) { for (int i = 2; i * i <= x; ++i) {

2021-04-27 20:58:49 103

原创 字节跳动研发编辑字符串问题

题目链接:https://www.nowcoder.com/test/question/42852fd7045c442192fa89404ab42e92?pid=16516564&tid=43850841我们来看题目:我叫王大锤,是一家出版社的编辑。我负责校对投稿来的英文稿件,这份工作非常烦人,因为每天都要去修正无数的拼写错误。但是,优秀的人总能在平凡的工作中发现真理。我发现一个发现拼写错误的捷径:三个同样的字母连在一起,一定是拼写错误,去掉一个的就好啦:比如 helllo -> h

2021-04-22 16:20:34 118

原创 手把手教你写服务器

首先写一下自己学习服务器的困难1:直接看代码不知道说代码说了啥,有的函数只知道干啥不知道怎么用;2:不知道上下代码连接关系,记住也是死记的;交流心得:个人认为有了C的基础掌握简单服务器还是在自己可控范围内的,但是在写之前要研究大量的函数,还有服务器客户端模型。难点主要就是每个函数一定要掌握扎实,不然后面你可能连为啥定义这个变量你都不知道为啥。个人感觉在学习到网络这一部分后大量的函数调用,在之前C/C++基本上都是自己编写的函数实现逻辑转换,网络中大量的函数接口让我明显不适应。只能一个函数一个函数啃。

2021-04-19 21:59:23 1150

原创 剑指offer 数组中重复数字

来看一个题:我们初看这个问题,相信每个人都能很快写出来,但是接下来我们看到的代码,思路一样但是时间复杂度上却有很大不同。我们思路无非就是哈希的思想,将这个数组中的值放入哈希表中建立起来映射关系,通过映射关系来找到最终我们想要的结果。 unordered_map<int,int> m; for(size_t i = 0;i < nums.size();++i) { m[nums[i]]++; } for(auto &it : m) { if(it.secon

2021-04-09 18:34:41 78

原创 剑指offer 4 字符串替换

题目描述将空格替换成%20我们思路也很简单,就是简单的字符串分割方法,先记录出来字符串中空格的个数,然后我们重新设置空间大小进行预留,然后进行分割插入。来看代码:string StrReplace(const string& str){ int count = 0; for (size_t i = 0; i < str.size(); ++i) { if (str[i] == ' ') { count++.

2021-04-09 18:22:45 89

原创 剑指offer 由string类所想赋值运算符重载

面试官扔给你一个类,让你去实现赋值运算符重载。class String{ public: String(const char* p = "") { if(p == nullptr) { p = ""; } m_pdata = new char[strlen(p) + 1]; strcpy(m_pdata,p); } String(const S

2021-04-09 14:55:30 99

原创 BST树转双向链表,保证链表有序

在处理二叉树的过程中,对于二叉树指向问题一直是比较棘手的问题,常见做法就是将二叉树用(前中后层序)遍历的形式进行转换,对于较为复杂的问题,如何去解决呢?我们介绍到一种分治思想问题:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。这个问题如果我们去研究更改指向的规律,很容易将我们自身绕进去。我们给定一个这样的BST树,如果我们来研究如何将其更改指向到接下来这张图我们是无法通过找规律旋转出来的。但是我们会一种做法:中序遍历我

2021-03-20 18:36:00 345

原创 类的成员存放在内存中哪个区域?

我们都会用类,但是类的成员变量是在内存中哪个区域呢?类的成员变量分为两种:1:静态成员变量2:非静态成员变量静态成员变量属于所有类,存放在静态区,但是非静态成员变量的存放和类实例的空间有关,类如果实例化在堆上,也就是New开辟的空间,这个成员变量就是存放在堆上,如果类的实例化在栈上,这个成员变量就是在栈上。考虑的时候要根据具体情况具体分析,不能说这个类的成员一定是在内存中的某个位置。...

2021-03-20 13:10:27 2370

原创 动态规划之完全平方数

leetcode给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。给你一个整数 n ,返回和为 n 的完全平方数的 最少数量 。完全平方数 是一个整数,其值等于另一个整数的平方;换句话说,其值等于一个整数自乘的积。例如,1、4、9 和 16 都是完全平方数,而 3 和 11 不是。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/perfect-squares著

2021-03-19 22:33:16 248

原创 因为这个问题,我气跑了面试官

出现大量close_wait和time_wait怎么办?这涉及到TCP的四次挥手时状态我们先来复习一下TCP的三次握手和四次挥手过程中每个阶段对应的状态三次握手:四次挥手:问题1:如果服务器端出现大量time_wait状态?time_wait是为了防止最后一次ACK丢失就会立刻给客户端发送一个结束报文段来关闭连接,客户端收到这个结束报文段之后,并没有直接进入CLOSE状态而是转移到TIME_WAIT状态。在这个状态,客户端连接要等待一段长为2MSL的时间,才能完全关闭。MSL是TCP报文

2021-03-11 22:23:54 101

原创 电梯里面为什么网速会慢?

进入电梯之后网速为什么会慢?我第一反应是因为电梯是弱网环境。但是在我复习TCP过程中想到,弱网环境下网络链路也是通的啊,为什么会慢?在弱网环境下会丢失包,对端会(超时重传)重传次数变多,确认消息会变慢。如何和所学知识连接呢?这就涉及到TCP的确认应答机制和超时重传机制,TCP有ACK序列来应答表示确认,在传输过程中有一种称为延迟ACK。我们知道TCP是保证数据传输有序的,如何来保证呢?核心思想保证最小的包序有序,TCP发送包是有序号的,在一段序号范围内是一个包。假设我们有5个包,序号分别

2021-03-11 16:52:09 763

原创 字符串中将连续的字符串转换成为数字形式表示出来

笔试百家云的时候,有个笔试题如下:给定一个字符串,将该字符串转换,如果出现连续字符将替换成出现次数+该字符的形式例如: 输入 asdfggghs 输出 1a1s1d1f3g1h1s这个问题也很好解决,无非就是用下标来标记当前遍历位置,然后将出现次数进行统计,很好解决的问题我遇到了一个问题,这个次数该如何转换成字符的形式?加上字符0吗?count + ‘0’ ?并不是,当count超过10的时候就会出现错误。我大脑中想到的第一就是itoa函数因为这也是经常看到的但是我却很少些过的函数

2021-03-09 11:45:57 421

原创 什么是死锁?

我们来看百度百科上有关死锁的解释:死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。简而言之就是:假如有两个线程:线程A拿着A资源,然后线程A在等待线程B的资源,此时线程B正拿着B资源,但是线程B也在等待着线程A的资源,此时没有外力作用,线程A B就会都停留在等待对方释放资源,一直持续下去。这种情况称为死锁。死锁产生有四个条件:1:互斥使用

2021-03-04 18:00:54 1188 1

原创 竖直打印单词

leetcode 第1324题给你一个字符串 s。请你按照单词在 s 中的出现顺序将它们全部竖直返回。单词应该以字符串列表的形式返回,必要时用空格补位,但输出尾部的空格需要删除(不允许尾随空格)。每个单词只能放在一列上,每一列中也只能有一个单词。示例 1:输入:s = “HOW ARE YOU”输出:[“HAY”,“ORO”,“WEU”]解释:每个单词都应该竖直打印。“HAY”“ORO”“WEU”示例 2:输入:s = “TO BE OR NOT TO BE”输出:[“TBONTB

2021-03-01 21:40:48 334

原创 排序复习

基础概念1: 内部排序:排序算法需要一次性将所有的数据加载到内存中才可以进行排序;外部排序:排序算法不需要一次性将所有的数据加载到内存中才可以进行排序;(堆排序)稳定排序:待排序记录中,相同的元素在排序后相对位置保持不变的排序。插入排序上代码void Insert_Sort(int *arr, size_t sz){ for(size_t i = 1; i < sz; ++i) { int key = arr[i]; // 当前要插入元素 ...

2021-02-26 12:03:01 94

原创 不使用+的加法

刷题中经常见到一道题,不使用+加法。来看下面网友回答:这可真是个小机灵鬼。但是这不是真正题目的意思。题目的本质是想考察我们对于加法器的理解,主要是想我们通过位运算。那么加法器该怎么去理解呢?在内存中数据是以二进制形式存放的,如果不产生进位,可以直接对数据进行相异或。我们给出个模板如果不产生进位 直接相异或如果产生进位 将进位和异或结果相加直到进位为0来看代码class Solution {public: int getSum(int a, int b) {

2021-02-04 19:08:33 95

原创 最长子串问题(包含重复与不重复)

问题1至少有K个重复字符的最长子串leetcode 第365题找到给定字符串(由小写字符组成)中的最长子串 T , 要求 T 中的每一字符出现次数都不少于 k 。输出 T 的长度。输入:s = "aaabb", k = 3输出:3最长子串为 "aaa" ,其中 'a' 重复了 3 次。输入:s = "ababbc", k = 2输出:5最长子串为 "ababb" ,其中 'a' 重复了 2 次, 'b' 重复了 3 次。问题2无重复字符的最长子串...

2021-02-02 12:32:22 628 1

原创 动态规划之编辑距离

首先来看问题:牛客网地址:链接:https://www.nowcoder.com/questionTerminal/9649617be3bf42288f50758df4310655?toCommentId=81645来源:牛客网UNIX系统下有一个行编辑器ed,它每次只对一行文本做删除一个字符、插入一个字符或替换一个字符三种操作。例如某一行的内容是“ABC”,经过把第二个字符替换成“D”、删除第一个字符、末尾插入一个字符“B”,这三步操作后,内容就变成了“DCB”。即“ABC”变成“DCB”需要经过

2021-01-25 16:52:31 122

原创 什么是线程不安全?

什么是线程不安全?线程不安全是指多个线程在访问临界资源(多个线程都能访问到的资源)时,由于访问非原子性导致的产生结果和预期结果不同。比如多个线程在执行i++的时候,假设i最初为5,如果此时有两个线程进行i++操作,理论上第二个线程执行完之后得到的数据是i = 7,CPU先从内存中将数据获取读入寄存器中,在第一个线程A时间片到了被切换出来,上下文信息保存寄存器的值,程序计数器保存下一条指令,返回给了控制该线程task_struct中,此时切换到线程B,CPU又会执行线程B,线程B会从内存中加载这个值,进行

2020-12-06 22:02:49 1605 1

原创 进程信号------信号量

信号量信号量不是为了传输数据,而是为了进程控制信号量的实现 : 计数器 + PCB等待队列PCB等待队列是放获取不到信号量的进程互斥:如何保证互斥?3.1:计数器的值只能为0或者1,当计数器的值为0的时候,表示资源不可以被访问,当计数器值为1的时候表示资源可以被访问3.2:初始计数器值为1,表示可以访问资源3.3:获取信号量3.3.1 对信号量中的计数器进行预减操作(减1)3.3.2 判断预减之后的值小于0:不能信号量,被放到了PCB等待队列中进行等待4等于0:可以获取到信号量,对信

2020-12-06 15:54:52 312 1

原创 消息队列

消息队列在内核中是链表实现的,链表中每个元素都是有类型的,不同类型有优先级的区分进程在消息队列中获取数据的时候,保证先进先出接口:int msgget(key_t key, int msgflg); //获取消息队列向消息队列中发送数据int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);消息队列接收数据ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, l

2020-12-04 18:34:45 147

原创 共享内存

共享内存1:原理**1:共享内存是在物理内存上开辟了一段空间2:不同的进程可以通过页表映射将开辟的物理内存映射到自己的共享区3:不同进程在代码当中操作共享区当中的虚拟地址,以达到操作物理内存,从而实现不同进程进行进程间通信**如何获取共享内存? #include <sys/ipc.h> #include <sys/shm.h> int shmget(key_t key, size_t size, int shmflg);key_t : 共享内存标识,只

2020-12-04 18:14:34 354

原创 进程间通信

什么是进程间通信?进程和进程交换数据每个进程都有自己独立的虚拟地址空间,促使了进程独立,,同样带来了进程和进程之间相互协作的问题。进程间通信的几种方式管道(数据传输)共享内存(数据共享)消息队列(数据传输)信号量(进程控制)为什么会有进程间通信?进程虚拟地址空间 : 每一个进程都有自己独立的进程虚拟地址空间,造成了进程独立,每一个进程和每一个进程之间的数据都是独立的。目前最大的进程间通信是“网络”管道匿名管道管道的本质 : 是内核中的一块内存,相当于内核为进程间通信创建的缓冲区

2020-12-02 22:11:06 167

原创 原子性理解

原子性核心点:多个进程有可能会访问同一个CPU,从而导致一个进程在访问CPU的时候,时间片到了之后,就让出CPU资源。当CPU再度切换会该进程的时候依靠这两个找到下条执行指令原子性:非黑即白 ,要么操作完成了,要么操作没有完成,不存在中间状态。上下文信息:保存的是寄存器当中的值程序计数器:保存到是程序下一条执行的指令中途任意一次执行过程都可能被打断...

2020-12-02 19:38:17 475

原创 什么是防御式编程?

1:参数校验对于传入参数进行检验2:对调用的返回值进行差错处理核心点:代码的健壮性。

2020-12-02 18:34:57 312

用函数实现二分法查找数的下标 整型数组元素

设计函数能够用二分法查找元素对应下标,同时可以检测出用户是否输入有误,鲁棒性较好。

2019-09-22

practicefiunction.c

C语言用函数解决一些问题,今后的代码中不会再主函数中出现过多冗杂的语句

2019-09-22

空空如也

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

TA关注的人

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