自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 LeetCode的股票问题

LeetCode的股票问题算法思想:这里只需要记录买股票的最低价格点,并且算一下如果我在例是最低价格买入,那么今天卖出能赚多少钱,一次遍历,取最大值即可。核心思想就是一次遍历找到最大利润和最小的价格。这里的时间复杂度是O(n)class Solution {public: int maxProfit(vector<int>& prices) { ...

2020-05-16 22:03:12 463

原创 LeetCode72 编辑距离

LeetCode72 编辑距离算法思想:这是一个经典的笔试面试题。这里用到DP的方法求解,dp(i)(j)表示的是第一个字符串的第i个位置和第二个字符串的第j个位置的编辑距离。要计算这个编辑距离就可以从dp(i-1)(j-1)和dp(i-1)(j)和dp(i)(j-1)这几个角度去考虑。当第i-1个字符和第j-1个字符相等的时候,dp(i)(j)=dp(i-1)(j-1),否则的话,可能是修改...

2020-05-16 22:02:54 548

原创 中科大软件工程考研经验贴

在考研结束了一年多之后,本科母校的辅导员找到我,让我写一个考研相关的文章分享一下经验,于是就有了这个考研经验贴。希望能带给考研的学弟学妹们一点点启发。

2020-05-13 19:20:54 3123 2

原创 使用Selenium对QQ邮箱登录页面进行自动化测试

使用Selenium对QQ邮箱登录页面进行自动化测试1.测试需求Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等。这个工具的主要功能包括:测试与浏览器的兼容性——测试你的应用程序看是否...

2020-04-16 09:26:42 5134 3

原创 WEB性能测试工具webbench

WEB性能测试工具webbench1.webbench介绍​ webbench是一个轻量的压测工具,可以对网站模拟并发请求,控制时间,是否使用缓存,是否等待服务器回复等等。可以测出中小型网站的承受能力。webbench的标准测试可以展示服务器的两项内容:每秒钟相应请求数和每秒钟传输数据量。webbench支持对含有SSL的安全网站例如电子商务网站进行静态或者动态的性能测试。webbench最多...

2020-04-16 08:14:47 547

原创 《Linux内核设计分析》 第二章 读书笔记 从内核出发

**《Linux内核设计分析》 读书笔记 第二章 从内核出发 **内核开发的特点:1.内核编程时既不能访问C库也不能访问标准的C头文件​ 这就是一个先有鸡还是先有蛋的问题了,大部分常用的C库函数在内核中已经得到了实现2.内核编程必须使用GNU C内核代码中使用到的C语言扩展内联函数:函数在它调用的位置展开,可以消除函数调用和返回带来的开销(寄存器存储和恢复),由于编译器会把调用函数的代...

2020-04-05 18:04:21 249

原创 《Linux内核设计与实现》 第一章 读书笔记 Linux内核简介

《Linux内核设计与实现》第一章 Linux内核简介 读书笔记面试被怼了Linux内核,于是决定好好看一下这本书。作为经典书籍,Linux内核设计与实现是一本很重要的书籍。在大学本科的课程中已经学习过有关操作系统的内容,但只是比较粗略的学习。所以在这里看下《Linux内核设计与实现》,希望能对Linux内核有更加深入的理解。第一章只是比较简单的介绍了Linux内核,包括它的历史,操作系统和内...

2020-04-05 14:26:30 230 1

原创 LeetCode376摆动序列

LeetCode376摆动序列class Solution {public: int wiggleMaxLength(vector<int>& nums) { nums.erase(unique(nums.begin(),nums.end()),nums.end()); if(nums.size()<=2) return nu...

2020-04-05 09:18:12 126

原创 闫氏DP分析法

闫氏DP分析法本节是学习了B站一个大佬up主大雪菜的DP分析方法,这个UP主的很多解题思路都总结的很好,之所以叫闫氏分析法是因为UP主姓闫,这是听课笔记。下面是课程链接:https://www.bilibili.com/video/BV1X741127ZM?from=search&seid=1472099735408379551核心:从集合角度分析DP问题1.状态表示 f(i)...

2020-04-02 21:30:04 7487 2

原创 《后台开发核心技术与应用实践》第四章 读书笔记 编译

《后台开发核心技术与应用实践》第四章 读书笔记 编译1.编译与链接预处理预处理使.cpp文件预处理成.i文件g++ -E helloworld.cpp -o helloworld.i预处理是处理以"#"开头的预编译指令比如展开宏定义,处理所有的条件预编译指令#if #elif处理#include指令,过滤注释内容,添加行号和文件名标识编译编译就是进行词法分析、语法分析、语义...

2020-03-25 11:44:27 131

原创 数据库事物

数据库事物1.事物的四大特性(ACID)原子性:事物是最小的执行单位,不允许分割,事物的原子性确保动作要么全部完成,要么完全不起作用。一致性:执行事物前后,数据保持一致,多个事物对同一个数据读取的结果是相同的。隔离性:并发访问数据库时,一个用户的事物不能被其它事物干扰,各并发事物之间数据库是独立的。持久性:一个事物被提交之后,对数据库种的数据的改变是持久的,即使数据库发生故障也不应该对其...

2020-03-24 21:32:20 181 1

原创 数据库索引

数据库索引1.索引的优缺点索引的优点 : 可以加快检索速度,使用索引,在查询的过程中,使用优化隐藏起,提高系统的性能。索引的缺点 : 创建索引和维护索引要耗费时间,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,会降低增删改的执行效率。索引需要额外的空间。2.索引使用的场景where : 根据id查询记录,id字段仅建立了主键索引,SQL执行可选的索引,如果有多个,最终会选...

2020-03-23 11:49:38 200

原创 数据库存储引擎

数据库存储引擎今天面试被问到关于数据库索引的相关问题,没答出来,所以整理如下:1.数据库的引擎存储引擎:MySQL中的数据、索引以及其它对象是如何存储的,是一套文件系统的实现。常用的存储引擎如下:InnoDB :InnoDB引擎提供了对数据库ACID事物的支持。提供了行级锁和外键的约束。设计目标是处理大数据容量的数据库系统。MyISAM引擎 :(原本是MySQL默认引擎)不提供事物的...

2020-03-22 21:26:05 166

原创 工程化编程实战callback接口学习

工程化编程实战callback接口学习一、下载源代码,编译运行相关代码运行Ubuntu环境,将老师给的代码下载下来,用tar -zxvf 命令解压使用gcc工具进行编译,这里用到的命令是gcc linktable.c menu.c -o ./se2020​ 这个时候会发现报错,出现了警告,原因是menu.c中缺少了string类库,无法使用strcmp导入include&l...

2020-03-19 09:04:32 387

原创 Reactor模式和Proactor模式

Reactor模式和Proactor模式**Reactor模式要求主线程只负责监听文件描述上是否有事件发生,有的话就立即将该事件通知工作线程。**除此之外,主线程不做任何其它实质性的工作,读写数据和接受新的连接以及处理客户请求都在工作线程中完成。同步I/O模型实现的Reactor模式的工作流程是:主线程往epoll内核事件表中注册socket上的读就绪事件。主线程调用epoll_w...

2020-03-14 20:53:26 212

原创 剑指offer13 机器人的运动范围

剑指offer13 机器人的运动范围class Solution {public: int getSingleSum(int x){ int s=0; while(x){ s+=x%10; x/=10; } return s; } int getSum(pa...

2020-03-07 19:36:45 202

原创 《后台开发核心技术与应用实践》第三章 读书笔记 常用STL的使用

《后台开发核心技术与应用实践》第三章 读书笔记第三章 常用STL的使用STL是什么STL使一个标准模板库,是一个高效C++程序库。stringstring类的底层是一个字符串指针。普通构造函数String::String(const char *str){ if(str == NULL){ m_data = new char[1]; ...

2020-02-29 09:44:31 273

原创 LeetCode中关于二叉树和递归的相关题目解法

二叉树和递归递归结构中必须包含两个部分,一个是递归终止条件,一个是递归过程。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), ...

2020-02-27 11:22:18 161

原创 使用优先队列解决LeetCode347前K个高频元素

使用优先队列解决LeetCode347前K个高频元素优先队列也是队列,不同于普通队列是队头队尾元素进行出队和入队的操作,优先队列是寻找队列中的最大值或者最小值来进行操作。优先队列的底层实现是堆。对于堆要熟悉到白板编程的程度。C++中的优秀队列容器是priority_queue.#include<iostream>#include<queue>#include&l...

2020-02-26 21:17:45 294

原创 二叉树的先序遍历,中序遍历,后序遍历,层次遍历(递归和非递归)

二叉树的先序遍历,中序遍历,后序遍历,层次遍历(递归和非递归)先序遍历二叉树的先序遍历是进行先根遍历,接下来是左子树,然后是右子树这样的顺序。void preorder(BiTree T){ if(T!=NULL){ visit(T); preorder(T->left); preorder(T->right); }...

2020-02-25 09:46:13 1420

原创 生产者消费者模型

生产者消费者模型生产者消费者模型是进程间同步互斥的经典问题。生产者负责生产产品,消费者负责消费产品。但是生产者和消费者必须互斥的访问仓库。下面实现一个用链表动态分配空间的生产者消费者模型。#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<pthread.h>#de...

2020-02-23 12:12:05 134

原创 设计模式之工厂模式

设计模式之工厂模式什么是工厂模式:实例化对象,用工厂方法代替new操作。工厂模式包括工厂方法模式和抽象工厂模式。抽象工厂模式是工厂方法模式的扩展。工厂模式定义一个接口来创建对象,但是让子类来决定哪些类需要被实例化。适合工厂模式的情形:有一组类似的对象需要创建在编码时不能预见需要创建哪种类的实例系统需要考虑扩展性,不应依赖于产品类实例如何被创建、组合和表达的细节。工厂模式就是要低耦合...

2020-02-19 11:26:23 126 1

原创 设计模式之单例模式

设计模式之单例模式设计模式是一套被反复使用的,多数人知晓的代码设计经验的总结使用设计模式是为了可重构用代码什么是单例模式:有些对象只需要一个比如配置文件、工具类、线程池、缓存、日志对象等。此时创造出多个实例,就会导致许多问题,占用过多资源,违反一致性原则等待。保证某个实例有且只有一个就是单例模式。常用的单例模式有懒汉模式和饿汉模式。饿汉模式:在类加载时就已经创建实例public cla...

2020-02-19 10:41:34 140

原创 线程

线程线程的概念:线程是一个进程内部的控制序列,一切进程至少有一个执行线程进程和线程的区别:进程是资源分配的基本单位线程是程序执行的最小单位线程共享进程数据,但是也拥有自己的一部分数据一个进程的多个线程共享同一地址空间,定义一个函数,各线程中都可以调用,定义一个全局变量,各线程都可以访问。还共享文件描述符表,每种信号的处理方式,当前工作目录,用户id和组id线程的优点:创建一个...

2020-02-18 16:11:28 110

原创 LeetCode219存在重复元素Ⅱ

LeetCode219存在重复元素Ⅱclass Solution {public: bool containsNearbyDuplicate(vector<int>& nums, int k) { unordered_set<int> record; for(int i=0;i<nums.size();i++){...

2020-02-18 10:44:47 169

原创 《后台开发核心技术与应用实践》 第二章 读书笔记

《后台开发核心技术与应用实践》 第二章 读书笔记第二章 面向对象的C++类与对象类,是创建对象的模板;对象,是类的实例。类是抽象的,不占用存储空间;对象是具体的,占用存储空间。类与结构体的区别:struct中的成员默认是public,而class中默认是private。在C语言里,struct不能定义成员函数,在C++中,增加了class类型后,扩展了struct的功...

2020-02-17 16:59:11 244 1

原创 二分查找的两个模板

二分查找二分查找的思想想必大家都很熟悉了,但是把二分查找的思想落实到代码层面还是有一点小困难的。这也就是为什么二分的思想提出很多年后才有了第一个没有bug的二分查找代码。二分查找需要注意一点就是一定要在有序的数列中。二分查找代码的实现难点在于边界情况的处理。template<typename T>int binarySearch(T arr[],int n,T target)...

2020-02-12 19:58:34 242

原创 《后台开发核心技术与应用实践》第一章 读书笔记

《后台开发核心技术与应用实践》第一章 读书笔记第一章 C++编程常用的技术第一个C++程序#include<>与#include” “的区别是:#include<>用来包含系统提供的头文件#include” “用来包含程序员自己编号的头文件主函数是所有C++程序的运行起始点。不管它的位置在哪里,主函数的带啊总是在程序开始运行时第一个被执行函数...

2020-02-12 17:35:30 170

原创 守护进程

守护进程什么是守护进程?守护进程也叫做精灵进程,是运行在后台的特殊进程。独立于控制终端并且周期地执行某种任务或者等待处理某些发生的时间。Linux的大多数服务器是守护进程来实现的。比如ftp服务器、web服务器、ssh服务器等。Linux系统启动时会启动很多的系统服务进程,这些系统服务进程没有控制终端,不能直接和用户来交互。其它的进程都是在用户登录或者运行程序时创建,在运行结束或者用户注销时...

2020-02-12 16:13:33 210

原创 LeetCode中的BFS和DFS专题

LeetCode中的BFS和DFS专题BFS广度优先,是按照层来扩展的;DFS深度优先,是“一条道走到黑”。如果是一个规模为2的n次方的问题,那么BFS的时间复杂度是2的n次方,而DFS的时间复杂度是n。一般用BFS来解决迷宫的最短路径问题,这是因为DFS走到终点的时候可能是绕了一大圈才到达终点。BFS1.空间大,是呈指数增长的2.不会有爆栈的风险,申请的空间是堆空间3.可以搜索最短...

2020-02-10 21:56:31 407

原创 如何测评一个软件工程师的计算机网络知识水平和编程能力

如何测评一个软件工程师的计算机网络知识水平和编程能力在网络程序设计这门课中,我们首先学了与网络相关的命令,后面学习了Socket网络编程,写了一个小小的聊天室,在这里了解了网络接口API和Linux Socket API之间的关系。又学习了Socket与系统调用的相关知识。深入理解了TCP协议及其源代码。了解了收发数据流的处理过程。这里我们选取了408中的相关真题来考察计算机网络知识水平,作为...

2020-02-06 09:45:03 1628 1

原创 Socket与系统调用深度分析

Socket与系统调用深度分析一、系统调用什么是系统调用呢?来了解这个问题之前我们先来分析一下什么是用户态,什么是内核态。用户态是非特权状态,简单来说,就是不允许执行某些可能存在危险的操作的状态,在这种状态下,进程只能在各自的用户空间当中运行。内核态也就是特权状态,也就是具有可以具有权限来执行某些可能存在危险的操作。当一个进程执行系统调用,由于这个进程在用户态下没有足够的权限,那么它就会陷入...

2020-02-06 09:41:03 400

原创 深入理解TCP协议及其源代码

深入理解TCP协议及其源代码本文参考了《TCP/IP协议族》第四版进程到进程的通信与UDP一样,TCP也是使用端口号提供进程到进程之间的通信。下表是我们常见的TCP使用的熟知端口号。端口协议说明7Echo把收到的数据报回送到发送方9Discard丢弃收到的任何数据报11Users活跃的用户20和21FTP文件传输协议23TEL...

2020-02-06 09:35:26 3018

原创 构建调试Linux内核网络代码的环境MenuOS系统

构建调试Linux内核网络代码的环境MenuOS系统如何构建一个可以调试Linux内核网络代码的环境MenuOS呢?在Ubuntu下构建一个MenuOS首先,我们要下载Linux内核的源代码。网址是:http://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.0.1.tar.xz然后用命令进行解压。xz -d linux-5.0.1.tar.x...

2019-12-09 17:52:27 252

原创 利用java的Socket实现一个简单hellohi聊天程序

利用java实现一个简单hello/hi聊天程序首先,我们来用java实现一个简单的hello/hi聊天程序。在这个程序里,我学习到了怎么用socket套接套接字来进行编程。简单理解了一些关于socket套接字和底层调用的关系。关于java的封装思想,我学会了一些东西,java里真的是万物皆对象。还学到了一点多线程的知识。TCP在这里,不得不先介绍以下TCP。TCP是传输层面向连接的协议。提...

2019-12-08 21:46:26 929 2

原创 ping命令和traceroute命令

ping命令和traceroute命令ping命令和traceroute命令是ICMP的排错工具。pingping命令的功能是检测某个主机是否能够响应。ping命令用到的是ICMP分组。源主机发送一个ICMP回送请求报文,如果目标主机能够响应,就会返回一个ICMP回送回答报文。ping在回送请求和回送回答报文中设置了标识符字段。每发送一个新的报文序号就会增加。ping命令还可以用来计算往返的...

2019-11-27 21:57:15 2008 2

原创 leetcode151翻转字符串单词

leetcode151.翻转字符串里的单词题目描述:给定一个字符串,逐个翻转字符串中的每个单词示例:输入:“the sky is blue”输出:“blue is sky the”再这里需要逐一的是输入的字符串可以在前面或者后面包含多余的空格,但反转后的单词间的空格只能减少到一个。思路:在这里考虑进行两次翻转,第一次是将"the sky is blue"翻转成“eht yks si e...

2019-10-27 23:28:31 297

原创 TCP三次握手与四次挥手

TCP三次握手与四次挥手TCP是传输层面向连接的协议,它向上层提高的是可靠的服务。面向连接通常都需要经过三个步骤。第一步是连接的建立;第二步是传输数据;第三步是数据传输结束后连接的释放。TCP在建立连接的过程中需要有三个步骤,也就是通常我们所说的“三次握手”第一步:主机A向服务器B发送一个连接建立请求报文,也就是A向B说,嘿,我想给你发信息啦。这里的SYN置为1,也就是建立同步请求,seq...

2019-10-12 22:09:05 138 1

原创 最大连续子向量和

最大连续子向量和(一维模式识别)问题描述:输入n个数,输出其中连续的几个数的最大和。例如,如果输入数中包含以下10个元素,则输出x[2…6]的和,18731 -41 59 26 -53 58 97 -93 -23 84则从x[2]到x[6]的所有元素相加的值为最大连续子向量和。解法1基本思路:对数组进行扫描,设置i从0到n,设置j从i到n,然后累加从i到j的元素的和。通过打擂台的方法更...

2019-10-11 20:53:46 285 3

原创 leetcode49题字母异位词分组

leetcode49题字母异位词分组给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。比如说“eat”,“tea“,”tan",“ate”,“nat”,“bat”,那么输出的结果就是[“ate”,“eat”,“tea”][“nat”,“tan”][“bat”]在这里我们认为只有字母顺序不同的字符串是一起的,于是我们考虑到能否在这些只有字母不同的字符串...

2019-10-10 20:23:32 121

空空如也

空空如也

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

TA关注的人

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