03 2020 档案
摘要:转载自https://www.jianshu.com/p/dfa189850651 这里是说在类定义里调用,而不是指实例的调用。 假设存在类Person与类Student: class Person(object): def __init__(self): self.name = "Tom" def
阅读全文
摘要:其实目前在 GitHub 上有很多优秀的机器学习开源项目,例如各种预训练深度卷积网络、高度封装的算法以及大量开放数据集,不过要想复现以及根据实际情况调整这些项目,开发者还是需要一些 ML 领域知识。此外,很多项目的文档说明与技术支持都有待提高,它们需要开发者一点点调试与试错才能正确搭建。更重要的是,
阅读全文
摘要:mysql> select * from T where ID=10; 我们看到的只是输入一条语句,返回一个结果,却不知道这条语句在 MySQL 内部的执行过程。 MySQL 的基本架构示意图,从中你可以清楚地看到 SQL 语句在 MySQL 的各个功能模块中的执行过程。 (图源https://bl
阅读全文
摘要:我们都知道线程切换的开销比进程切换的开销小,那么小在什么地方?切换的过程是怎样的? 无论是在多核还是单核系统中,一个CPU看上去都像是在并发的执行多个进程,这是通过处理器在进程间切换来实现的。在任何一个时刻,单处理器系统都只能执行一个进程的代码。 操作系统实现这种交错执行的机制称为上下文切换。 操作
阅读全文
摘要:我觉得这幅图更加符合: 因为应用程序也可以直接执行系统调用。 通过系统调用将Linux整个体系分为用户态和内核态(或者说内核空间和用户空间)。那内核态到底是什么呢?其实从本质上说就是我们所说的内核,它是一种特殊的软件程序,特殊在哪儿呢?控制计算机的硬件资源,例如协调CPU资源,分配内存资源,并且提供
阅读全文
摘要:top命令 相当于linux下的任务管理器, 第四行(Mem) 分别表示了内存总量、空闲内存量、当前使用量、以及缓冲使用中的内存量; 第五行(Swap) 表示类别同第四行(Mem),但此处反映着交换分区(Swap)的使用情况。通常,交换分区(Swap)被频繁使用的情况,将被视作物理内存不足而造成的。
阅读全文
摘要:OAuth2.0的基本流程 OAuth协议目前已经升级到了2.0,大部分的网站也是支持OAuth2.0的,因此让我们先看看OAuth2。 上图中所涉及到的对象分别为: Client 第三方应用,我们的应用就是一个Client Resource Owner 资源所有者,即用户 Authorizatio
阅读全文
摘要:在C++中,类的对象建立分为两种,一种是静态建立,如A a;另一种是动态建立,如A* ptr=new A;这两种方式是有区别的。 静态建立一个类对象,是由编译器为对象在栈空间中分配内存,是通过直接移动栈顶指针,挪出适当的空间,然后在这片内存空间上调用构造函数形成一个栈对象。使用这种方法,直接调用类的
阅读全文
摘要:1)为什么用了 HTTPS 就是安全的? 2)HTTPS 的底层原理如何实现? 3)用了 HTTPS 就一定安全吗? HTTPS 的实现原理 大家可能都听说过 HTTPS 协议之所以是安全的是因为 HTTPS 协议会对传输的数据进行加密,而加密过程是使用了非对称加密实现。但其实:HTTPS 在内容传
阅读全文
摘要:原文链接:https://blog.csdn.net/u013320868/java/article/details/54090295 对称加密(Symmetric Cryptography),又称私钥加密 对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decrypti
阅读全文
摘要:准备工作 网站应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统。 在进行微信OAuth2.0授权登录接入之前,在微信开放平台注册开发者帐号,并拥有一个已审核通过的网站应用,并获得相应的AppID和AppSecret,申请微信登录且通过审核后,可开始接入流程。 授权流程
阅读全文
摘要:先说结论 结论1:从HTTP/1.0到HTTP/2,都是利用TCP作为底层协议进行通信的。 结论2:HTTP/1.1,引进了长连接(keep-alive),减少了建立和关闭连接的消耗和延迟。 结论3:HTTP/2,引入了多路复用:连接共享,提高了连接的利用率,降低延迟。 HTTP2.0和HTTP1.
阅读全文
摘要:记一次我被面试官问得爆炸的经历。 简历一时爽,面试火葬场。 1. Websocket如何实现长连接的? TCP是持久连接、全双工 TCP是持久连接,建立TCP连接是3次握手,关闭TCP连接是4次挥手。TCP连接是由通信双方(应用层)来决定什么时候关闭,其本身是一个持久连接。TCP连接可以进行全双工通
阅读全文
摘要:转载自https://juejin.im/entry/5795d1c76be3ff006618a6a4 主流的Web端即时通讯方案大致有4种:传统Ajax短轮询、Comet技术、WebSocket技术、SSE(Server-sent Events)。本文将简要介绍这4种技术的原理,并指出各自的异同点
阅读全文
摘要:1. Web的基本数据帧格式: WebSocket在建立连接之后,通信的基本数据格式如下图(来源RFC6455-5.2),没有Http请求那么多固定的报文,且不用重复建立连接,所以通信效率高: 2. Websocket是如何管理连接的? RFC6455-5.5给出了答案,协议定义了Control F
阅读全文
摘要:转载自https://m.nowcoder.com/tutorial/93/8ac75a692a3b4b0a868796b9f008bc2c MySQL引擎 MySQL中的数据用各种不同的技术存储在文件(或内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧和锁定水平并且最终提供广泛的不同
阅读全文
摘要:转载自知乎-服务器TIME_WAIT和CLOSE_WAIT详解和解决办法 发现问题 在服务器的日常维护过程中,会经常用到下面的命令: netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' 它会显示例如下面的信息: T
阅读全文
摘要:刚才字节面试,问了一个关于我项目的:当数据库有大量操作的时候怎么优化(只考虑当个数据库)?我当然是不知道,猜了个可以建缓存。 后面发现真的可以,好像面试官认可了。 在知乎上也看见类似的问题: 目前公司的一个项目,数据库用的是Mysql,正在考虑用redis/memcached做数据库的缓存层,目前的
阅读全文
摘要:转载自孤儿进程与僵尸进程[总结] 什么是僵尸进程和孤儿进程?会带来什么问题 基本概念 我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程再创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程 到底什么时候结束。 当一个进程完成它的工作终止之后
阅读全文
摘要:三种遍历: 先序:根 左 右 中序:左 根 右 后续:左 右 根 先看一种我认为比较秒的方法 vector<int> postorderTraversal(TreeNode* root) { if(root == NULL) return vector<int>{}; vector<int>res;
阅读全文
摘要:题目: 例如,(6, 4)的公共祖先是5,(4, 5)的公共祖先是5 分析: TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { if(root == NULL || p == root || q ==
阅读全文
摘要:题目:求解一个有序数组不同平方值的个数,{-1,-1,0,1,1}这里平方值只有0,1两种情况,返回2;{-3,-1,0,0,2,3}这里拼房族有0,1,4,9共4中情况,返回4。要求:时间复杂度O(n)空间复杂度O(1) 分析: 有序数组普遍是利用双指针问题求解 其次,map(或哈希)、二分 跟指
阅读全文
摘要:题目:给定一个有序数组,返回其中出现次数超过25%的元素,题目确保有且仅有一个。 Input: arr = [1,2,2,6,6,6,6,7,10] Output: 6 分析: 方法一:遍历 时间复杂度为O(n),空间复杂度为O(1) int findSpecialInteger(vector<in
阅读全文
摘要:题目:设计一个算法发现一个数组中和为指定值的所有数对。数组是无序的且值可能重复。 分析: 有一种方式是排序+双指针。 另一种是先用map统计,再在map中查找target-num。这里可以使用unordered_map(也就是哈希),时间复杂度是O(n). vector<vector<int>> p
阅读全文
摘要:红黑树的特点 红黑树是二叉查找树,但在每个节点增加一个存储为表示节点的颜色,可以是红色或黑色(非红即黑),通过对任意一条从根到叶子的路径上各个节点着色方式的限制,红黑树确保没有一条路径会比其他路径长两倍。因此,它是一种弱平衡二叉树,相对于严格的AVL树来说,它的旋转次数少,所以对于查找、插入、删除较
阅读全文
摘要:select/poll/epoll 都是 I/O 多路复用的具体实现,select 出现的最早,之后是 poll,再是 epoll。 select int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, stru
阅读全文
摘要:一个输入操作通常包括两个阶段: 等待数据准备好 从内核向进程复制数据 对于一个套接字上的输入操作,第一步通常涉及等待数据从网络中到达。当所等待数据到达时,它被复制到内核中的某个缓冲区。第二步就是把数据从内核缓冲区复制到应用进程缓冲区。 Unix 有五种 I/O 模型: 阻塞式 I/O 非阻塞式 I/
阅读全文
摘要:解法一:BFS+记录dep深度 如果某节点dep小于下一个节点,说明该节点是本层的最右节点。如果该节点弹出后队列为空,同样该节点也是最右节点。 vector<int> rightSideView(TreeNode* root) { if(root == NULL) return vector<int
阅读全文
摘要:转载自:Ruthless-数据据设计三大范式 三个范式: 第一范式:所有的属性都不能再分割 第二范式:所有的非主属性都完全依赖于每个候选键,而不能只是候选键中的一部分(消除部分函数依赖) 第三范式:非主属性不传递依赖于候选键(消除传递依赖) 我们这样定义范式有什么作用呢? 第一范式 第一范式是最基本
阅读全文
摘要:三个join的含义: left join(左联接):返回左表中的所有记录和右表中的联接字段相等的记录。 right join(右联接):返回右表中的所有记录和左表中的联接字段相等的记录。 inner join(等值联接):只返回两个表中联接字段相等的记录。 下面将以atable、btable为例进行
阅读全文
摘要:转载自:leetcode题解区-一文解决 4 道「搜索旋转排序数组」题 本文涉及 4 道「搜索旋转排序数组」题: LeetCode 33 题:搜索旋转排序数组 LeetCode 81 题:搜索旋转排序数组-ii LeetCode 153 题:寻找旋转排序数组中的最小值 LeetCode 154 题:
阅读全文
摘要:题目:给定一个未排序的整数数组,找出其中没有出现的最小的正整数。要求时间复杂度O(n)、空间复杂度O(1) 分析: 首先想到用个vis数组,数组开多大呢,需要根据数的范围(其实只需要开n的大小,因为我们不需要关心小于1和大于n的数) 但是这样需要额外的空间,不符合题意。于是想着能不能将原数组当作vi
阅读全文
摘要:网页版微信刚推出时,无数人被它的登录方式惊艳了一下,不需要输入用户名密码,打开手机微信扫一扫,便自动登录。从原理上讲,二维码只能是一段文本的编码,如何用它实现快捷登录的呢? 简易版(不涉及具体技术) 打开微信网页版,会出现一个二维码,用非微信的扫码工具扫码,你会发现此二维码解析出来是类似如下的网址:
阅读全文
摘要:题意:给定一个降序的正数数组,要求按【最小、最大、次小、次大…】的顺序重新排序。期望的时间复杂度为O(n),空间复杂度为O(1),即不能申请额外数组。例如:输入【7,6,5,4,3,2,1】输出【1,7,2,6,3,5,4】 分析: 首先,计算每个元素要挪到哪里感觉很简单,目测是这样:1. 旧位置i
阅读全文
摘要:这一次我没有参加,听别人说是两个DP,然后我还是想了好久。 第一题:有n段字符串,每串中的字符都是非递减的,现可以将它们拼接,求最长的非递减序列。其中 $1 \leq n \leq 10^6$,字符串的总长度不超过1e6且都由小写字母组成。 分析:既然是DP,如果按前i个考虑,必定要排序,1e6肯定
阅读全文
摘要:一、读写分离 因为用户的增多,数据的增多,单机的数据库往往支撑不住快速发展的业务,所以数据库集群就产生了! 读写分离顾名思义就是读和写分离了,对应到数据库集群一般都是一主一从(一个主库,一个从库)或者一主多从(一个主库,多个从库),业务服务器把需要写的操作都写到主数据库中,读的操作都去从库查询。主库
阅读全文
摘要:1. 简介 NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL"。 现代计算系统每天在网络上都会产生庞大的数据量。这些数据有很大一部分是由关系型数据库管理系统(RDBMSs)来处理,其严谨成熟的数学理论基础使得数据建模和应用程序编程更加简单。 但随着信息化的浪潮和互联网的
阅读全文
摘要:什么是协程 A coroutine is a function that can suspend its execution (yield) until the given YieldInstruction finishes. 也就是说,协程是一个函数,可以被挂起和被恢复。 协程不是被操作系统内核所
阅读全文
摘要:类快排算法 leetcode215 由于只要求找出第k大的数,没必要将数组中所有值都排序。 快排中的partition算法,返回key在数组中的位置的cnt(相对于left的偏移量),如果cnt正好等于k,那么问题则得到解决;如果cnt小于k,去左边找第k个;如果cnt>k,则去右边找第k-cnt个
阅读全文
摘要:本人的第一次面试。 本来投的CSIG,一直没被捞就被释放了,然后今天被TEG约面试。 主要问题如下: 1. 自我介绍 名字,学校,平常就看书、运动、写写博客。喜欢算法和数据结构(挖坑开始)。 2. 先问个简单算法吧,讲下KMP的原理 我讲了下next数组,然后他问复杂度,一个主串多个模式串呢? 3.
阅读全文
摘要:一、解决的问题 由于不同的机器有不同的操作系统,以及不同的库和组件,在将一个应用部署到多台机器上需要进行大量的环境配置操作。 Docker 主要解决环境配置问题,它是一种虚拟化技术,对进程进行隔离,被隔离的进程独立于宿主操作系统和其它隔离的进程。使用 Docker 可以不修改应用程序代码,不需要开发
阅读全文
摘要:算法的定义 有限的指令的序列 有穷性 确定性 可行性 遍历 遍历求水仙花数:“水仙花数”是指一种三位数,它的各位数字的立方和等于该数字本身。 public static void Main() { for(int i = 100;i < 1000;i++) { int tmpi = i; int a
阅读全文
摘要:public static void Main() { int[] nums = { 3, 12, 1, 20, 2, 100 }; var lowNums = from n in nums where n < 10 select n; foreach (int num in lowNums) Co
阅读全文
摘要:集合相当于容器,用于将一系列相似的项组合在一起。 集合可以分为泛型集合类和非泛型集合类。 多数集合类都是派生自ICollection、IComparer、IEnumerable、IList、IDictionary和IDictionaryEnumerator接口以及它们的等效泛型接口,可继承这些接口来
阅读全文
摘要:Object类 1. Object是所有类的基类 所以,所有对象都有以下方法(可以重写Object的这些方法) Equals(): 判断两个对象是否相等 ToString(): 将对象信息转换成字符串 GetType(): 获取对象的类型 2. 常量也是对象 3.ToString() "Hello"
阅读全文
摘要:令A[1...n]是一个整数数列,A中的整数a如果出现的次数多于[n/2],那么称a为多数元素。 有一个比较漂亮的求解法,我们用归纳法导出这个算法,这个算法的实质是基于下面的观察结论。 观察结论:在原序列中去除两个不同的元素后,那么原序列中的多数元素在新序列中还是多数元素。 其实就是遍历一遍,将互异
阅读全文
摘要:题目:只有0,1,2组成的数组,将其按0..0..1...1..2...2排序。(leetcode75) 分析: 非常有意思的一道题目。由 Dijkstra 提出 快速排序其实就是不断地调用partition分区函数,快速排序只需要分2个区,用了两个指针。 这里3个分区就需要三个指针。 主要看中间指
阅读全文
摘要:大内核和微内核 1.大内核 大内核是将操作系统功能作为一个紧密结合的整体放到内核 由于各模块信息共享,因此有很高的性能。 2. 微内核 由于操作系统不断复杂,因此将操作系统一部分功能移出内核,从而降低内核的复杂性。移出的部分根据分层的原则划分成若干服务,相互独立。 在微内核结构下,操作系统被划分成小
阅读全文
摘要:有36辆自动赛车和6条跑道,没有计时器的前提下,最少用几次比赛可以筛选出最快的三辆赛车? 没有计时器是指不知道每部车的运行时间,但是直到同批次的先后顺序。 解决方法: 首先,肯定是分6组比赛(记录结果),再去每组中最快的比赛(记录结果),根据每组中最快的将6个组排序: 前3只可能出现在A1,A2,A
阅读全文
摘要:题目:在一个文件中有 10G 个整数,乱序排列,要求找出中位数。内存限制为 2G。只写出思路即可(内存限制为 2G的意思就是,可以使用2G的 空间来运行程序,而不考虑这台机器上的其他软件的占用内存)。 分析: 既然要找中位数,很简单就是排序的想法。那么基于字节的桶排序是一个可行的方法 (请见《桶排序
阅读全文
摘要:RIP协议相关 RIP(RoutingI Information Protocal)是内部网关协议IGP中最先得到应用的协议,中文名叫路由信息协议。RIP是一种分布式的基于距离矢量的路由选择协议。 RIP协议的”距离“就是“跳数”,因为每经过一个路由器跳数就加1。RIP允许一条路径最多包含15个路由
阅读全文
摘要:● 请你说一下TCP怎么保证可靠性,并且简述一下TCP建立连接和断开连接的过程 参考回答: TCP保证可靠性: (1)序列号、确认应答、超时重传 数据到达接收方,接收方需要发出一个确认应答,表示已经收到该数据段,并且确认序号会说明了它下一次需要接收的数据序列号。如果发送发迟迟未收到确认应答,那么可能
阅读全文
摘要:这道题也是leetcode72, 注意代码中的i,j代表第几个字符,0表示空串,所以比较word1的第i个与word2的第j个是 if(word1[i-1] == word2[j-1]) int minDistance(string word1, string word2) { int m = wo
阅读全文
摘要:求中位数 求K-th(leetcode4) 由于上面的写法要求两个数组等长且是奇数,leetcode上的题长度不定,所以按中位数的写法并不好写。 如果我们能用log的复杂度找到第K个,那么很容易得到中位数. 方法大致如下:从两个数组取前K/2个,比较两部分的第K/2个,将较小的那部分去掉,在剩下的部
阅读全文
摘要:两个栈模拟队列(leetcode 面试题09) 解决方案:定义栈s1和s2,入队放s1,出队的话优先取s2,s2为空则将s1的全部转到s2再取。 相当于s1放当前后缀,s2放当前前缀。 class CQueue { public: stack<int>s1, s2; CQueue() { } voi
阅读全文
摘要:安装 pip install textblob import nltk pip install nltk nltk.download('punkt') # 安装一些语料库, 国内安装有问题nltk.download('averaged_perceptron_tagger') 基本操作 情感分析 该s
阅读全文
摘要:1. 链表反转 // 3指针,原地反转 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {
阅读全文
摘要:题目:把嵌套数组展开成一维数组, 例如 Input: [[1,1],2,[1,1]] Output: [1,1,2,1,1] Input: [1,[4,[6]]] Output: [1,4,6] 题解: 一种简单的想法,不管怎么嵌套数字的前后顺序不会变,所以去掉括号即是答案。但是这样就没意思了。 另
阅读全文
摘要:转载自:Segmentfault_GavinHsueh_细说浏览器输入URL后发生了什么 本文摘要:1.DNS域名解析;2.建立TCP连接;3.发送HTTP请求;4.服务器处理请求;5.返回响应结果;6.关闭TCP连接;7.浏览器解析HTML;8.浏览器布局渲染; 一、DNS域名解析 从客户端到本地
阅读全文
摘要:DNS解析流程分为递归查询和迭代查询,递归查询是以本地名称服务器为中心查询, 递归查询是默认方式,迭代查询是以DNS客户端,也就是客户机器为中心查询。 先不说那么多,看两张图你应该就明白了。 递归: 迭代: 再介绍几个概念: 本地名称服务器 又称Local DNS, 可以是默认的运营商提供的Loca
阅读全文
摘要:基本操作 import pandas as pd #导入pandas包 data = pd.read_csv("train.csv") #读取csv文件 data = pd.read_csv("train.csv", nrows=15) #读取前n行 data = pd.read_csv("trai
阅读全文
摘要:解决方案:把第一根绳子两头同时点燃,同时把第二根绳子点燃一头,当第一根绳子烧完时,时间为半个小时,这时把第二根绳子的另一头也点燃,开始计时,当第二根绳子烧完时,停止计时,那么这段时间就是15分钟. 参考链接:https://www.zybang.com/question/1af357dafe64b9
阅读全文
摘要:问题一: 已知一随机发生器,产生0的概率是p,产生1的概率是1-p,现在要你构造一个发生器,使得它构造0和1的概率均为1/2; 构造一个发生器,使得它构造1、2、3的概率均为1/3;…, 构造一个发生器,使得它构造1、2、3、…n的概率均为1/n,要求复杂度最低。 解决方法: 原始的随机数生成器,生
阅读全文
摘要:问题一:给你A,B两个文件,各存放50亿条URL,每条URL占用64字节,内存限制是4G,让你找出A,B文件共同的URL。如果是三个乃至n个文件呢? 方案: 先算一下4G有多少位(bit),4G = 2^32 * 8 bit = 320亿 bit,n才50亿,可以用位图法。将其中一个文件中的url使
阅读全文
摘要:创建索引很简单,但是能深入理解索引原理又能恰到好处使用索引又是另外一回事。 为什么要给表加上主键? 为什么加索引后会使查询变快? 为什么加索引后会使写入、修改、删除变慢? 什么情况下要同时在两个字段上建索引? 为什么要给表加上主键? 我们平时建表的时候都会为表加上主键, 在某些关系数据库中, 如果建
阅读全文
摘要:转载自:segmentfault_欧阳思海-面试官问你B树和B+树,就把这篇文章丢给他 在介绍B+树之前, 先简单的介绍一下B树,这两种数据结构既有相似之处,也有他们的区别,最后,我们也会对比一下这两种数据结构的区别。 1. B树 1.1 B树的概念 B树也称B-树,它是一颗多路平衡查找树。其实,B
阅读全文
摘要:Bitmap 问题给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?方案1:用位图/Bitmap的方法,申请512M的内存,一个bit位代表一个unsigned int值。读入40亿个数,设置相应的bit位,读入要查询的数,查看相
阅读全文
摘要:什么是索引 数据库索引好比是一本书前面的目录,能加快数据库的查询速度。例如这样一个查询:select * from table1 where id=10000。如果没有索引,必须遍历整个表,直到ID等于10000的这一行被找到为止;有了索引之后(必须是在ID这一列上建立的索引),即可在索引中查找。由
阅读全文
摘要:一个较好的方法:先拿出10000个建立小根堆,对于剩下的元素,如果大于堆顶元素的值,删除堆顶元素,再进行插入操作,否则直接跳过,这样知道所有元素遍历完,堆中的10000个就是最大的10000个。时间复杂度: m + (n-1)logm = O(nlogm) 优化的方法:可以把所有10亿个数据分组存放
阅读全文
摘要:方法一: 全局变量的构造函数,会在main之前执行。 #include <iostream> using namespace std; class app { public: //构造函数 app() { cout<<"First"<<endl; } }; app a; // 申明一个全局变量 in
阅读全文
摘要:#include <iostream> #include <string> using namespace std; // 1 class emptyClass0{ }; // 1 class emptyClass1{ public: emptyClass1(){} ~emptyClass1(){}
阅读全文
摘要:对函数使用sizeof,在编译阶段会被函数返回值的类型取代。如:首先要明确sizeof不是函数,也不是一元运算符,它是个类似宏定义的特殊关键字,sizeof();括号内在编译过程中是不被编译的,而是被类型替代。 如int a=8;sizeof(a++);在编译过程中,a的值不会变,只是被替换成类型s
阅读全文
摘要:一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型。您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值。 union变量的大小为其中size最大类型的大小。 #include<stdio.h> union U { int a; char b; }; int main() {
阅读全文
摘要:以下的内容C++中也一样。 结构体中的成员可以是不同的数据类型,成员按照定义时的顺序依次存储在连续的内存空间。和数组不一样的是,结构体的大小不是所有成员大小简单的相加,需要考虑到系统在存储结构体变量时的地址对齐问题。 一、为何要内存对齐 因为处理器读写数据,并不是以字节为单位,而是以块(2,4,8,
阅读全文
摘要:这是经典的同步互斥问题, 遵循原则: 1、条件变量需要锁的保护;2、锁需要条件变量成立后,后重新上锁; 参考代码: //notify_one()(随机唤醒一个等待的线程) //notify_all()(唤醒所有等待的线程) //Create By@herongwei 2019/09/10 #incl
阅读全文
摘要:一、认识并发和并行 先将两个概念, 并发与并行 并发:同一时间段内可以交替处理多个操作: 图中整个安检系统是一个并发设计的结构。两个安检队列队首的人竞争这一个安检窗口,两个队列可能约定交替着进行安检,也可能是大家同时竞争安检窗口(通信)。后一种方式可能引起冲突:因为无法同时进行两个安检操作。在逻辑上
阅读全文
摘要:1. 基本操作 #include<iostream> #include<vector> using namespace std; int main() { vector<int>v1; vector<int>v2(4); vector<int>v3(1,4); v1.push_back(1); v1
阅读全文
摘要:什么是调试? 所谓调试(Debug),就是让代码一步一步慢慢执行,跟踪程序的运行过程。比如,可以让程序停在某个地方,查看当前所有变量的值,或者内存中的数据;也可以让程序一次只执行一条或者几条语句,看看程序到底执行了哪些代码。在调试的过程中,我们可以监控程序的每一个细节,包括变量的值、函数的调用过程、
阅读全文
摘要:题目:给定一个无符号整数x,求x的二进制表示中1的个数。 分析: 看到二进制,基本上就各种位运算的骚操作吧。 算法一: 最容易想到的,不断除2,并进行统计。 算法二: 如果已知大多数数据位是 0 的话,那么还有更快的算法,这个算法基于一个事实:x&(x-1)会消掉最后一个1。 算法三: 分治法,均分
阅读全文
摘要:安装 首先,当然是安装。但是gulp 4.0 之后的版本语法有变化,这里使用的gulp3.9.1,但是低版本的gulp和高版本的node不兼容,所以还要换个低版本的node。 nvm use 10.14.1 npm install gulp@3.9.1 --save-dev 编写gulpfile 在
阅读全文
摘要:刚才使用gulp时报错 ReferenceError: primordials is not defined,据说是node版本与gulp版本不相配,于是想使用低版本的node。之前就听过NVM,但是比较懒。 NVM是什么 nvm全名node.js version management,顾名思义是一
阅读全文