
c++
JanzeeLiu
这个作者很懒,什么都没留下…
展开
-
引用与指针
引用 引用就是对象的别名,一切对引用的操作,就是对原对象的操作。 引用经常存在于函数的参数和返回值当中。 在重载某些操作符时,我们需要引用,例如重载下标操作符[]. vector<int> vec{1,2,3,4,5};vec[2]=10;//这就是对[]进行重载之后,可以对vec的下标为2的变量进行赋值操作 参数传递准则 如果我们想要提高效率,且不改变传...原创 2019-09-06 19:56:57 · 115 阅读 · 0 评论 -
C++面试笔记
为什么要有复制构造函数,复制构造函数的重要性,复制构造函数的几种写法 见《C++编程思想》第十一章。 函数传值里面需要复制构造函数,比如传值,需要复制构造函数实现深拷贝,而且,对于自定义类对象,生成新对象的时候需要应用复制构造函数的情形有以下情况: Obj A(B);Obj A=B;Obj A=Obj(B);Obj A=new Obj(B); 以string类为例,它的浅拷贝和深...原创 2019-08-20 20:49:18 · 122 阅读 · 0 评论 -
LINUX锁之互斥锁(C++)
互斥量也可以叫互斥锁。内核通过时间分片的方式来管理线程,使得多个线程好像在并发执行。为什么多线程比多进程更有优势?因为属于同一进程的多个线程共享同一内存空间,利用同步操作,不同线程可以通过读取共享内存中的变量来进行通信。但是进程由于拥有独立的虚拟内存空间,所以要进行通信必须通过IPC的方式,这个方式有两个问题:1.强加了某种形式的额外内核开销,从而降低了系统性能;2.IPC的使...原创 2019-08-15 15:25:07 · 439 阅读 · 0 评论 -
C++ 二分查找
首先讲一下vector::end()returns an iterator referring to the past-the-end element in the vector container.The past-the-end element is the theoretical element that would follow the last element in the ve...原创 2019-08-11 19:09:11 · 203 阅读 · 0 评论 -
C++getline(),cin,
首先解释下EOF,它是文件结束标志,也是字节流输入结束标志,在linux系统中,注入CTRL+D就相当于输入EOF。1.getline函数声明(1) istream&getline(istream&is,string&str,char delim);(2) istream&getline(istream&is,string&str);用来从is流中读取字符串,知道找到分隔符deli...原创 2019-08-11 18:33:50 · 186 阅读 · 0 评论 -
C++ 线程与进程常用函数以及使用示例
1.创建线程的函数使用的是pthread_create()#include <pthread.h>int pthread_create(pthread_t *restrict thread,const pthread_attr_t *restrict attr,void *(start_routine)(void*),void* restrict arg);参数restr...原创 2019-08-15 13:52:05 · 931 阅读 · 0 评论 -
2020秋招拼多多客户端开发笔试题目
数组升序 题目描述: 给定两个数组A和B。其中数组A是几乎严格升序排列的,几乎的定义是只需改变其中一个数,即可满足完全升序排列。这里严格升序排列指的是不允许相邻两个为相同的数。请找出数组B中满足要求的最大数,并输出最终的有序数组,如果找不到,输出”NO”。 输入描述: 共两行,第一行是数组A,第二行为数组B,输入之间用空格分割,且len(A),len(B)<100。 输出描...原创 2019-08-11 12:00:31 · 2127 阅读 · 1 评论 -
贝壳找房面试之数据库
数据库:讲讲数据库索引。讲讲 B+ 树,知道多少说多少。讲讲 B+ 与 B- 的区别。讲讲红黑树,插入时如何旋转。数据库设计:财产权限管理:1有一个财产表,用户表,申请表要求设计表,然后走一个财产申请流程面试官引导的,在一些错误方面手写SQL,对设计的表的一系列操作写了一条sql,求某一年当中的某个月的每天订单总量和总的金额从前端到后...原创 2019-08-20 12:42:19 · 641 阅读 · 0 评论 -
贝壳找房面试之操作系统
操作系统1.操作系统如何实现互斥锁2.对转语言有什么看法?3.指着我的简历,让我讲讲我简历里最擅长的。对称加密与非对称加密区别。图的的数据结构是什么?如何表示。session 与 cookie。锁有哪些说说 epoll 模型。面试官上来一个问题,你的优点是什么进程和线程,进程通信方式,线程通信方式有10条线程,需要同时开始执行,自己知道的做法全部说...原创 2019-08-20 12:41:35 · 480 阅读 · 0 评论 -
贝壳找房面试之计算机网络
二台服务器要通信,需要考虑哪些指标?如效率、可靠性等,如何设计这么个可靠的协议 怎么判断系统是32位还是64位,系统下的数据类型的大小是否固定 linux下输入uname -m或者arch,显示包含X86_64就是64位操作系统,i686就是32位操作系统。或者点开操作系统的设置来查看。位数表示计算机虚拟内存大小,62位操作系统的虚拟内存大小是2^64。不固定,例如指针变量,32位操作系统下是...原创 2019-08-20 12:40:45 · 313 阅读 · 0 评论 -
C++内存管理技术内幕
C++内存分配方式 一个进程被分配的虚拟内存空间包含以下几个区域(从低地址向高地址):文字常量区、代码区、全局区(.data/.bss)、堆区、共享库存储器映射区、栈区、用户栈(存储命令行参数和环境变量)。 对于这几个区存储的什么内容前面博客有介绍。虚拟内存空间一般是从0x0000 0000-0xffff ffff,大于共4G,前3G是用户空间,后1G是内核空间。 栈的大小可以设置,在类UN...原创 2019-08-20 12:38:56 · 453 阅读 · 0 评论 -
InnoDB事务隔离级别
新说Mysql事务隔离级别Mysql中事务ACID实现原理事务隔离级别是ACID中的I。事务隔离级别有:读未提交(RU):事务能够读取到其他事务还未提交的数据。读已提交(RC):事务只能读取到其他事务已经提交的数据。可重复读(RR):事务多次读取的数据是相同的。可串行化(S):完全串行化的读,每次读都需要获得表级共享锁,读写相互会阻塞。read uncommitte...原创 2019-08-11 00:38:32 · 116 阅读 · 0 评论 -
二叉树前序/中序/后序遍历非递归实现
前序遍历leetcode144 前序遍历递归过程如下: void inorderTraversal(TreeNode* root){ if(root==nullptr) return root; cout<<root->val<<endl; inorderTraversal(root->left); ino...原创 2019-08-21 12:53:24 · 199 阅读 · 0 评论 -
虚函数实现多态
基类指针可以指向子类对象,假设基类中的函数并没有定义成虚函数,那么这个指针就无法调用子类的函数,思维习惯上,如果指针指向了子类对象就应该调用子类的成员函数,但是如果不声明该函数为虚函数,就无法访问子类的成员函数。此外想说一下,基类指针,指向派生类对象,也就只能访问虚函数对应的函数,其他成员函数也不能访问,派生类新定义的成员变量不可以访问,派生类从基类继承的成员变量可以访问。C++中虚函数的唯一...原创 2019-09-05 20:50:52 · 1297 阅读 · 0 评论 -
类模板
模板是泛型编程的基础。一个类或一个函数可以用来操纵多种类型的对象。标准库中的容器、迭代器和算法是很好的泛型编程的例子。标准库用独立于类型的方式定义每个容器、迭代器和算法,因此几乎可以在任意类型上使用标准库的类和函数。可以不用为每个类型定义一个新函数,而是只定义一个函数模板(function template)。函数模板是一个独立于类型的函数,可作为一种方式,产生函数的特定类型版本。...原创 2019-09-05 15:33:13 · 178 阅读 · 0 评论 -
上下文切换
上下文切换原创 2019-08-17 20:45:05 · 130 阅读 · 0 评论 -
LINUX锁之读写锁(C++)
读写信号量(rw_semaphore)又叫读写锁。允许多个读者同时持有该信号量;当有一个写者持有该信号量时,其他读者跟写者不可持有该信号量;当写者写完后,可以降级为读者。读写信号量使用于读多写少的情况下使用。DECLARE_RWSEM(name);//声明一个读写信号量,并对其初始化struct rw_semaphore *sem;init_rwsem(sem);//void ...原创 2019-08-17 20:42:33 · 885 阅读 · 0 评论 -
LINUX锁之自旋锁(C++)
自旋锁跟互斥锁有点类似,加锁时,如果锁变量没有被占用,则加锁成功,继续下面的代码,不同的是,如果失败,自旋锁会一直循环检查锁变量是否可用,互斥锁是线程被阻塞,可以看到,锁变量不可用时,自旋锁会一直占用CPU,而互斥锁不会。自旋锁适合于等待时间非常短的情况,它可以在任何上下文使用(进程上下文,中断上下文)。如果被保护的共享资源只在进程上下文访问,使用信号量保护该共享资源非常合适,因为信号量会阻塞...原创 2019-08-17 20:20:24 · 653 阅读 · 0 评论 -
虚拟内存
首先先了解下计算机的存储结构:虚拟内存是借助二级存储空间来扩大一级存储空间的机制。DRAM是VM系统(虚拟存储器系统)在主存中的缓存,他在主存中用在缓存虚拟页。SRAM是CPU和主存之间的高速缓冲,CPU从主存中取指。CPU先在SRAM中查找,如果不命中,则在DRAM中查找,如果再次查找失败,则通过页面置换,从磁盘中读取数据。由于IO操作开销很大,所以DRAM命中失败的开销更...原创 2019-08-17 15:57:17 · 364 阅读 · 0 评论 -
预处理系列之一(C++)
预处理阶段,要做的一件事就是对#define的处理宏定义 宏定义分两种,变量式宏定义和函数式宏定义,具体怎么使用我不想讲,主要讲一些注意点吧。 1)变量型宏定义其实是没有类型的,它只是一个符号,在预处理阶段将符号替换; 2)由于它不属于任何数据类型,所以不会被分配内存; 3)进一步,在函数调用中,它不能作为参数传递,因为无论是传值还是传引用,参数都是有类型的,都占用内存。 4)重复定...原创 2019-08-17 13:41:19 · 133 阅读 · 0 评论 -
LINUX信号量(C++)
前面我们使用了互斥量pthread_mutex_t mutex;互斥量有两个值,0或者1,mutex=1时,表示可以有一个线程可以访问公共资源,对mutex加锁,mutex-1,mutex=0,此时表明有0个线程可以访问公共资源。信号量semaphore与互斥量原理相同,只不过可以对信号量进行设值,设为p表示,此时可以有p个线程访问公共资源,当信号量为负时,表示没有线程可以访问资源。信号量...原创 2019-08-17 11:13:26 · 1314 阅读 · 0 评论 -
C++面试之智能指针
为什么要有智能指针? Java中有垃圾回收机制,C++中没有,需要程序员自己释放和分配内存。智能指针能够自动销毁内存,不用担心忘记释放内存而导致内存泄漏。智能指针指向动态内存区域(堆),会在离开指针作用域之后自动销毁内存,通过引用计数机制实现,每被使用一次,引用计数加一,每被析构一次,引用计数减一,当计数等于0时,销毁内存。常用的智能指针有shared_ptr,uniq_ptr,weak_ptr...原创 2019-08-21 20:48:27 · 251 阅读 · 0 评论 -
LINUX锁之条件锁(C++)
条件变量也叫条件锁。前面我们提到,互斥量并不是万能的,如果某一线程等待共享资源的某一条件发生,使用互斥量需要频繁加锁和解锁,利用条件变量,条件未发生时,线程阻塞,不占用内核资源,条件发生,唤醒线程。条件变量具体使用方法如下:1.线程A利用互斥量对共享资源加锁:pthread_mutex_lock(&mutex);2.线程A从共享资源里寻找条件是否发生(所谓条件,比如,链表...原创 2019-08-16 15:13:23 · 717 阅读 · 0 评论 -
贝壳找房面试之c++基础问答
1.设计模式了解吗?2.C++面向对象的方式面向过程的编程思路是,解决一个问题分别几个步骤,使用函数来完成各个步骤的任务,不同函数具有不同的功能,按照程序执行的顺序调用函数,组成一个可以运行的程序。C++面向对象将问题模块化,抽象出各种类,类包含数据和对数据的操作,将类实例化就得到一个具体的对象,对于问题的解决,需要依赖于各个类的对象,对象与对象之间相互利用,不可分割。封装好的类...原创 2019-08-20 21:03:19 · 517 阅读 · 0 评论 -
IOS的几种锁 C++
1.互斥锁互斥锁在同一时刻只允许一个线程访问资源。#include <pthread.h>pthread_mutex_t mutex;pthread_mutex_init(&mutex,NULL);//初始化或者这种方式初始化:pthread_mutex_t mutex=PTHREAD_MUTEX_INITIALIZER;对锁变量进行加锁的方式如下:pt...原创 2019-08-14 16:00:07 · 159 阅读 · 0 评论 -
排序算法大总结
这篇博客用C++实现各种排序算法,并对他们的时间复杂度以及稳定性进行分析。所谓稳定性是指排序前后,两个相等的数的相对位置不变。稳定排序法:冒泡排序(交换只发生在相邻的两个不等数之间),插入排序(只跟比它大的数据交换),归并排序(我们可以规定元素相等时,先放前一序列的元素)。不稳定排序法:堆排序,选择排序(举例:序列5 8 5 2 9, 我们知道第一遍选择第1个元素5会和2交换,那么原序列中...原创 2019-08-19 23:24:43 · 118 阅读 · 0 评论 -
森林与二叉树的转换
什么是森林?森林是多棵互不相交的树组成的集合。森林要转换成二叉树,首先需要学会如何将树转换成二叉树。树转换成二叉树1.加线:所有兄弟结点之间加一条线;2.去线:树中每一个结点,只保留与最左边孩子结点的连线,去掉所有与其他结点的连线;3.旋转:以根节点为轴心,将树顺时针旋转一定角度,使其结构分明。森林转换成二叉树1.先将森林里的每一棵树转换成二叉树;2.森...原创 2019-08-04 13:31:10 · 2871 阅读 · 0 评论 -
哈夫曼树和哈夫曼编码
哈夫曼树是一种带权路径长度最小的二叉树,也叫最优二叉树。树的带权路径长度指的是:假设二叉树有n个叶子结点,每个叶子结点都带有权重,那么这棵二叉树的带权路径长度和为:从根节点到每一个叶子结点的路径长度*叶子结点权重的和,具体公式如下:Wk为第k个叶子结点的权重,Lk为根节点到第k个叶子结点的路径长度。相关术语1.树的路径长度:从根节点到各个叶子结点路径长度之和;2....原创 2019-08-04 10:53:28 · 437 阅读 · 0 评论 -
前序、中序构建二叉树,并遍历
首先,构建BinaryTree.h头文件//// Created by JanzeeLiu on 2019-07-28.//#ifndef BINARYTREE_H#define BINARYTREE_H#include <iostream>#include <vector>struct TreeNode{ int val; Tree...原创 2019-07-29 22:41:34 · 146 阅读 · 0 评论 -
python爬虫实现火车票余票查询
python爬虫实现火车票余票查询获取终端输入的命令行参数重构请求url,解析返回的json数据获取终端输入的命令行参数例如:python3 tickets.py -dg 成都 南京 2016-10-10,包含车次类型,发站与终止站,以及日期,我们通过docopt这个包中的工具来解析命令行,如下,我们将命令行的参数存入了arguments变量当中,它是一个字典。Usage: tick...原创 2019-06-11 21:17:04 · 1755 阅读 · 0 评论 -
Vector的扩充机制
(参见知乎大佬的回答,并加以了解释)使用k=2增长因子的问题在于,每次扩展的新尺寸必然刚好大于之前分配的总和:什么意思?假设初始长度为c,那么看下图:之前被分配的空间不能利用对缓存并不友好,最好把增长因子设为1<k<2,例如 Folly 采用 1.5,RapidJSON 也是跟随采用 1.5,k=1.5时,可以在几次扩容之后,重用之前的内存。...原创 2019-05-21 10:23:48 · 1052 阅读 · 0 评论 -
C++笔试注意事项
尽量使用scanf printf,因为cin/cout要慢20倍左右。#include <bits/stdc++.h>,基本上所有的代码只要用了这个头文件就不再写其他头文件了。原创 2019-02-20 21:17:16 · 244 阅读 · 0 评论 -
C++学习之数组、指针与字符串
1.数组二维数组在内存中是按行存放的,先存第一行,再存第二行,按下标有小到大存放,,这叫行优先存储。动态生存期的数组,每个元素的初值是不确定的。int a[][3]={1,2,0,1,1,0};int a[2][3]={{1,2,0},{1,1,0}};const int a[][3]={1,2,0,1,1,0};//也可以声明为常量当数组作为函数的参数时,如果传递的是数组名,那这是传...原创 2019-02-18 00:23:53 · 309 阅读 · 0 评论 -
C++学习之数据的共享与保护
1.标志符的作用域与可见性函数原型作用域在函数原型声明时,形式参数的作用范围就是函数原型作用域。例如有如下函数声明:double area(double radius);标志radius的作用(有效)范围就在函数area形参列表的左右括号之间。局部作用域函数形参列表中形参的作用域,从形参列表中的声明处开始,到整个函数体结束之处为止。函数体内声明的变量,其作用域从声明处开始,一...原创 2019-02-05 23:00:59 · 471 阅读 · 0 评论 -
Leetcode怎么使用?
第一次使用leetcode写了下c++的第一个题目“宝石与石头”。我的解答如下:我觉得自己写的没问题,本地编译器也编译成功了,但是就是在leetcode上一直报错。后来才发现是还不清楚leetcode的使用。每次打开一个题目,你会发现只有一个class类,leetcode要求你写一个function完成指定的要求,其他的(如main)都已经写好了,并不是所有代码都得自己写。意思就是...原创 2019-01-09 18:07:46 · 6929 阅读 · 0 评论 -
C++学习之类与对象
1.类的定义原创 2019-01-11 22:03:17 · 400 阅读 · 0 评论 -
C++学习之函数
1.函数的递归调用函数直接或间接的调用自身叫做递归调用。例如汉诺塔问题,可以用递归来解决。#include<iostream>using namespace std;void hanoi(int n,char A,char B,char C){ if (n==1) cout<<A<<"-->"<<C<&l..原创 2019-01-11 22:01:26 · 130 阅读 · 0 评论 -
C++学习笔记之基本概念
1. 基本数据类型类型名长度(字节)bool1char1int2long4float4double82.常量整型常量:1,9;int i=2;。实型常量:默认为double型,如,12.5。其指数形式应该遵循:整数和小数部分可以省略,但不能都省略,字母E可以大写也可以小写。0.345E+2表示0.345✖️10^2,1.E...原创 2019-01-11 21:28:09 · 609 阅读 · 2 评论 -
华为2016校园招聘上机笔试题第二题
开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号。处理:1.记录最多8条错误记录,对相同的错误记录(即文件名称和行号完全匹配)只记录一条,错误计数增加;(文件所在的目录不同,文件名和行号相同也要合并)2.超过16个字符的文件名称,只记录文件的最后有效16个字符;(如果文件名不同,而只是文件名的后16个字符和行号相同,也不要合并)3.输入的文件可能带路径,记录文件名称...原创 2019-08-05 09:50:58 · 321 阅读 · 0 评论 -
mac epoll
mac下面没有epoll,所以无法在clion中#include <sys/epoll.h>原创 2019-08-05 15:54:38 · 889 阅读 · 1 评论