- 博客(52)
- 收藏
- 关注

原创 位运算面试题常用技巧
位操作是面试中的常见考题一种,位操作有~, <<, >>, &, |, ^六种。左移和右移对于左移正数和负数是相同的;对于右移,正数补0,负数补1. 例如 对于一个16位的整数:0000 0000 0000 0101,左移一位是0000 0000 0000 1010,右移一位是0000 0000 0000 0010 对于一个16位的负数:1000 0000 0000 0101,左移一位是000
2017-07-19 15:04:12
7591

原创 C++后台开发校招面试常见问题
C和C++语言基础参考书籍:《C++ primer》,《effective C++》,《STL源码解析》,《深度搜索C++对象模型》extern关键字作用extern声明变量在在外部定义?extern修饰函数?extern C的作用?用法?static关键字作用static修饰局部变量?static全局变量?(限定变量在一个编译单元内,一个编译单元就是指一个cpp和它包含...
2017-06-06 11:15:07
41387
3
原创 腾讯、头条、shopee2019年底面经
2019年底面经虽然已经临近年末,但是还是萌生要看新机会的想法,主要的原因是觉得在目前的岗位上技术增长遇到的瓶颈,因此想去做一些更有挑战的工作。因为仍然准备继续在深圳工作,因此选定了三家公司,腾讯、字节跳动和 shopee,考虑的岗位方向仍然是后台开发(其他岗位也面不上呀,伤心)。虽然年底跳拿不到年终奖了,但是我觉得和自己个人整个职业生涯的发展比起来算不了什么,最好的时机永远是当下。准备敲定...
2019-11-04 23:28:36
3731
原创 一文带你了解Unix,Linux,GNU,GPL的关系
Linux与UnixUnix操作系统是一个强大的多用户、多任务操作系统,支持多种处理器架构,按照操作系统的分类,属于分时操作系统,最早由KenThompson、Dennis Ritchie和Douglas McIlroy于1969年在AT&T的贝尔实验室开发。目前它的商标权由国际开放标准组织所拥有,只有符合单一Unix规范(Single UNIX Specification,SUS)的...
2018-04-11 15:58:10
3274
原创 字符串与数字之间转换
字符串与数字之间转换数字转字符串数字转字符串有以下几种方法1. sprintfsprint函数如下所示:sprintf(buffer, "a = %d", a);#include <iostream>#include <stdio.h>#include <string.h>#include <cstdlib>using namespace std;int main(){ int
2017-11-25 14:46:51
38455
原创 Linux下远程登录阿里云服务器
购买阿里云服务器学生党买个阿里云服务器,每个月只要十元,可以自己实践搭建服务器。 在账号管理目录下–>学生认证–>云翼计划。没有认证的,按照操作认证一下就好了。 配置不能选择,只有一种,不过你可以选择一下环境和地域。 购买完成后,创建实例。 SSH远程连接云服务器SSH命令使用可以参考阮一峰这篇博客:http://www.ruanyifeng.com/blog/2011/12/ssh_rem
2017-11-16 18:18:05
15160
原创 Unix/Linux网络编程(2)——一个有趣的现象
第一节我们已经讲述了TCP的基本客户服务器模型,现在有这样一个问题:当客户端connect成功了,但是服务器在accept函数前阻塞了,会发生什么现象?将前面服务端代码修改一下,在accept函数之间使进程睡眠。客户端代码不用变动。/******** 头文件 *********/#include <unistd.h>#include <sys/socket.h>#include <sys/ty
2017-11-14 23:24:41
399
原创 Linux下C++语言实现ls命令
实现ls命令,支持-l,-a,-r,-q等选项。//ls命令#include <stdio.h>#include <dirent.h>#include <sys/types.h>#include <sys/stat.h>#include <unistd.h>#include <stdlib.h>#inc...
2017-11-12 10:05:37
1816
原创 一道关于虚函数表的题
之前看过了陈皓大神关于虚函数表的博客,感觉对多态和虚函数表理解又清楚了一些,但是前不久喷到一道网易的笔试题,主要考察的也是对虚函数的理解,当时在某些地方又纠结了一下,自己写一段代码来验证,加深理解。网易的原题和下面的代码可能不一样,记不太清了。根据自己的理解写了一段代码。#include <iostream>using namespace std;class base{public: v
2017-08-17 20:58:55
537
原创 MySQL数据库
SQL语言表的创建,删除,修改链接方式的区别(内链接,左外连接,右外连接,全连接),连接的条件(natural,using,on)嵌入子查询MySQL的架构MySQL的架构分三层,最上层是采用客户端和服务端的交互模式,响应请求;中间层是核心,用于实现查询解析,缓存,优化等;第三层是存储引擎,负责数据的存储和提取。索引方法顺序索引(稠密索引和稀疏索引)顺序索引的方式和操作系统内存管理的分页机制
2017-08-08 16:25:14
2996
原创 Ubuntu下安装MySQL安装及入門
最近在学习SQL语言,只学语言很无聊,想来装上MySQL边学习,边练习SQL语言。(linux下写文章,已经下切换到了简体有些字还是只能显示繁体,不知道为什么)MySQL安装Ubuntu下安装MySQL的命令如下sudo apt-get install mysql-serversudo apt-get install mysql-client sudo apt-get install libmysq
2017-08-06 18:53:11
737
原创 POSIX信号量实现互斥
采用POSIX信号量实现互斥原语,实现线程间同步/* * 采用信号量实现互斥原语 */#include <stdio.h>#include <stdlib.h>#include <semaphore.h>#include <unistd.h>#include <errno.h>#include <limits.h>#include <sys/types.h>#include <fc
2017-08-03 20:53:16
529
原创 简易正则匹配,实现*和?
一道常见的面试题,简易的正则匹配,实现*和?/* * 简易正则表达,匹配*和? * *表示匹配任意个字符 * ?表示匹配一个字符 */#include #include int ismatch(char* regexp, char* str){ //如果匹配的字符串为空 if(*str == '\0') { if(*regexp == '\0') { r
2017-08-03 10:33:06
1114
原创 字符串实现加法和乘法
通过字符串实现加法#include <iostream>#include <string>using namespace std;string add(string strLeft, string strRight){ for(string::size_type i = 0; i < strLeft.size(); ++i) { strLeft[i] -= '0'
2017-08-02 16:08:14
4807
原创 vim替换
vim中替换命令经常忘记,写篇博客记一下说明:old表示被替换的字符串,new表示用来替换的新的字符串替换当前行的第一个目标字符串:s/old/new/替换当前行中所有的目标字符串:s/old/new/g替换当前文本中所有目标字符串:% s/old/new/g
2017-08-02 11:25:37
421
原创 二分查找及其变化应用
经典的二分查找两次二分查找题:统计一个数字在排序数组中出现的次数。例如输入排序数组{1, 2, 3, 3, 3, 3, 4, 5}和数字3,由于3在这个数组中出现了4次,因此输出4。分析:对于该题,如果直接遍历很容易得到出现的次数,但是其时间复杂度为O(N)。因为数组是排序的所以我们可以考虑二分查找来加快速度。通过二分查找分别找到最左边的3和最右边的3位置,就可以计算得到3的个数,算法复杂度为O(l
2017-08-01 23:04:42
486
原创 gdb调试
将陈皓的博客进行整理一个目录便于查阅:GDBgdb调试1 - 基本使用gdb调试2 - 断点使用gdb调试3 - 操作停止点gdb调试4 - 查看栈信息gdb调试5 - 查看运行时数据gdb调试6 - 设置显示选项gdb调试7 - 改变程序的执行
2017-07-22 15:48:17
1210
翻译 Linux硬链接和软链接
Hard LinksHard links are the original Unix way of creating links, compared to symbolic links, which are more modern. By default, every file has a single hard link that gives the file its name. When w
2017-07-20 20:21:18
443
原创 打印文件指定行
Linux打印第7行到第8行的内容head -n 8 filename | tail -n 2或head -n 8 filename | tail -n +7
2017-07-20 18:48:52
749
原创 SQL基础语法
SQL计算为了便于表达,假设存在一张表,该表的名称为fake_apps.该表有五列,分别是: 列名 值类型 id INTEGER name TEXT category TEXT downloads INTEGER price REALCOUNT()COUNT()是最快的方式,统计一张表总共的行数。COUNT()函数的参数是一个列的名称,统计整个表所有的
2017-07-17 16:08:23
4293
1
原创 排序算法比较
冒泡排序排序过程图片演示复杂度分析C语言代码插入排序排序过程图片演示复杂度分析C语言代码快排排序过程图片演示复杂度分析C语言代码 算法 平均时间复杂度 最好情况 最坏情况 空间复杂度 稳定性 冒泡排序 O(N2)O(N^2) O(N2)O(N^2) O(N2)O(N^2) O(1)O(1) 稳定 插入排序 O(N2)O(N^2
2017-07-01 14:41:02
2712
原创 进程与线程
进程与线程几种调度算法的原理?进程和线程区别?进程是资源分配的基本单位,线程是cpu调度,或者说是程序执行的最小单位。但是并不是说CPU不在以进程为单位进行调度,虽然在某些操作系统中是这样。同一个进程中并行运行多个线程,就是对在同一台计算机上运行多个进程的模拟。进程有独立的地址空间,而同一进程中的线程共享该进程的地址空间。比如在linux下面启动一个新的进程,系统必须分配给它独立的地址空间,建立
2017-06-30 22:02:22
3953
1
原创 二叉树的前中后序遍历
本文介绍二叉树的前序,中序和后序遍历,采用递归和非递归两种方式实现。除此之外,还介绍了对二叉树按层遍历的方法。对树的前中后序遍历是深度优先搜索的策略,因此用栈实现。对树的按层遍历是广度优先搜索,因此采用队列实现。树的前序,中序和后序遍历,都是针对父节点而言的。二叉树的定义下面给出二叉树的定义:typedef Tree* binaryTree;struct Tree{ int
2017-06-26 22:59:34
5164
原创 散列/哈希表
概念散列是一种以常数平均时间执行插入,删除和查找的技术。散列的实现通过散列表和Key-Value对实现。关键字Key通过一定的规则映射到散列表的某一个单元,这个映射的规则就是散列函数。不同的关键字可能会映射到同一个单元,这种情况成为冲突或者哈希碰撞。哈希函数hash函数的构造准则:简单、均匀 1. 散列函数的计算简单,快速; 2. 散列函数能将关键字集合K均匀地分布在地址集{0,1,…,m-1}
2017-06-24 18:47:03
2919
原创 static详解
static是C和C++的关键词,static在C++中比在C中有着更丰富的用法。static在C中的作用1 static修饰局部变量static修饰局部变量时,使得被修饰的变量成为静态变量,存储在静态区。存储在静态区的数据生命周期与程序相同,在main函数之前初始化,在程序退出时销毁。(无论是局部静态还是全局静态)局部静态变量使得该变量在退出函数后,不会被销毁,因此再次调用该函数时,该变量的值与上
2017-06-07 21:44:42
19612
1
原创 vim复制粘贴
vim剪贴板vim简单的复制粘帖基本的复制粘贴方法,简单列出命令,不再赘述y 可视模式下选中文本,复制该文本数据yy 复制光标所在处一行nyy 复制从光标所在行开始的n行p 在光标所在行的下一行粘贴vim寄存器vim中存在十种寄存器,在vim正常模式下输入:help registers可以看到如下结果。十种寄存器分别有各自的作用。There are ten types
2017-06-06 15:16:06
709
原创 指针与数组
一维数组一维数组的定义int a1[5];int a2[] = {1, 2, 3, 4, 5};char b1[6];char b2[] = {'a', 'b', 'c', 'd', 'e', '\0'};char b3[] = "abcde";数组定义的时候可以初始化,也可以不初始化,但必须指明数组元素的个数;数据元素的个数可以通过初始化隐身确定,上面代码中a1和a2的元素个数相同,b
2017-05-12 18:47:09
386
原创 git与github简明介绍
将命令罗列出来,以备忘记时可以快速查看,如果需要具体学习,可以参考廖雪峰git教程初始化一个仓库命令:git init添加文件到Git仓库,分两步:第一步,使用命令git add ,注意,可反复多次使用,添加多个文件;第二步,使用命令git commit,完成,会提交所有add的文件。举例说明$ git add file1.txt$ git add file2.txt file3.txt$ gi
2017-04-25 10:40:12
311
原创 Windows端GitHub初级使用教程
GitHub初级使用教程 写这篇文章的目的很简单就是为了防止自己忘记相关操作。创建Repository在GitHub主页界面电机加号,然后点击New Repository 2. 为你的仓库取个名字 3. 选择public,private需要付费 4. 选择上 Initialize this repository wit
2017-04-25 09:15:28
586
原创 死锁
死锁的概念多个进程都被阻塞,并一直处于这样的状态,这种状态称为死锁。死锁的分类死锁分为两类:资源死锁和通信死锁。 资源死锁是由于多个进程或线程同时获取多个资源时发生。下面这段代码就可能发生死锁。semaphore resource1;semaphore resource2;void process_A(void){ down(resource1); down(resource2)
2017-04-22 15:26:19
3202
原创 C++数字与字符串之间的转换
C/C++数字与字符串之间的转换sprintf函数实现数字与字符串的转换sprintf()函数定义sprintf(buffer, "a = %d", a);#include <iostream>#include <stdio.h>#include <string.h>#include <cstdlib>using namespace std;int main(){ int a,
2017-04-21 20:08:27
1715
原创 C++中按行读取文本数据
C++中按行读取文本数据假设文本数据例如为:2 55 822 55 21 12 38 5 66 #include #include #include #include //定义文件路径 string strFileName = "case5.txt";/*文件路径*/ //定义一个文件流 i
2017-04-21 19:41:30
3985
原创 sizeof与内存对齐
sizeof内存对齐三原则:第一个数据从0开始,以后每个数据要从他本身大小的整数倍开始存;如果这个数据是个结构体或者数组,则从其最大元素的整数倍开始存;最后收尾要是最大成员的整数倍,不足补齐;对齐方式(变量存放的起始地址相对于结构的起始地址的偏移量) Char 偏移量必须为sizeof(char)即1的倍数 int 偏移量必须为sizeof(int)即4的倍数 floa
2017-04-21 19:37:12
1424
原创 new与malloc的区别以及实现方法
new和malloc的内存分配在哪分配在堆上。也有说new是分配在自由存储区而malloc分配在堆上,自由存储区可以是堆也可以不是,具体要看new内部的实现。操作系统在堆上维护一个空闲内存链表,当需要分配内存的时候,就查找这个表,找到一块内存大于所需内存的区域,分配内存并将剩余的内存空间返还到空闲链表上(如果有剩余的话)。new/delete和malloc/free的区别1. mall...
2017-04-21 19:34:10
10078
2
原创 操作系统对内存管理
为什么叫内存的抽象?如果看过设计模式的人可能会知道,设计模式中提到最多的概念之一就是抽象,纯虚的基类作为接口就是对各种派生类对象的抽象。调用接口的用户,并不知道内部如何实现,因此内部实现的方法可能也有多种。地址空间也可以这样理解,32位机上,创建进程时操作系统为进程分配4GB的独立地址空间,用户可以使用这4GB的独立地址空间。但是,反过来一想,给每个进程都分配4GB地址空间,对于8GB内存的计算机而
2017-04-20 11:08:11
10806
3
转载 opencv如何查看源码
这篇文章中,我们一起探讨了如何通过已经安装的OpenCV,选择不同的编译器类型,生成高度还原的OpenCV开发时的解决方案工程文件,欣赏OpenCV新版本中总计 六十六多万行的精妙源代码。我们可以对其源代码进行再次编译,得到二进制文件,或者修改原版官方的OpenCV代码,并编译后为自己所用,为深入理解OpenCV的开源魅力迈出了坚实的一步。 一、下载安装cmake
2017-04-11 09:39:57
936
原创 TCP/IP(8)-UDP Server与UDP Client(linux套接字)
上一篇文章已经讨论了linux套接字基于TCP的客户端和服务器端编程,这片文章详细讨论linux套接字基于UDP的客户端和服务器端编程。 UDP与TCP相比要简洁很多,UDP不需要listen,accept和connect过程。*1. socket函数创建套接字#include <sys/types.h>#include <sys/socket.h>sockfd = socket(AF_INE
2017-04-10 16:56:33
2970
原创 TCP/IP(7)-TCP Server与TCP Client(linux套接字)
前面几篇文章谈到的关于TCP/IP应用层以下的协议,这些协议最终是在操作系统内核中实现的,套接字API是unix系统用于网络连接的接口,后来被移植到windows系统中,就有了winsock。TCP的CS模式TCP服务器端1. 创建套接字 #include <sys/socket.h> int socket(int family,int type,int protocol);
2017-04-09 11:14:55
12318
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人