自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(134)
  • 资源 (1)
  • 收藏
  • 关注

原创 【后台研发岗】面试精华总结(地表最全)。数据库专题(持续更新)

文章目录一、事务概念ACID1. 原子性(Atomicity)2. 一致性(Consistency)3. 隔离性(Isolation)4. 持久性(Durability)AUTOCOMMIT二、并发一致性问题丢失修改读脏数据不可重复读幻影读三、封锁封锁粒度封锁类型1. 读写锁2. 意向锁封锁协议1. 三级封锁协议2. 两段锁协议MySQL 隐式与显示锁定四、隔离级别未提交读(READ UNCOMMITTED)提交读(READ COMMITTED)可重复读(REPEATABLE READ)可串行化(SERIA

2021-07-12 20:45:48 481 1

原创 算法:海量数据处理

在面试中我们会经常遇到和海量数据处理相关的问题,在这里我们将问题进行一个汇总,保证将来我们在遇到海量数据相关问题的时候能够快速解答。一.100亿个32位的整数,如何最快找到中位数,并要求时间复杂度为O(N)?如果内存能够全部装下:直接使用快速排序。如果内存不能够全部装下:先将第一个字节,也就是前8位进行分桶,可以分为256个桶,也就是将100亿的整数分别按照第一个字节的大小装入这256个桶(桶是外置文件)之中;如果内存仍然不能够全部装下中位数所在桶中的全部数据,那再将该桶按照第二个字节的大小进行划分

2021-03-26 12:11:14 268

原创 关于我在实际面试BAT中遇到的一些C++题

1.假设C的地址为0x100,根据以下程序求 A的地址 和 B的地址?class A{public: virtual void func1(){ }};class B{public: virtual void func2() { }};class C:public A, public B{public: virtual void func3() { }};int main(){

2021-03-04 10:57:23 505 1

原创 哈希表(散列表) C++实现

文章目录哈希函数哈希函数的构造方法处理散列冲突的方法散列表性能分析散列表C++代码实现哈希函数哈希函数就是 关键字Key 到 值Value 的映射:Value = f(Key)Value反映的是关键字Key的存储地址。哈希函数的构造方法直接定址法f(Key) = a * Key + b例如存放不同出生年份的人口数量,出生年份是关键字,那么可以用直接定址法。直接定址法的优点是简单均匀,也不会产生冲突;缺点是该方法适合表比较小且连续的情况,所以 该方法虽然简单但是并不常用。数

2021-02-24 15:51:53 1501 1

原创 树(七):红黑树(RBT) C++实现

文章目录

2021-02-23 12:40:01 428

原创 树(六):B树与B+树

文章目录前言B树B+树B+树与B树的区别前言之前讲到的树,它本身只能够存储一个元素,如果在元素非常多的时候,树的孩子和树的高度就会很大,读取的过程中势必会消耗更多的时间。为了避免这一现象,我们引入了同一个节点中可以存储多个元素的多路查找树。多路查找树不同于二叉树,二叉树只能由两个孩子,而多路查找树可以有多个孩子。例如2-3树的每个节点可以有两个或者三个孩子,2-3-4树2-3树2-3树是一棵多路查找树,每一个节点都具有两个孩子(称为2节点)或者三个孩子(称为3节点)。2-3树的所有叶子都需

2021-02-18 18:26:35 1499

原创 leetcode精选高频hard题目

leetcode精选高频hard题目4.寻找两个正序数组的中位数60.排列序列37.解数独51.N皇后52.N皇后2149.直线上最多的点数42.接雨水135.分发糖果41.缺失的第一个正数25.K个一组翻转链表65.有效数字28.实现strStr()132.分割回文串244.通配符匹配10.正则表达式匹配97.交错字符串72.编辑距离32.最长的有效括号84.柱状图中最大的矩形85.最大矩阵239. 滑动窗口最大值99.恢复二叉搜索树124.二叉树中的最大.

2021-02-01 09:56:28 3032

原创 leetcode算法专题训练:十五.细节实现专题

十五.细节实现专题7.整数反转9.回文数56.合并区间57.插入区间14.最长公共前缀5.最长回文子串3.无重复字符的最长子串76.最小覆盖子串30.串联所有单词的子串128.最长连续序列54.螺旋矩阵59.螺旋矩阵26.Z字形变换68.文本左右对齐剑指 Offer 61. 扑克牌中的顺子十五.细节实现专题7.整数反转题目描述:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。假设我们的环境只能存储得下 32 位的有符号整数,则其数值.

2021-02-01 09:55:58 258

原创 leetcode算法专题训练:十四.位操作专题

十四.位操作专题50.Pow(x,n)136.只出现一次的数字137.只出现一次的数字2260.只出现一次的数字389.格雷编码剑指 Offer 64. 求1+2+…+n剑指 Offer 65. 不用加减乘除做加法29.两数相除191. 位1的个数十四.位操作专题50.Pow(x,n)题目描述:实现 pow(x, n) ,即计算 x 的 n 次幂函数。-100.0 < x < 100.0n 是 32 位有符号整数,其数值范围是 [−2.

2021-02-01 09:55:28 256

原创 leetcode算法专题训练:十三.图专题

十三.图专题133.克隆图十三.图专题133.克隆图题目描述:给你无向 连通 图中一个节点的引用,请你返回该图的 深拷贝(克隆)。图中的每个节点都包含它的值 val(int) 和其邻居的列表(list[Node])。class Node {public int val;public List neighbors;}测试用例格式:简单起见,每个节点的值都和它的索引相同。例如,第一个节点值为 1(val = 1),第二个节点值为 2(val = .

2021-02-01 09:54:58 225

原创 leetcode算法专题训练:十一.贪心法专题

十一.贪心法专题55.跳跃游戏45.跳跃游戏2121.买卖股票的最佳时机122.买卖股票的最佳时机2123.买卖股票的最佳时机311.盛最多水的容器十一.贪心法专题55.跳跃游戏题目描述:给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/jump-game解题思路:贪心法,设置能够到.

2021-02-01 09:53:27 300

原创 leetcode算法专题训练:十二.动态规划专题

十二.动态规划专题62.不同路径63.不同路径2剑指 Offer 13. 机器人的运动范围剑指 Offer 47. 礼物的最大价值64.最小路径和120.三角形最小路径和118.杨辉三角119.杨辉三角2343. 整数拆分53.最大子序和5.最长回文子串44.通配符匹配10.正则表达式匹配97.交错字符串72.编辑距离剑指 Offer 46. 把数字翻译成字符串91.解码方法115.不同的子序列139.单词拆分140.单词拆分2剑指 Offer 49. 丑数剑.

2021-02-01 09:51:52 381

原创 leetcode算法专题训练:十.DFS专题

十.DFS专题130.被围绕的区域131.分割回文串132.分割回文串287.扰乱字符串剑指 Offer 13. 机器人的运动范围36.有效的数独37.解数独51.N皇后52.N皇后2149.直线上最多的点数93.复原IP地址39.组合总合40.组合总合222.括号生成79.单词搜索十.DFS专题130.被围绕的区域题目描述:给定一个二维的矩阵,包含 ‘X’ 和 ‘O’(字母 O)。找到所有被 ‘X’ 围绕的区域,并将这些区域.

2021-01-29 11:22:12 443

原创 leetcode算法专题训练:九.BFS专题

九.BFS专题127.单词接龙126.单词接龙2九.BFS专题127.单词接龙题目描述:给定两个单词(beginWord 和 endWord)和一个字典,找到从 beginWord 到 endWord 的最短转换序列的长度。转换需遵循如下规则:每次转换只能改变一个字母。转换过程中的中间单词必须是字典中的单词。说明:如果不存在这样的转换序列,返回 0。所有单词具有相同的长度。所有单词只由小写字母组成。字典中不存在重复的单词。你可以假设 be.

2021-01-29 11:21:36 160

原创 leetcode算法专题训练:八.暴力枚举专题

八.暴力枚举专题78.子集90.子集277.组合46.全排列47.全排列260.排列序列31.下一个排列17.电话号码的字母组合八.暴力枚举专题78.子集题目描述:给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/subsets解题思路:子集的本质是求 组合 ,此题也实质上是 组合 的变形题,用D.

2021-01-29 11:21:04 365

原创 leetcode算法专题训练:七.查找专题

七.二分法专题33. 搜索旋转排序数组81. 搜索旋转排序数组 II153. 寻找旋转排序数组中的最小值154. 寻找旋转排序数组中的最小值 II34. 在排序数组中查找元素的第一个和最后一个位置剑指 Offer 53 - II. 0~n-1中缺失的数字35.搜索插入位置69.x的平方根74.搜索二维矩阵4.寻找两个正序数组的中位数七.二分法专题33. 搜索旋转排序数组题目描述:升序排列的整数数组 nums 在预先未知的某个点上进行了旋转(例如, [0,1,2,4,5.

2021-01-29 11:20:32 338

原创 leetcode算法专题训练:六.排序专题

六.排序专题88.合并两个有序数组21.合并两个有序链表23.合并K个升序链表147.对链表进行插入排序148.排序链表75.颜色分类剑指 Offer 40. 最小的k个数剑指 Offer 41. 数据流中的中位数剑指 Offer 45. 把数组排成最小的数剑指 Offer 51. 数组中的逆序对六.排序专题88.合并两个有序数组题目描述:给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 .

2021-01-29 11:20:01 287

原创 leetcode算法专题训练:五.树专题

五.树专题144.二叉树的前序遍历94.二叉树的中序遍历145.二叉树的后序遍历102.二叉树的层序遍历107.二叉树的层次遍历2103.二叉树的锯齿形层次遍历100.相同的树101.对称二叉树226. 翻转二叉树剑指 Offer 26. 树的子结构110.平衡二叉树111.二叉树的最小深度104.二叉树的最大深度114.二叉树展开为链表116.充填每个节点的下一个右侧节点指针117.充填每个节点的下一个右侧节点指针2105.从前序与中序遍历序列构造二叉树106.从中.

2021-01-29 11:19:06 460

原创 leetcode算法专题训练:四.栈与队列专题

四.栈和队列专题剑指 Offer 09. 用两个栈实现队列剑指 Offer 30. 包含min函数的栈剑指 Offer 59 - II. 队列的最大值剑指 Offer 31. 栈的压入、弹出序列20.有效的括号32.最长的有效括号150.逆波兰表达式求值84.柱状图中最大的矩形85.最大矩阵239. 滑动窗口最大值四.栈和队列专题剑指 Offer 09. 用两个栈实现队列题目描述:用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 de.

2021-01-29 11:17:35 190

原创 leetcode算法专题训练:三.字符串专题

三.字符串专题151. 翻转字符串里的单词剑指 Offer 05. 替换空格剑指 Offer 58 - II. 左旋转字符串125.验证回文串28.实现strStr()剑指 Offer 20. 表示数值的字符串65.有效数字8.字符串转换整数67.二进制求和415.字符串相加43.字符串相乘12.整形转罗马数字13.罗马数字转整形38.外观数列71.简化路径58.最后一个单词的长度三.字符串专题151. 翻转字符串里的单词给定一个字符串,逐个翻转字符串中的每.

2021-01-29 11:16:59 650

原创 leetcode算法专题训练:二.链表专题

二.链表专题2.两数相加445.两数相加2206.反转链表92.反转链表225.K个一组翻转链表86.分隔链表83.删除排序链表中的重复元素82.删除排序链表中的重复元素261.旋转链表19.删除链表的倒数第N个节点24.两两交换链表中的节点138.复制带随机指针的链表141.环形链表142.环形链表2876.链表的中间节点剑指 Offer 52. 两个链表的第一个公共节点143.重排链表146.LRU缓存机制二.链表专题2.两数相加题目描述:给出两个.

2021-01-29 11:16:05 245

原创 leetcode算法专题训练:一.数组专题

一.数组专题26.删除排序数组中的重复项80.删除排序数组中的重复项2剑指 Offer 39. 数组中出现次数超过一半的数字剑指 Offer 57. 和为s的两个数字剑指 Offer 57 - II. 和为s的连续正数序列1.两数之和15.三数之和16.最接近的三数之和18.四数之和27.移除元素11.盛最多水的容器42.接雨水48.旋转图像66.加一70.爬楼梯73.矩阵置零134.加油站135.分发糖果剑指 Offer 03. 数组中重复的数字41.缺失的第一.

2021-01-29 11:14:42 715

原创 【后台研发岗】面试精华总结(地表最全)。信息安全专题(持续更新)

文章目录信息安全的四个特性是什么?简述有哪些加密算法?HTTPS协议是什么?为什么要使用HTTPS?信息安全的四个特性是什么?机密性:防止信息被窃听,对应的技术有对称加密算法和非对称加密算法。完整性:防止信息被篡改,对应的技术有散列算法,数字签名。身份认证性:防止黑客伪装成发送者,对应的技术有数字签名。不可否认性:防止发送者事后否认自己发送过,对应的技术有数字签名。简述有哪些加密算法?在如今的信息安全领域,加密算法可以分为以下四类:哈希算法对称加密算法非对称加密算法数字签名算

2020-11-02 16:17:17 262

原创 【后台研发岗】面试精华总结(地表最全)。网络编程专题(持续更新)

文章目录阻塞、非阻塞、同步、异步的区别?IO的五种模型?epoll/poll/select 的区别?epoll中ET,LT的区别?Reactor/Proactor模式是什么?大规模连接上来后,并发模型怎么设计?select返回可读,但是使用read一直只能读到0字节,什么情况?connect函数长时间阻塞该怎么办?socket什么情况下可读?UDP通信中调用connect有什么作用?和TCP连接中的connect有什么区别?keepalive是什么?如何使用?Socket编程中,如果client断开,服务器

2020-11-02 12:31:44 268

原创 【后台研发岗】面试精华总结(地表最全)。计算机网络专题(持续更新)

OSI七层模型?

2020-11-02 09:31:00 631

原创 【后台研发岗】面试精华总结(地表最全)。操作系统+Linux专题(持续更新)

进程是什么?有哪几种状态?进程是运行中的程序,程序只是静态的指令的集合。进程包括指令,数据段以及PCB(进程控制块)。是操作系统分配资源的最小单位。进程有三种状态:阻塞态,就绪态,执行态以read函数进程读取管道中内容为例:当管道中没有数据时,进程read等待管道另一端写数据,此时进程为阻塞态。写端向管道中写数据,进程read发现数据可读,等待CPU分配时间片,此时进程由阻塞态转为就绪态。当CPU分配给read进程时间片,进行读取数据,进程由就绪态变为执行态。...

2020-10-26 17:00:15 300

原创 【后台研发岗】面试精华总结(地表最全)。C/C++专题(持续更新)

简述 const 关键字?const的作用是告诉编译器某个值是不变的,可以理解成只读,对变量起到保护作用。const可以用于以下方面:修饰普通变量需要在一开始就进行初始化;修饰指针根据在 * 前后可以分为常量指针和指针常量,当然也可以前后都修饰,如const int* a , int* const a,const int * const a。修饰函数中的参数与返回值修饰函数中的参数:const在函数的参数中可以保护指针不被修改,如strcpy(char* des, c.

2020-10-23 16:02:48 290

原创 redis数据库 C++封装

前言Redis是一种内存数据库,常用做Cache缓存使用,内置常用的五种数据结构:StringListHashmapSetZsetLinux下安装redis在 Ubuntu 系统安装 Redis 可以使用以下命令:$sudo apt-get update$sudo apt-get install redis-server启动 Redis$ redis-server查看 redis 是否启动?$ redis-cli --rawraw的作用是让中文能够正确显示出来。以上

2020-07-17 17:04:53 673 2

原创 mysql数据库 C++封装

前言为什么要使用mysql数据库?设想一下有一个很大的(如10G)数据,我们不能将之存放在内存中,只能够放在磁盘上,每一次CPU读取数据都需要进行慢到吐血的磁盘IO操作,那这时使用mysql这种关系型数据库就显得尤为重要的。记住mysql的数据也是存放在磁盘上面的,不过读取速度更快!一.关于关系型数据库mysql的介绍,网上已经有很多资料,不用我再多做介绍二.不同的环境添加mysql的链接包方式不同,在这里介绍Linux环境下的添加方法首先将mysql文件包放到 /usr/include 目

2020-07-17 09:40:09 654

原创 STL库简述

STL简述STL库包含六个大类:容器库算法库迭代器库配置器(allocator)适配器(adaptor)仿函数(函数对象)其中后四个类主要为前两个类服务。其中使用频率最高的就是容器库,迭代器库,算法库。容器库为我们提供了存储数据的数据结构,算法库则是我们操作数据结构的算法,迭代器库作为容器库和算法库的黏合剂。容器库容器库整体分为 序列型容器 , 关联型容器 , 容器适配器。1.序列型容器主要包括 list,vector,deque,set。以vector作为学习实例:S

2020-07-16 12:14:40 777 2

原创 开源项目 EchoLib并发服务器框架(轻量级Muduo)

github源码:https://github.com/Worthy-Wang/MirrorLib网络库框架简介该网络库框架模仿 陈硕的Muduo库 来实现,采用Reactor + threadpool 的模式:主线程IO,工作线程计算,能适应密集计算,不适应突发IO。学习流程推荐建议依次从Version1.0 开始学习,一直学习到 Version5.0,每一个版本都会在原版本上新增更多内容。技术核心搭建线程池框架技术亮点:基于对象线程池设计,Posix线程同步与互斥,任务队列,自动

2020-07-15 09:19:10 725 1

原创 开源项目 智能文本输入助手

github源码:https://github.com/Worthy-Wang/SpellCorrect项目简介这是一款用户输入助手的服务器,由于本人只写了后台的程序,所以用百度搜索作为示例,如果想要自己写一个页面,只需要修改最后发送的json格式即可。:项目架构1.首先搭建好线程池,启动线程时都在等待任务队列出任务2.启动封装好的服务器程序,当客户端发来请求时,将此请求封装成一个任务,加入任务队列,让子线程去完成该任务3.完成对于查询词业务逻辑的设计项目流程离线版本创建词典与索

2020-07-13 14:58:14 703 1

原创 开源项目 LightSE 轻量级搜索引擎

github源码:https://github.com/Worthy-Wang/mini_search_engine项目简介这是一款基于RSS的搜索引擎,项目展示成果如下:项目架构1.首先搭建好线程池,启动线程时都在等待任务队列出任务2.启动封装好的服务器程序,当客户端发来请求时,将此请求封装成一个任务,加入任务队列,让子线程去完成该任务3.搜索引擎类的封装,对于查询词的计算程序编写流程离线版本建立网页库与网页偏移库技术亮点:开源库tinyxml2(), 正则表达式,文件流字符

2020-07-13 11:36:40 1314 4

原创 Linux 事件触发器eventfd的使用以及C++封装

文章目录前言:为什么需要eventfd?eventfd 设计原理eventfd测试用例C++ 封装eventfd前言:为什么需要eventfd?在我们之前的学习中,进行进程/线程间通信的方法有两个:条件变量需要使用锁,线程的互斥,唤醒等机制,使用此方法来进行通信实在是很麻烦;管道管道的特点在于传送信息,并且会产生两个文件描述符,也是同样的麻烦。于是乎,eventfd便产生了,通过同一个文件描述符,能够快速的进行进程/线程间的通信。eventfd 设计原理其实简单一点看eve

2020-07-10 20:39:31 1322

原创 Linux 定时器timerfd的使用与C++封装

文章目录前言:为什么需要定时器timerfd?timerfd 设计原理timerfd 测试用例C++封装timerfd前言:为什么需要定时器timerfd?在多线程中,设置一个超时时间,当时间超时时,就会触发事件,这样的操作如果是我们自己做,那么需要使用到<time.h> 和 <sys/time.h> 中的API进行不断地更新时间,再判断有没有超时,如果超时再找到对应的触发事件。这样的操作很复杂,而且在多线程中容易出错,所以便有了timerfd.timerfd 设计原理

2020-07-10 20:10:57 940

原创 linux环境下开源库jsoncpp使用教程

前言json是一种常用的数据格式,开源库jsoncpp是专门用来解析json格式文件的C++库面对任何一种新型的开源库,我们首先应该要做的就是先阅读github上面的官方README.MD这样能够帮助我们快速了解开源库的配置。github地址:https://github.com/open-source-parsers/jsoncpp/tree/updateUnix/Linux下配置使用1.下载jsoncpp到linux上git clone https://github.com/open-

2020-06-30 17:39:27 4611 2

原创 综合交通大数据智能计算平台项目 私有云盘(功能匹配百度网盘)

github地址:https://github.com/Worthy-Wang/NetDiskFTP文件服务器设计思路:1.整体架构采用线程池结合epoll监听客户端通过sockfd与服务器通信,服务器通过sockfd进行连接新的客户端,用accept到的newfd与客户端进行通信;主线程负责向子线程分配任务,子线程负责处理任务并于客户端通信;简单命令主线程直接执行,puts 和 gets 命令交给子线程执行。2.文件系统采用虚拟文件目录设计,将所有的文件存放在一个公共目录中,自己只能看到自己

2020-06-14 16:54:19 782

原创 开源项目 聊天室

github地址:聊天室整体实现后的效果如下:根据技术实现不同,分为四个文件;1.select_pipe_ChatRoom技术包含:命名管道、Linux下文件操作、IPC共享内存、IO多路复用select使用命名管道只能双人通信.2.select_Tcp_ChatRoom技术包含:Socket编程、TCP通信、IO多路复用select3.select_Udp_ChatRoom技术包含:Socket编程、Udp通信、IO多路复用select4.epoll_Tcp_ChatRoom

2020-06-03 20:53:43 1466 5

原创 Socket网络编程:TCP连接与UDP连接

文章目录socket编程概述一.TCP通信服务端详细流程客户端详细流程案例:服务端与客户端进行TCP通信二.UDP通信socket编程概述Linux网络编程实质上就是socket编程,IP地址可以确定一个主机,端口号可以确定主机中的一个进程,socket = IP + port(端口号)这样便确定了主机中运行的进程,网络通信实质上就是进程通信。我们知道连接分为两种,可靠的TCP连接与不可靠的UDP连接,下面分别通过这两种连接来熟悉socket编程.一.TCP通信服务端:socket -&gt

2020-06-03 18:34:41 715

原创 TCP三次握手,四次挥手详解

文章目录TCP 三次握手TCP三次握手图解:TCP三次握手概述:TCP 四次挥手TCP四次挥手图解:TCP四次挥手概述:TCP三次握手,四次挥手常见面试问题:TCP 三次握手TCP三次握手图解:TCP三次握手概述:首先要明白两次握手是必须的,如果只有一次握手,无法建立可靠的连接,因为并不知道另一方有没有收到信息,所以两次握手是必须的。1.第一次握手:客户端向服务器发送请求,服务器接收到请求客户端 ——> 服务端 : SYN = 1 , seq = xSYN = 1 代表同步请求,seq

2020-06-03 17:49:15 531

WarCraft2_Equipment.mdj

C++实现:OpenJudge-3:魔兽世界之二:装备 的UML类图展示 作图工具是 StartUML

2020-04-01

空空如也

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

TA关注的人

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