日常开发笔记总结(十)

面试总结专题

用户态到内核态转换

操作系统的进程空间可分为用户空间和内核空间,它们需要不同的执行权限。其中系统调用运行在内核空间。

从用户态切换到内核态主要有如下几种方式:

1.系统调用

在电脑中,系统调用(英语:system call),指运行在用户空间的程序向操作系统内核请求需要更高权限运行的服务。系统调用提供用户程序与操作系统之间的接口。大多数系统交互式操作需求在内核态运行。如设备IO操作或者进程间通信。

2.异常

页缺失(英语:Page fault,又名硬错误、硬中断、分页错误、寻页缺失、缺页中断、页故障等)指的是当软件试图访问已映射在虚拟地址空间中,但是目前并未......

日常开发笔记总结(九)

deprecated用法

一个可运行的demo:

#include <iostream>

// [[deprecated]]

#if __cplusplus >= 201402

# define CPP_DEPRECATED [[deprecated]]

#else

# define CPP_DEPRECATED [[gnu::deprecated]]

#endif // __cplusplus >= 201402

CPP_DEPRECATED

void add(int a,int b);

void add(int a,int b)

{

in......

日常开发笔记总结(八)

下列程序编译是否会报错:

// directive_1.c

#include <stdio.h>

#ifndef MIN

#define MIN(x, y) ((x) > (y) ? (y) : (x))

#endif /**/x

int main()

{

printf("min val = %d\n", MIN(100, -1));

return 0;

}

讲道理程序endif后面有个多余的x应该会编译失败,可是程序编译仅仅有个告警,运行正常。

[root c++]#gcc -g -Wall -o gcc gcc.c

gcc.c:6:12: warn......

日常开发笔记总结(七)

5月份迎来了今年最忙的一个时期,看mbp本周屏幕使用时间仅55分钟,今天难得不用跑装修相关的事情,得以坐在书桌前,随手翻几页书。

函数指针数组

//seq_array是个数组,内放函数指针

const vector<int *> (*seq_array[])(int) = {

fibon_seq, lucase_seq, pell_seq,

triang_seq, sequare_seq, pent_seq

};

这里其实可以使用typedef进行优化:

typedef const vector<unsigned int>* (*pfunc)(int);......

日常开发笔记总结(六)

信号安全函数

进程捕获到信号并对其进行处理时,进程正在执行的正常指令序列就被信号处理程序临时中断,它首先执行该信号处理程序中的指令。如果从信号处理程序中返回,则继续执行在捕获到信号时进程正在执行的正常的指令序列。有如下三类函数不能在信号处理程序中调用(非信号安全函数)

a)已知它们使用静态数据结构(如getpwnam函数)

b)它们调用malloc或free函数

c)标准I/O函数,标准I/O库的很多实现都以不可重入的方式使用全局数据结构。这里需要特别说明一点,书上或网上一些例子,信号处理函数中调用了printf,这里仅仅为了直观说明程序的运行,printf不能在信号处理函数中调用。

......

日常开发笔记总结(五)

周末在家收拾东西,找到一本刚入职时记的笔记,重新读一遍记录部分内容方便查阅。

获取下标为n的元素地址

当时记录在笔记本上旁边有个大大的问号,为何不使用下标形式呢?

#include <stdio.h>

//获取下标为n的元素地址

#define ELEM_PTR(base,n,esize) ((void *)(((char *)base + n*esize)))

int main()

{

int arr[] = {1,2,3,4,5,6,7,8,9,10};

printf("address of fifth elem = %p.\n",ELEM_PTR(arr,5,4......

日常开发笔记总结(四)

在geeksforgeeks上看到一篇介绍shared_ptr的文章,里面提到了Cyclic Dependency。

维基百科中也有详细的介绍Circular dependency

维基百科中提到一种循环依赖关系错误的例子:

a.h

#ifndef A_H

#define A_H

class B; //forward declaration

cl......

日常开发笔记总结(三)

拷贝赋值函数#include <string>

#include <iostream>

using namespace std;

class Person{

string name;

int age;

public:

Person(const string &name,int age):name(name),age(age){}

//拷贝构造和拷贝赋值函数

Person(const Person &p):name(p.name),age(p.age){}

Person& operator=(const Person &p)

{

cou......

日常开发笔记总结(二)

CTF-ALL-In_One笔记

看到朋友圈学弟推荐他舍友写的一套CTF学习路线,作为一名"安全"从业人员,个人觉得还是有必要静下心来好好学习。本文只记录一些相对不太熟或理解不深刻的知识点,并尽量辅之以实例。

CTF-ALL-In_One

apropos 命令

apropos [whatever] 在一些特定的包含系统命令的简短描述的数据库文件里查找关键字

[root workspace]#apropos passwd

chgpasswd (8) - update group passwords in batch mode

chpasswd ......

日常开发笔记总结(一)

记录日常开发中的一些常用技巧,有的可能比较小,不适合专门写一篇文章,那么可以写在笔记总结系列里面。

scp命令用法发送目录到服务器

比如我想把一个目录下的所有文件发送到服务器中,以C-Thead-Pool为例:

bogon:github coder52$ scp -r C-Thread-Pool/ root@10.211.55.49:~

root@10.211.55.49's password:

LICENSE 100% 1090 592.0KB/s 00:00

thpool.h ......