自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Lebron

静心

  • 博客(77)
  • 收藏
  • 关注

原创 这样回答【什么是线程安全】

文章目录【1】不是线程的安全【2】私有的东西就不该让别人知道【3】大家不要抢,人人有份【4】只能看,不能摸【5】没有规则,那就先入为主【6】互斥锁(悲观)【7】CAS(乐观)【1】不是线程的安全面试官问:“什么是线程安全”,如果你不能很好的回答,那就请往下看吧。论语中有句话叫“学而优则仕”,相信很多人都觉得是“学习好了可以做官”。然而,这样理解却是错的。切记望文生义。同理,“线程安全”也不...

2019-12-03 10:12:51 448 1

原创 【关于网络编程高并发问题的解决方案】

文章目录思路一:每个进程/线程处理一个连接(多进程/多线程思路二:每个进程/线程同时处理多个连接(IO多路复用)实现方式1:循环处理实现方式2:select实现方式3:poll实现方式4:epoll实现方式5:封装成库要解决这一问题,从纯网络编程技术角度看,主要思路有两个:【1】 一个是对于每个连接处理分配一个独立的进程/线程(即多进程和多线程);【2】 另一个思路是用同一进程/线程来同时...

2019-11-22 15:42:18 522

原创 【多进程多线程原理】

Linux的线程实现是在核外进行的,核内提供的是创建进程的接口do_fork()。内核提供了两个系统调用_clone()和fork(),最终都用不同的参数调用do_fork()核内API。 do_fork() 提供了很多参数,包括CLONE_VM(共享内存空间)、CLONE_FS(共享文件系统信息)、CLONE_FILES(共享文件描述符表)、CLONE_SIGHAND(共享信号句柄表)和CLO...

2019-11-22 11:15:32 437

原创 【左神算法初级、进阶视频 || LeetCode题库解析视频等】

需要私

2019-11-20 10:58:43 4579 173

原创 【转】【复习:哈夫曼编码树】

文章目录引言哈夫曼二叉树构建初始队列第一步合并重新调整队列哈夫曼编码字符串编码补充原文链接---->详细图解哈夫曼Huffman编码树引言哈夫曼(Huffman)编码算法是基于二叉树构建编码压缩结构的,它是数据压缩中经典的一种算法。算法根据文本字符出现的频率,重新对字符进行编码。因为为了缩短编码的长度,我们自然希望频率越高的词,编码越短,这样最终才能最大化压缩存储文本数据的空间。  ...

2019-10-12 13:45:03 227

原创 【面试复习】| 常见排序算法手写

快速排序#include<iostream>using namespace std;int Func(int arr[], int start, int end){ int temp = arr[start]; while (start < end) { while (start < end&&arr[end] > temp) ...

2019-10-06 20:48:49 345

原创 【面试复习】| 观察者模式

复习到观察者模式又把代码重新敲了一遍。//观察者设计模式定义了对象间的一种一对多的组合关系//以便一个对象的状态发生变化时//所有依赖于它的对象都得到通知并自动刷新。//观察者模式包含观察目标和观察者两类对象,一个目标可以有任意数目的与之相依赖的观察者//一旦观察目标的状态发生改变,所有的观察者都将得到通知。#include<iostream>#include<l...

2019-10-05 23:56:10 384

原创 【MySql 面试复习】事务

文章目录事务的概念事务的特性(ACID)事务的隔离级别四种事务隔离级别事务的概念事务的概念来自于两个独立的需求:并发数据库访问,系统错误恢复。一个事务是可以被看作一个单元的一系列SQL语句的集合。事务的特性(ACID)A, atomacity 原子性事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。通常,与某个事务关联的操作具有共同的目标,并且是相互依赖的。如果...

2019-10-04 16:01:48 209

原创 【转】 | 【面试复习:进程间通信】

原文链接—>进程间的五种通信方式介绍进程间通信的方式:进程间通信主要包括管道、系统IPC(包括消息队列、信号量、信号、共享内存等)、以及套接字socket。1.管道:管道主要包括无名管道和命名管道:管道可用于具有亲缘关系的父子进程间的通信,有名管道除了具有管道所具有的功能外,它还允许无亲缘关系进程间的通信1.1 普通管道PIPE:1)它是半双工的(即数据只能在一个方向上流动),具...

2019-10-03 21:26:50 156

原创 【转】| 【最常见面试题:谈谈进程和线程的区别】

原文链接------>每个程序员都会遇到的面试问题:谈谈进程和线程的区别从资源使用的角度出发根本区别:进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位在开销方面:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。...

2019-10-03 20:21:08 232

原创 【转】| 海量数据解决思路之Hash算法

原文地址—>海量数据解决思路之Hash算法总结 :解决此类问题,一般步骤:1、hash映射2、采用hash_map 等统计3、堆/归并排序

2019-10-02 16:02:38 129

原创 【转】|【STL二级空间配置器的原理剖析和简单实现】

通俗易懂的一篇博文复习时拿来看了原文链接---->二级空间配置器的原理剖析和简单实现

2019-10-01 17:10:30 183

原创 【转】|【Linux】软链接和硬链接的区别和作用

原文地址:软连接和硬链接到底有啥作用和区别很通俗易懂的一篇博文

2019-09-29 13:13:21 252

原创 【转】|【Linux】线程同步-----条件变量

复习时看到这篇写的不错博客解决了自己的疑惑!!!----->>>linux 线程学习之条件变量

2019-09-15 19:24:37 165

原创 【Linux】基于TCP实现的大型文件(超过2G)传输项目——总结

文章目录项目框架源代码项目框架源代码

2019-08-13 16:45:43 2162 2

原创 【排序算法】——— 快速排序总结

文章目录【1】基本思想【2】快速排序法的普通版本【3】快速排序法的优化版本优化选取枢轴优化不必要的交换优化递归操作【1】基本思想快速排序算法的基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。可能从字面感觉不到他的好处,我们通过例子来...

2019-08-08 17:13:56 1113

原创 【排序算法】 ——— 归并排序总结

文章目录

2019-08-07 22:45:42 673

原创 【排序算法】——— 堆排序总结

文章目录

2019-08-07 15:33:19 812

原创 【排序算法】——— 希尔排序总结

文章目录

2019-08-06 16:30:13 1173

原创 【排序算法】——— 直接插入排序总结

文章目录

2019-08-06 16:29:16 1236

原创 【排序算法】——— 简单选择排序总结

文章目录

2019-08-06 16:28:43 1074

原创 【排序算法】——— 冒泡排序总结

文章目录

2019-08-06 16:28:21 1451

原创 【Linux】使用信号量semaphore控制多个线程按序交替打印

文章目录【1】题目描述【2】问题分析【3】示例代码【4】运行结果【1】题目描述【2】问题分析我们可以使用信号量进行同步三个线程固定打印顺序如图所示:【3】示例代码#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<pthread.h>#include<...

2019-08-05 16:41:32 2268

原创 【Linux】实现一个简单的shell命令解释器

文章目录【1】实现的功能【2】代码【3】运行结果【1】实现的功能我们所做的这个简单的shell命令解释器可以实现简单的常用的基本命令,如ls、pwd、cd、cd - 、cd ~ 等根据简单命令的定义,它的第一个参数是要执行的命令,后面的参数作为该命令的参数。要执行的命令有两种情况:一种是外部命令: 也就是对应着磁盘上的某个程序,例如 pwd、ls等等。对于这种外部命令,我们首先要到指定的...

2019-08-01 10:42:12 6696 33

原创 【模板】对于vector容器底层和空间配置器中右值引用的理解(std::move()和std::forwad())

文章目录【1】先简单实现一个空间配置器Allocator【2】自己实现一个简单的vector容器【3】再自己实现了一个简单的string字符容器【4】主函数【5】使用带右值引用参数的函数【6】使用模板再次实现代码优化【1】先简单实现一个空间配置器Allocatortemplate<typename T>struct Allocator{ T* allocate(size_t ...

2019-07-31 13:24:55 2060

原创 深入理解阻塞/非阻塞IO、同步/异步IO的区别

文章目录【1】同步、异步、阻塞和非阻塞的概念【2】阻塞IO模型【3】非阻塞IO模型【4】IO复用模型【5】信号驱动IO【6】异步IO模型【7】各种IO模型的比较【1】同步、异步、阻塞和非阻塞的概念同步:所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。例如:当程序1调用程序2时,程序1停下不动,直到程序2完成回到程序1来,程序1才继续执行下去。异步:异步的概念和同步相...

2019-07-30 12:29:07 3767 2

原创 Git从入门到熟练使用(图文并茂)

文章目录【1】git介绍【2】GitHub注册新账号【3】GitHub上创建仓库【4】git本地客户端安装配置windows安装Gitubuntu下安装Git【7】git常用命令介绍【8】Git上你应该知道的知识点【1】git介绍git是目前世界上最先进的分布式版本控制系统(对比集中式版本控制系统SVN),没有之一!github一个免费的代码远程托管仓库【2】GitHub注册新账号【st...

2019-07-29 13:28:02 2033

原创 【网络编程】|| 基于TCP实现的简单HTTP服务器

文章目录

2019-07-26 12:31:27 2078

原创 【I/O多路复用】select、poll、epoll的区别

文章目录

2019-07-22 13:46:31 1338

原创 【I/O多路复用】epoll系统调用的ET(Edge Trigger)模式

文章目录什么是LT和ET模式什么是LT和ET模式epoll对文件描述符的操作有两种模式 LT(LevelTigger)电平触发模式和ET (EdgeTrigger, 边沿触发)模式。LT模式是默认的工作模式,这种模式下cpoll相当于一 个效率较高的poll.当往epoll内核事件表中注册一个文件描述符上的EPOLET事件时,epoll将以ET模式来操作该文件描述符。ET模式是epoll的高...

2019-07-20 22:40:23 1542

原创 【I/O多路复用】epoll系统调用(默认LT模式)

文章目录【1】epoll相关的系统调用epoll_create()epoll_ctl()epoll_wait()代码示例【1】epoll相关的系统调用epoll是Linux特有的I/O复用函数。它在实现和使用上与select、poll有很大差异。首先,epoll使用一组函数来完成任务,而不是单个函数。其次,epoll 把用户关心的文件描述符上的事件放在内核里的一个事件表中,从而无须像sel...

2019-07-20 22:36:14 2021

原创 【I/O多路复用】poll系统调用

文章目录程序示例【poll的优缺点】程序示例下面是一个基于TCP的客户端服务器交互的程序,建立三次连接后若client客户端不发送数据,则服务器端会一直轮询fdset集合等待client客户端发送数据,直到client发送数据,select会检测到有事件就绪,再进行处理,timeout设置为5秒,若5秒内没有数据发送到服务器则会打印出"time out"。server.c#include&...

2019-07-20 08:56:17 1415

原创 【I/O多路复用】select系统调用

文章目录使用select函数的过程一般是:先调用宏FD_ZERO将指定的fd_set清零,然后调用宏FD_SET将需要测试的fd加入fd_set,接着调用函数select测试fd_set中的所有fd,最后用宏FD_ISSET检查某个fd在函数select调用后,相应位是否仍然为1。...

2019-07-20 08:54:23 1288

原创 基于UDP实现的socket通信

文章目录【1】TCP和UDP的区别【2】TCP和UDP的编程流程【3】函数sendto()和recvfrom()【4】代码示例【1】TCP和UDP的区别Tcp 是 面向连接的 可靠的 流式服务所以Tcp 需要进行三次握手建立连接后,才可以传输用户数据,可靠性是通过应答确认、超时重传机制等保证,还有滑动窗口来进行流量控制。Udp 是 无连接 不可靠 数据报服务所以UDP不需要进行三次握手来...

2019-07-20 08:48:07 12320 4

原创 【计算机网络】|| TCP的粘包、拆包问题

文章目录【1】为什么UDP不产生粘包、拆包问题【2】粘包、拆包的表现形式【3】TCP粘包、拆包产生的原因【4】解决办法在socket网络编程程序中,TCP和UDP分别是面向连接和非面向连接的。【1】为什么UDP不产生粘包、拆包问题我们看看UDP首部的报文格式UDP是基于报文发送的,从UDP的帧结构可以看出,在UDP首部采用了16bit来指示UDP数据报文的长度,因此在应用层能很好的将不同的...

2019-06-30 18:40:50 1605

原创 【计算机网络】|| TCP是如何保证可靠的传输的

文章目录前言【1】确认应答信号ACK与序列号【2】超时重发机制【3】滑动窗口实现流量控制【4】拥塞控制慢启动拥塞避免快速重传快速恢复前言Tcp 是 面向连接的 可靠的 流式服务Udp 是 无连接 不可靠 数据报服务Tcp 需要进行三次握手建立连接后,才可以传输用户数据,可靠性是通过应答确认超时重传机制等保证,还有滑动窗口来进行流量控制。实际选择哪种协议,要看需求,比如,视频传输,要求以...

2019-06-30 16:49:12 1836

原创 【高级数据结构】 || AVL树详解(C++)

文章目录什么是AVL树为什么要引出AVL树AVL树的特点AVL树的旋转LLRRLRRLAVL树的结构AVL树的插入AVL树的删除什么是AVL树AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为1,所以它也被称为高度平衡树。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树为什么要引出AVL树AVL树又称平衡的BST树,它能保证二叉树高度相对平衡,尽量降...

2019-06-29 15:06:59 1857 1

原创 【BST二叉搜索树】常见笔试题

文章目录【1】树的镜像翻转【2】判断一棵二叉树是不是一棵BST树【3】寻找BST树指定区间的元素结果集【1】树的镜像翻转 //树的镜像翻转 void mirror() { cout << "镜像翻转:"; mirror(_root); //调用以根节点进行镜像翻转 } void mirror(BSTNode *node) { if (node == nullp...

2019-06-05 18:15:28 2055

原创 【二叉树的遍历】前中后序、层序遍历(递归与非递归版本)

文章目录【0】遍历法则层序遍历前序遍历中序遍历后序遍历【1】非递归前序遍历递归版本前序遍历【2】非递归中序遍历递归版本中序遍历【3】非递归后序遍历递归版本后序遍历【4】非递归层序遍历递归版本层序遍历【5】测试代码【0】遍历法则我们来简单了解一下二叉树的前中后序和层序的遍历法则层序遍历层序遍历是最简单的,顾名思义就是一层一层从左往右一个一个打印,不难理解。前序遍历例:输出结果:A...

2019-06-03 17:14:05 3107

原创 【Mysq】深入理解Mysql索引底层原理的实现

文章目录

2019-06-03 17:09:57 4210

空空如也

空空如也

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

TA关注的人

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