自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

oscarwin

在分享中进步!

  • 博客(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 7445 1

原创 C++后台开发校招面试常见问题

C和C++语言基础参考书籍:《C++ primer》,《effective C++》,《STL源码解析》,《深度搜索C++对象模型》extern关键字作用extern声明变量在在外部定义?extern修饰函数?extern C的作用?用法?static关键字作用static修饰局部变量?static全局变量?(限定变量在一个编译单元内,一个编译单元就是指一个cpp和它包含...

2017-06-06 11:15:07 40432 10

原创 腾讯、头条、shopee2019年底面经

2019年底面经虽然已经临近年末,但是还是萌生要看新机会的想法,主要的原因是觉得在目前的岗位上技术增长遇到的瓶颈,因此想去做一些更有挑战的工作。因为仍然准备继续在深圳工作,因此选定了三家公司,腾讯、字节跳动和 shopee,考虑的岗位方向仍然是后台开发(其他岗位也面不上呀,伤心)。虽然年底跳拿不到年终奖了,但是我觉得和自己个人整个职业生涯的发展比起来算不了什么,最好的时机永远是当下。准备敲定...

2019-11-04 23:28:36 3550

原创 一文带你了解Unix,Linux,GNU,GPL的关系

Linux与UnixUnix操作系统是一个强大的多用户、多任务操作系统,支持多种处理器架构,按照操作系统的分类,属于分时操作系统,最早由KenThompson、Dennis Ritchie和Douglas McIlroy于1969年在AT&amp;T的贝尔实验室开发。目前它的商标权由国际开放标准组织所拥有,只有符合单一Unix规范(Single UNIX Specification,SUS)的...

2018-04-11 15:58:10 3095

原创 字符串与数字之间转换

字符串与数字之间转换数字转字符串数字转字符串有以下几种方法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 37377

原创 Linux下远程登录阿里云服务器

购买阿里云服务器学生党买个阿里云服务器,每个月只要十元,可以自己实践搭建服务器。 在账号管理目录下–>学生认证–>云翼计划。没有认证的,按照操作认证一下就好了。 配置不能选择,只有一种,不过你可以选择一下环境和地域。 购买完成后,创建实例。 SSH远程连接云服务器SSH命令使用可以参考阮一峰这篇博客:http://www.ruanyifeng.com/blog/2011/12/ssh_rem

2017-11-16 18:18:05 15015

原创 Unix/Linux网络编程(2)——一个有趣的现象

第一节我们已经讲述了TCP的基本客户服务器模型,现在有这样一个问题:当客户端connect成功了,但是服务器在accept函数前阻塞了,会发生什么现象?将前面服务端代码修改一下,在accept函数之间使进程睡眠。客户端代码不用变动。/******** 头文件 *********/#include <unistd.h>#include <sys/socket.h>#include <sys/ty

2017-11-14 23:24:41 360

原创 Unix/Linux网络编程(1)——简单的TCP客户服务器模型

简单的TCP客户服务器模型

2017-11-14 22:46:50 1214

原创 Linux下C++语言实现ls命令

实现ls命令,支持-l,-a,-r,-q等选项。//ls命令#include &lt;stdio.h&gt;#include &lt;dirent.h&gt;#include &lt;sys/types.h&gt;#include &lt;sys/stat.h&gt;#include &lt;unistd.h&gt;#include &lt;stdlib.h&gt;#inc...

2017-11-12 10:05:37 1704

原创 一道关于虚函数表的题

之前看过了陈皓大神关于虚函数表的博客,感觉对多态和虚函数表理解又清楚了一些,但是前不久喷到一道网易的笔试题,主要考察的也是对虚函数的理解,当时在某些地方又纠结了一下,自己写一段代码来验证,加深理解。网易的原题和下面的代码可能不一样,记不太清了。根据自己的理解写了一段代码。#include <iostream>using namespace std;class base{public: v

2017-08-17 20:58:55 490

原创 MySQL数据库

SQL语言表的创建,删除,修改链接方式的区别(内链接,左外连接,右外连接,全连接),连接的条件(natural,using,on)嵌入子查询MySQL的架构MySQL的架构分三层,最上层是采用客户端和服务端的交互模式,响应请求;中间层是核心,用于实现查询解析,缓存,优化等;第三层是存储引擎,负责数据的存储和提取。索引方法顺序索引(稠密索引和稀疏索引)顺序索引的方式和操作系统内存管理的分页机制

2017-08-08 16:25:14 2899

原创 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 691

原创 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 468

原创 简易正则匹配,实现*和?

一道常见的面试题,简易的正则匹配,实现*和?/* * 简易正则表达,匹配*和? * *表示匹配任意个字符 * ?表示匹配一个字符 */#include #include int ismatch(char* regexp, char* str){ //如果匹配的字符串为空 if(*str == '\0') { if(*regexp == '\0') { r

2017-08-03 10:33:06 1048

原创 字符串实现加法和乘法

通过字符串实现加法#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 4725

原创 vim替换

vim中替换命令经常忘记,写篇博客记一下说明:old表示被替换的字符串,new表示用来替换的新的字符串替换当前行的第一个目标字符串:s/old/new/替换当前行中所有的目标字符串:s/old/new/g替换当前文本中所有目标字符串:% s/old/new/g

2017-08-02 11:25:37 379

原创 二分查找及其变化应用

经典的二分查找两次二分查找题:统计一个数字在排序数组中出现的次数。例如输入排序数组{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 417

原创 gdb调试

将陈皓的博客进行整理一个目录便于查阅:GDBgdb调试1 - 基本使用gdb调试2 - 断点使用gdb调试3 - 操作停止点gdb调试4 - 查看栈信息gdb调试5 - 查看运行时数据gdb调试6 - 设置显示选项gdb调试7 - 改变程序的执行

2017-07-22 15:48:17 1146

原创 十进制转任意进制

十进制转任意进制采用取余倒排法

2017-07-20 23:09:32 997

翻译 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 377

原创 打印文件指定行

Linux打印第7行到第8行的内容head -n 8 filename | tail -n 2或head -n 8 filename | tail -n +7

2017-07-20 18:48:52 689

原创 SQL基础语法

SQL计算为了便于表达,假设存在一张表,该表的名称为fake_apps.该表有五列,分别是: 列名 值类型 id INTEGER name TEXT category TEXT downloads INTEGER price REALCOUNT()COUNT()是最快的方式,统计一张表总共的行数。COUNT()函数的参数是一个列的名称,统计整个表所有的

2017-07-17 16:08:23 4169 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 2583 2

原创 进程与线程

进程与线程几种调度算法的原理?进程和线程区别?进程是资源分配的基本单位,线程是cpu调度,或者说是程序执行的最小单位。但是并不是说CPU不在以进程为单位进行调度,虽然在某些操作系统中是这样。同一个进程中并行运行多个线程,就是对在同一台计算机上运行多个进程的模拟。进程有独立的地址空间,而同一进程中的线程共享该进程的地址空间。比如在linux下面启动一个新的进程,系统必须分配给它独立的地址空间,建立

2017-06-30 22:02:22 3880 2

原创 二叉树的前中后序遍历

本文介绍二叉树的前序,中序和后序遍历,采用递归和非递归两种方式实现。除此之外,还介绍了对二叉树按层遍历的方法。对树的前中后序遍历是深度优先搜索的策略,因此用栈实现。对树的按层遍历是广度优先搜索,因此采用队列实现。树的前序,中序和后序遍历,都是针对父节点而言的。二叉树的定义下面给出二叉树的定义:typedef Tree* binaryTree;struct Tree{ int

2017-06-26 22:59:34 4970

原创 散列/哈希表

概念散列是一种以常数平均时间执行插入,删除和查找的技术。散列的实现通过散列表和Key-Value对实现。关键字Key通过一定的规则映射到散列表的某一个单元,这个映射的规则就是散列函数。不同的关键字可能会映射到同一个单元,这种情况成为冲突或者哈希碰撞。哈希函数hash函数的构造准则:简单、均匀 1. 散列函数的计算简单,快速; 2. 散列函数能将关键字集合K均匀地分布在地址集{0,1,…,m-1}

2017-06-24 18:47:03 2809

原创 static详解

static是C和C++的关键词,static在C++中比在C中有着更丰富的用法。static在C中的作用1 static修饰局部变量static修饰局部变量时,使得被修饰的变量成为静态变量,存储在静态区。存储在静态区的数据生命周期与程序相同,在main函数之前初始化,在程序退出时销毁。(无论是局部静态还是全局静态)局部静态变量使得该变量在退出函数后,不会被销毁,因此再次调用该函数时,该变量的值与上

2017-06-07 21:44:42 19304 1

原创 vim复制粘贴

vim剪贴板vim简单的复制粘帖基本的复制粘贴方法,简单列出命令,不再赘述y 可视模式下选中文本,复制该文本数据yy 复制光标所在处一行nyy 复制从光标所在行开始的n行p 在光标所在行的下一行粘贴vim寄存器vim中存在十种寄存器,在vim正常模式下输入:help registers可以看到如下结果。十种寄存器分别有各自的作用。There are ten types

2017-06-06 15:16:06 608

原创 指针与数组

一维数组一维数组的定义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 333

原创 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 275

原创 Windows端GitHub初级使用教程

GitHub初级使用教程  写这篇文章的目的很简单就是为了防止自己忘记相关操作。创建Repository在GitHub主页界面电机加号,然后点击New Repository    2. 为你的仓库取个名字    3. 选择public,private需要付费  4. 选择上 Initialize this repository wit

2017-04-25 09:15:28 538

原创 死锁

死锁的概念多个进程都被阻塞,并一直处于这样的状态,这种状态称为死锁。死锁的分类死锁分为两类:资源死锁和通信死锁。 资源死锁是由于多个进程或线程同时获取多个资源时发生。下面这段代码就可能发生死锁。semaphore resource1;semaphore resource2;void process_A(void){ down(resource1); down(resource2)

2017-04-22 15:26:19 3115

原创 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 1544

原创 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 3825

原创 sizeof与内存对齐

sizeof内存对齐三原则:第一个数据从0开始,以后每个数据要从他本身大小的整数倍开始存;如果这个数据是个结构体或者数组,则从其最大元素的整数倍开始存;最后收尾要是最大成员的整数倍,不足补齐;对齐方式(变量存放的起始地址相对于结构的起始地址的偏移量)  Char  偏移量必须为sizeof(char)即1的倍数  int   偏移量必须为sizeof(int)即4的倍数  floa

2017-04-21 19:37:12 1310

原创 new与malloc的区别以及实现方法

new和malloc的内存分配在哪分配在堆上。也有说new是分配在自由存储区而malloc分配在堆上,自由存储区可以是堆也可以不是,具体要看new内部的实现。操作系统在堆上维护一个空闲内存链表,当需要分配内存的时候,就查找这个表,找到一块内存大于所需内存的区域,分配内存并将剩余的内存空间返还到空闲链表上(如果有剩余的话)。new/delete和malloc/free的区别1. mall...

2017-04-21 19:34:10 9866 4

原创 操作系统对内存管理

为什么叫内存的抽象?如果看过设计模式的人可能会知道,设计模式中提到最多的概念之一就是抽象,纯虚的基类作为接口就是对各种派生类对象的抽象。调用接口的用户,并不知道内部如何实现,因此内部实现的方法可能也有多种。地址空间也可以这样理解,32位机上,创建进程时操作系统为进程分配4GB的独立地址空间,用户可以使用这4GB的独立地址空间。但是,反过来一想,给每个进程都分配4GB地址空间,对于8GB内存的计算机而

2017-04-20 11:08:11 10614 3

转载 opencv如何查看源码

这篇文章中,我们一起探讨了如何通过已经安装的OpenCV,选择不同的编译器类型,生成高度还原的OpenCV开发时的解决方案工程文件,欣赏OpenCV新版本中总计 六十六多万行的精妙源代码。我们可以对其源代码进行再次编译,得到二进制文件,或者修改原版官方的OpenCV代码,并编译后为自己所用,为深入理解OpenCV的开源魅力迈出了坚实的一步。  一、下载安装cmake

2017-04-11 09:39:57 877

原创 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 2843

原创 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 11840

空空如也

空空如也

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

TA关注的人

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