基础知识整理
维多利亚港的风吹掉了我的假发
这个作者很懒,什么都没留下…
展开
-
【C++】手写String类
手写String类![在这里插入图片描述](https://img-blog.csdnimg.cn/20200921200357938.png#pic_center#include<iostream>#include<cstring>class String{private: int m_len; char* m_data;public: const int length() const; const char* c_str() cons原创 2020-09-22 08:28:52 · 234 阅读 · 0 评论 -
sort()原理
快速排序,结合插入排序和堆排序原创 2020-09-21 17:04:09 · 149 阅读 · 0 评论 -
硬盘、寄存器、高速缓存、内存关系|i++为什么不是原子操作
速度:寄存器 > 二级缓存 > 内存 > 硬盘寄存器是CPU内部的存储器,用于存储等待抄处理计算的指令或数据,当然速度是最快的;其次是二级缓存,由于cpu的速度快于内存,为了提高计算机的速度,设置了一级、二级缓存,用于固化存储常用指令,速度其次;然后就是内存了;最后是硬盘。i++不是原子操作其执行要分为3步:1、读内存到寄存器;2、在寄存器中自增;3、写回内存。举个例子,现有A,B两个线程,初始i=2;A线程完成1,2步后被切换到B线程,在B线程中执行完这3步,再切换回来,此时原创 2020-09-21 15:37:38 · 273 阅读 · 0 评论 -
C++ std::thread 中join()和detach()的区别
在声明一个std::thread对象之后,都可以使用detach和join函数来启动被调线程,区别在于两者是否阻塞主调线程。 (1)当使用join()函数时,主调线程阻塞,等待被调线程终止,然后主调线程回收被调线程资源,并继续运行; (2)当使用detach()函数时,主调线程继续运行,被调线程驻留后台运行,主调线程无法再取得该被调线程的控制权。当主调线程结束时,由运行时库负责清...原创 2019-11-12 01:07:49 · 1844 阅读 · 0 评论 -
【计算机网络】网络安全问题
DDOS/SynFlood https://blog.csdn.net/qq_34777600/article/details/81946514原创 2020-04-21 15:30:13 · 86 阅读 · 0 评论 -
【交叉面准备】想到什么写什么
ip地址转int型 ipv4地址由四部分组成,每部分是0-255(2的8次方),int有四个字节,每个字节也是0-255,因此可以用一个int存储ip地址。,例如ip为“192.168.1.116”,相当于“.“将ip地址分为了4部分,各部分对应的权值为256^3, 256^2, 256, 1。具体代码:http://www.manongjc.com/article/126324.html 瀑布模...原创 2020-04-26 23:28:24 · 105 阅读 · 0 评论 -
HTTP的常用Method及其含义,常用Status Code及其含义
get 从服务器端获取资源head 获取报文头部put 提交资源post 更新资源delete 删除资源connect 建立tunnel隧道 100 请求已收到,正等待后续资源200 ok 成功206 服务器成功处理了部分 GET 请求301 永久重定向400 bad request 客户端请求语法错误500 服务器内部错误 ...原创 2020-05-31 16:40:08 · 241 阅读 · 0 评论 -
浏览器发送http请求过程分析
1.域名解析 --> 2.发起TCP的3次握手 --> 3.建立TCP连接后发起http请求 --> 4.服务器响应http请求,浏览器得到html代码 --> 5.浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 6.浏览器对页面进行渲染呈现给用户. 参考链接:https://www.cnblogs.com/caijh/...原创 2020-06-17 10:29:16 · 426 阅读 · 0 评论 -
智力题……
1.抛硬币吃苹果 有一个苹果,两个人抛硬币来决定谁吃这个苹果,先抛到正面者吃。请问先抛者吃到苹果的概率为_____。 第一次成功:1/2第三次成功(即前两次失败):(1-1/2)(1-1/2)(1/2)第五次成功(即前四次都失败):(1-1/2)(1-1/2)(1-1/2)(1-1/2)(1/2)第2k + 1次成功(即前2k次都失败):(1-1/2)(1-1/2)...(1-1/2)(1-1/2...原创 2020-06-16 03:12:50 · 323 阅读 · 0 评论 -
面向对象的三个基本特征和五种设计原则
参考链接https://blog.csdn.net/cancan8538/article/details/8057095https://www.jianshu.com/p/7a5b0043b035 三大基本特征 封装 隐藏对象的属性和实现细节,仅对外提供公共访问方式,将变化隔离,便于使用,提高复用性和安全性。 继承 提高代码复用性;继承是多态的前提。 多态 父类或接口定义的引用变量可以指向子类...原创 2020-06-16 04:24:04 · 117 阅读 · 0 评论 -
poll、epoll、select、Linux下5种IO模型
select、poll、epoll都是IO多路复用的机制,其中epoll是Linux特有的。本质上都是同步IO,有设备就绪或超时才能执行后面的动作。详细博客select:O(n)它仅仅知道了,有I/O事件发生了,却并不知道是哪那几个流(可能有一个,多个,甚至全部),我们只能无差别轮询所有流,找出能读出数据,或者写入数据的流,对他们进行操作。所以select具有O(n)的无差别轮询复杂度,同时处理的流越多,无差别轮询时间就越长。select监测的文件句柄数一般最大为1024个。poll:O(n)p原创 2020-09-11 11:03:45 · 164 阅读 · 0 评论 -
【C++】智能指针
shared ptr和unique ptr的区别原创 2020-09-07 10:58:03 · 193 阅读 · 0 评论 -
Linux下C++开发常用工具
Linux下C++开发常用工具GDB查看内存:x(gdb调试时查看内存)设置断点:b定位有问题的动态库调试core文件gdb常用指令gdb工作原理Valgrind内存泄漏分析和性能检测原创 2020-09-02 09:59:52 · 156 阅读 · 0 评论 -
C++ 深拷贝和浅拷贝
C++ 深拷贝和浅拷贝博客转载 2020-09-01 19:55:34 · 324 阅读 · 0 评论 -
【C++】char、int、short、指针占几个字节
常量的定义以及表示范围:unsigned int 0~4294967295 就是2^32-1int -2147483648~2147483647 就是-2^(31) ~ 2^31-1unsigne...原创 2020-04-02 08:01:32 · 7511 阅读 · 0 评论 -
【数据结构】链表和数组的区别
不同点: 链表是链式的存储结构;数组是顺序的存储结构。 链表通过指针来连接元素与元素,数组则是把所有元素按次序依次存储。 链表的插入删除元素相对数组较为简单,不需要移动元素,且较为容易实现长度扩充,但是寻找某个元素较为困难。 数组寻找某个元素较为简单,但插入与删除比较复杂,由于最大长度需要再编程一开始时指定,故当达到最大长度时,扩充长度不如链表方便。 在内存中,数组是一块连续的区域,需要预留空间...原创 2020-04-01 02:47:54 · 226 阅读 · 0 评论 -
C++多态、虚函数、纯虚函数、虚基类、抽象类、虚函数表
C++多态 C++的多态包括静态多态和动态多态。静态多态包括函数重载和泛型编程(函数模板和类模板),动态多态包括虚函数。静态多态是指在编译期绑定,动态多态是指运行时绑定。 虚函数 1、虚函数为类的非静态成员函数,访问权限一般为public。函数声明时,在返回值前加virtual关键字,函数定义时不需要加virtual。父类定义的虚函数,子类在继承时,可以对虚函数重新定义,当然子类的函数应该与父类虚...原创 2020-03-19 20:41:59 · 212 阅读 · 0 评论 -
【C++】static、const、constexpr、全局变量、局部变量
const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间。 static static表示的是静态的。类的静态成员函数、静态成员变量是和类相关的,而不是和类的具体对象相关的。即使没有具体对象,也能调用类的静态成员函数和成员变量。一般类的静态函数几乎就是一个全局函数,只不过它的作用域限于包含它的文件中。在C++中,static静态成员变量不能在...原创 2020-03-19 06:26:13 · 4549 阅读 · 1 评论 -
内存管理相关的问题
![图片说明](https://uploadfiles.nowcoder.com/images/20200418/1298389_1587179865663_1379690E58939A4E3E24A537937D8660 "图片标题") return局部指针造成的错误 https://blog.csdn.net/chengchaonan/article/details/79651683stat...原创 2020-04-18 05:20:33 · 90 阅读 · 0 评论 -
【计算机网络】HTTP和HTTPS的区别、HTTP报文格式
基础概念 http 超文本传输协议,以明文方式发送信息。连接过程:1.客户端的浏览器首先要通过网络与服务器建立连接,该连接是通过TCP 来完成的,一般 TCP 连接的端口号是80。 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是 MIME 信息包括请求修饰符、客户机信息和许可内容。2.服务器接到请求后,给予相应的响应信息,其格式为一个状态行,...原创 2020-03-25 19:39:17 · 1146 阅读 · 0 评论 -
【数据结构】常见排序算法总结(未完待续)
稳定性 如果A i == A j,Ai 原来在 Aj 位置前,排序后 Ai 仍然是在 Aj 位置前。 快速排序(不稳定) 思路分析:快速排序采用双向查找的策略,每一趟选择当前所有子序列中的一个关键字作为枢纽轴,将子序列中比枢纽轴小的前移,比枢纽轴大的后移,当本趟所有子序列都被枢轴按上述规则划分完毕后将会得到新的一组更短的子序列,他们将成为下趟划分的初始序列集。 时间复杂度:最好情况(待排序列...原创 2020-03-19 07:54:52 · 160 阅读 · 0 评论 -
如何创建一个全世界唯一的ID
UUID 数据库自增主键 可以创建一个表,通过数据插入获取对应的自增主键,作为全局唯一id缺点也很明显,就是高并发的场景下,受限于单台mysql的性能。而且可用性差,DB出现问题会导致id无法生成。当然可以通过主从的方式增强可用性,同时增加表采用不同自增步长的方式增加并发性能,比如假设我们要部署N台机器,步长需设置为N,每台的初始值依次为0,1,2…N-1;但是还会带来新的问题,比如不利于拓展...原创 2020-03-25 11:33:54 · 256 阅读 · 0 评论 -
项目中常被问到的问题
Zookeeper 优点 顺序一致性同一个客户端发起的事务请求,最终将会严格按照其发起顺序被应用到ZooKeeper中。 原子性所有事务请求的结果在集群中所有机器上的应用情况是一致的,也就是说要么整个集群所有集群都成功应用了某一个事务,要么都没有应用,一定不会出现集群中部分机器应用了该事务,而另外一部分没有应用的情况。 单一视图无论客户端连接的是哪个ZooKeeper服务器,其看到的服务端数据模...原创 2020-04-20 00:06:14 · 119 阅读 · 0 评论 -
【算法题】运矿石(未完待续)
题目 小v最近在玩一款挖矿的游戏,该游戏介绍如下:1、每次可以挖到多个矿石,每个矿石的重量都不一样,挖矿结束后需要通过一款平衡矿车运送下山;2、平衡矿车有左右2个车厢,中间只有1个车轮沿着导轨滑到山下,且矿车只有在2个车厢重量完全相等且矿石数量相差不超过1个的情况下才能成功运送矿石,否则在转弯时可能出现侧翻。假设小v挖到了n(n<100)个矿石,每个矿石重量不超过100,为了确保一次性将n个...原创 2020-06-08 10:53:31 · 441 阅读 · 0 评论 -
【算法题】交叉换位
问题描述 输入a1,a2,...,an,b1,b2,...,bn, 在O(n)的时间,O(1)的空间将这个序列顺序改为a1,b1,a2,b2,a3,b3,...,an,bn, 且不需要移动,通过交换完成,只需一个交换空间。 解题思路 https://www.oschina.net/question/234345_42157 ...原创 2020-06-14 21:04:27 · 143 阅读 · 0 评论 -
【算法题】面试常见简单算法题(持续更新中)
找两个链表的公共节点 首先遍历两个链表得到他们的长度,就能知道哪个链表比较长,以及长的链表比短的链表多几个结点。在第二次遍历的时候,在较长的链表上先走若干步,接着同时在两个链表上遍历,找到的第一个相同的结点就是他们的第一个公共结点。 用rand5()生成rand7() https://blog.csdn.net/kongmin_123/article/details/82315013 贝叶斯公式 ...原创 2020-06-14 18:12:06 · 160 阅读 · 0 评论 -
【数据结构】红黑树
特性 每个节点或者是黑色,或者是红色。 根节点是黑色。 每个叶子节点(NIL)是黑色。 [注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!] 如果一个节点是红色的,则它的子节点必须是黑色的。 从一个节点到该节点的子孙节点的所有路径上包含相同数目的黑节点。[这里指到叶子节点的路径] ...原创 2020-06-09 05:40:14 · 67 阅读 · 0 评论 -
【MySQL】ACID和隔离级别、事务
ACID与隔离级别 https://blog.csdn.net/zh521zh/article/details/69400053 脏读:指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。 不可重复读:是指在事...原创 2020-04-23 15:15:01 · 76 阅读 · 0 评论 -
【C++】xx和xx的区别与联系(持续更新)
指针和引用 https://blog.csdn.net/u010710458/article/details/79243256 new和malloc https://blog.csdn.net/nie19940803/article/details/76358673一个由C/C++编译的程序占用的内存分为以下几个部分: 栈区(stack)— 由编译器自动分配释放 ,存放为运行函数而分配的局部变量...原创 2020-04-13 07:39:23 · 640 阅读 · 0 评论 -
【操作系统】进程、线程和协程/调度/死锁/通信/线程池
进程和线程的区别和联系 区别 调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位; 并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行; 拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源。进程所维护的是程序所包含的资源(静态资源),如:地址空间,打开的文件句柄集,文件系统状态,信号处理handler等;线程所维护的运行相关的资...原创 2020-03-30 14:54:22 · 197 阅读 · 0 评论 -
【数据库】乐观锁和悲观锁/读写锁和互斥锁
悲观锁 总是假定最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程)。 乐观锁 总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号机制和CAS算法实现。乐观锁适...原创 2020-03-30 08:55:07 · 112 阅读 · 0 评论 -
【数据库】MySQL索引原理
初识索引 索引是应用程序设计和开发的一个重要方面。若索引太多,应用程序的性能可能会受到影响。而索引太少,对查询性能又会产生影响,要找到一个平衡点,这对应用程序的性能至关重要。 优点:可以快速检索,减少I/O次数,加快检索速度;根据索引分组和排序,可以加快分组和排序。 缺点:索引本身也是表,因此会占用存储空间,一般来说,索引表占用的空间的数据表的1.5倍;索引表的维护和创建需要时间成本,这个成本随...原创 2020-03-15 20:31:42 · 81 阅读 · 0 评论 -
【计算机网络】RESTful调用和 RPC调用有什么区别
RESTful是一种软件架构风格,用于约束客户端和服务器交互,满足这些约束条件和原则的应用程序或设计就是 RESTful。比如HTTP协议使用同一个URL地址,通过GET,POST,PUT,DELETE等方式实现查询、提交、删除数据。RPC是远程过程调用,是用于解决分布式系统服务间调用的一种方式。RPC采用客户端与服务端模式,双方通过约定的接口(常见为通过IDL定义或者是代码定义)以类似本地方法调...原创 2020-05-31 23:17:00 · 1153 阅读 · 0 评论 -
C++ std::move
它实现了转移语义 (Move Sementics) 和精确传递 (Perfect Forwarding)。它的主要目的有两个方面:消除两个对象交互时不必要的对象拷贝,节省运算存储资源,提高效率;能够更简洁明确地定义泛型函数。 通俗的左值的定义就是非临时对象,那些可以在多条语句中使用的对象。所有的变量都满足这个定义,在多条代码中都可以使用,都是左值。右值是指临时的对象,它们只在当前的语句中有效。 在...原创 2019-11-12 02:28:11 · 122 阅读 · 0 评论 -
【计算机网络】Linux下的网络通信协议(TCP、UDP、IP、ICMP、ARP、DNS)
各层协议的作用:https://www.cnblogs.com/pengjie-py/p/11256483.htmlTCP/IP 意味着 TCP 和 IP 在一起协同工作。TCP 负责应用软件(比如你的浏览器)和网络软件之间的通信。IP 负责计算机之间的通信。TCP 负责将数据分割并装入 IP 包,然后在它们到达的时候重新组合它们。IP 负责将包发送至接受者。 TCP 详细总结戳:https:...原创 2020-04-01 14:15:30 · 1214 阅读 · 0 评论 -
【C++】Vector、Map、Set的原理
Vector Vector的数据安排以及操作方式,与array非常类似,两者唯一的区别是空间运用的灵活性,array是静态空间,一旦配置了就不能改变,如果你想要大一点的空间,就必须首先配置一块新空间,然后将原来的元素一一复制进来,再把原来的空间释放给系统。但是vector是动态空间,随着元素的增加,它的内部机制会自行扩充空间以容纳新元素,因此vector的运用对于内存的合理利用与运用的灵活...原创 2020-04-01 04:52:40 · 282 阅读 · 1 评论 -
【C++】HashMap原理、与Map的区别
原理 哈希表最大的优点,就是把数据的存储和查找消耗的时间大大降低,几乎可以看成是常数时间;而代价仅仅是消耗比较多的内存。然而在当前可利用内存越来越多的情况下,用空间换时间的做法是值得的。另外,编码比较容易也是它的特点之一。 其基本原理是:使用一个下标范围比较大的数组来存储元素。可以设计一个函数(哈希函数,也叫做散列函数),使得每个元素的关键字都与一个函数值(即数组下标,hash值)相对应,于是用这...原创 2020-06-08 10:39:23 · 842 阅读 · 0 评论 -
C++实现面试常见设计模式(未完待续)
单例模式 1.懒汉模式 GetInstance()使用懒惰初始化,也就是说它的返回值是当这个函数首次被访问时被创建的。这是一种防弹设计——所有GetInstance()之后的调用都返回相同实例的指针。 class CSingleton{public: static CSingleton* GetInstance(){ if (m_pInstance == nullptr)...原创 2020-06-15 18:53:50 · 655 阅读 · 1 评论 -
同步与异步、阻塞与非阻塞、并发与并行
同步(Sync)和异步(Async) 同步 所谓同步,就是发出一个功能调用时,在没有得到结果之前,该调用就不返回或继续执行后续操作。 简单来说,同步就是必须一件一件事做,等前一件做完了才能做下一件事。 例如:B/S模式中的表单提交,具体过程是:客户端提交请求->等待服务器处理->处理完毕返回,在这个过程中客户端(浏览器)不能做其他事。 异步 异步与同步相对,当一个异步过程调用发出后,调...原创 2020-06-19 10:30:31 · 110 阅读 · 0 评论 -
Golang常见面试题
1.select是随机的还是顺序的? select就是用来监听和channel有关的IO操作,当 IO 操作发生时,触发相应的动作。如果有一个或多个IO操作可以完成,则Go运行时系统会随机的选择一个执行,否则的话,如果有default分支,则执行default分支语句,如果连default都没有,则select语句会一直阻塞,直到至少有一个IO操作可以进行。 2.Go语言局部变量分配在栈还是堆? ...原创 2020-06-20 12:04:45 · 305 阅读 · 0 评论