自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Ascend

这里是有意思的地方

  • 博客(29)
  • 收藏
  • 关注

原创 Linux kernel 5.6 的系统调用

共计547个## 64-bit system call numbers and entry vectors## The format is:# <number> <abi> <name> <entry point>## The __x64_sys_*() stubs are created on-the-fly for sys_*() system calls## The abi is "common", "64" or "x32" for

2020-10-21 10:55:20 677

原创 如何学习好Linux,以及在2020年再学Linux意义

前言首先说2020年已经算是跨入AI时代,目前回报率最高的工作或者机会都是和AI相关的,AI看似高大上,门槛好像很高,其实并不尽然。所谓什么时候起步都不算晚,但是踩准时机非常重要,目前AI技术在落地产品时候都离不开嵌入式设备的广大市场,在嵌入式软件领域与AI技术结合必然从硬件到软件重新塑造嵌入式软件领域的架构!意义Linux源码可谓是C语言的典范宝库,可以看到各种数据结构与算法在分布式其他领域的索引,对于AI算法在设备侧落地,功耗与节能是绕不开的,以智能台灯为例,单纯土豪的堆NPU芯片是无法让好产品

2020-10-20 21:43:23 231

原创 排查Linux下CPU问题所需的步骤

这里写目录标题基本理论一、平均负载定义负载高可能出现的情况命令二、上下文切换导语切换的类型怎么查看系统的上下文切换情况三、CPU 使用率怎么查看 CPU 使用率如何追踪CPU占用高的程序perf top四、软中断应对策略:常见案例1、如何解决100%CPU使用的问题基本套路1:基本套路22、解决大量僵尸进程的问题概念处理套路僵尸进程3、解决软中断导致负载高的问题总结基本理论一、平均负载定义平均负载是指单位时间内,处于可运行状态和不可中断状态的进程数。所以,它不仅包括了正在使用 CPU 的进程,还包

2020-09-07 19:15:37 739

原创 常见面试题之通用范式

目录递归模板:分治策略模板DFS模板:BFS模板面试题中有很多套路,总结熟记以下模板可以见招拆招!递归模板:参考盗梦空间Def recursion(level, param1, param2, …):# recursion terminatorIf(level > MAX_LEVEL) Print_result Return# process logic in current levelProcess_data(leve +1 ,p1, …)# drill downSelf

2020-05-27 22:00:10 266

原创 常见面试题之MAP(一)

目录15. 三数之和98. 验证二叉搜索树236. 二叉树的最近公共祖先50. Pow(x, n)169. 多数元素15. 三数之和难度中等2137给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -

2020-05-27 21:59:29 203

原创 常见面试题之优先队列(一)

目录20有效的括号code232.用栈实现队列code703数据流中的第K大元素code20有效的括号给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: “()”输出: true示例 2:输入: “()...

2020-05-06 17:33:38 276

原创 常见面试题之双指针操作(二)

目录leetcode 206反转链表codeleetcode 24两两交换其中相邻的节点codeleetcode 141环形链表codeleetcode 206反转链表反转一个单链表。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL进阶:你可以迭代或递归地反转链表。你能否用...

2020-05-06 13:25:17 194

原创 网络通信01_网络库封装(一)

网络库封装i_sys_base.h#ifndef _I_SYSB_BASE_H#include <sys/types.h>#include <sys/socket.h>void i_cout_err(const char *s);int i_accept(int fd,struct sockaddr * p_sock_addr,socklen_t * p_s...

2020-04-29 17:34:57 182

原创 线程操作02_pthread锁操作

目录mutex定义函数pthread_mutex_init函数pthread_mutex_destroy函数pthread_mutex_lock函数pthread_mutex_unlock函数pthread_mutex_trylock函数读写锁读写锁特性:pthread_rwlock_init函数pthread_rwlock_destroy函数pthread_rwlock_rdlock函数pthr...

2020-04-27 20:37:03 683

原创 线程操作01_创建pthread线程

@[TOC](目录)# 理论## 线程定义LWP:light weight process 轻量级的进程,本质仍是进程(在Linux环境下)进程:独立地址空间,拥有PCB线程:也有PCB,但没有独立的地址空间(共享)区别:在于是否共享地址空间。 独居(进程);合租(线程)。Linux下:线程:最小的执行单位进程:最小分配资源单位,可看成是只有一个线程的进程。### Linux内核线程实现原理类Unix系统中,早期是没有“线程”概念的,80年代才引入,借助进程机制实现出了线程的概念。因

2020-04-24 21:35:40 267

原创 进程通信基础04_创建Linux守护进程

定义守护进程是生存期长的一种进程。它们常常在系统引导装入时启动,仅在系统关闭时才终止。守护进程没有控制终端。因此,说他们是在后台运行的。UNIX系统有很多守护进程,他们执行日常事务活动。基本流程首先要调用umask将文件模式创建屏蔽字设置为一个已知值(通常是0),有继承得来的文件模式创建屏蔽字可能会被设置为拒绝某些权限。如果守护进程要创建文件,那么他可能要设置特定的权限。调用fork,然...

2020-04-24 15:45:33 113

原创 进程通信基础03_Linux信号(一)

目录Linux 信号常见信号信号集操作系统调用sigprocmask函数sigpending函数signal函数sigaction函数struct sigaction结构体注意事项例子屏蔽捕捉信号Linux 信号常见信号Ctrl + c → 2) SIGINT(终止/中断) "INT" ----InterruptCtrl + z → 20) SIGTSTP(暂停/停止) "T" -...

2020-04-22 23:08:08 241

原创 常见面试题之动态规划(三)

300. 最长上升子序列给定一个无序的整数数组,找到其中最长上升子序列的长度。示例:输入: [10,9,2,5,3,7,101,18]输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。说明:可能会有多种最长上升子序列的组合,你只需要输出对应的长度即可。你算法的时间复杂度应该为 O(n2) 。进阶: 你能将算法的时间复杂度降低到 O(n log n)...

2020-04-21 19:28:00 116

原创 常见面试题之动态规划(二)

目录120. 三角形最小路径和152. 乘积最大子数组121. 买卖股票的最佳时机188. 买卖股票的最佳时机 IV120. 三角形最小路径和给定一个三角形,找出自顶向下的最小路径和。每一步只能移动到下一行中相邻的结点上。例如,给定三角形:[ [2], [3,4], [6,5,7], [4,1,8,3]]自顶向下的最小路径和为 11(即,2 + 3 + 5...

2020-04-20 23:07:55 151

原创 常见面试题之代码改进篇(一)

目录求斐不拉契数列普通模式优化模式求斐不拉契数列1、求解有哪些方式?2、如何改进?3、时间复杂度,空间复杂度分别是多少?普通模式T: O(2^n)int query_fib(int n){ return n < 2 ? n : query_fib(n - 1) + query_fib(n - 2);}优化模式增加缓存T: O(n) int mem[100]; ...

2020-04-19 23:14:07 307

原创 常见面试题之动态规划(一)

目录leetcode 647回文子串解答leetcode 647回文子串给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被计为是不同的子串。示例 1:输入: "abc"输出: 3解释: 三个回文子串: "a", "b", "c".示例 2:输入: "aaa"输出: 6说明: 6个回文子串: "a",...

2020-04-19 17:36:20 1637

原创 常见面试题之双指针操作(一)

目录leetcode 796旋转字符串最优解答leetcode 27移除元素最优解答leetcode 796旋转字符串给定两个字符串, A 和 B。A 的旋转操作就是将 A 最左边的字符移动到最右边。 例如, 若 A = ‘abcde’,在移动一次之后结果就是’bcdea’ 。如果在若干次旋转操作之后,A 能变成B,那么返回True。示例 1:输入: A = 'abcde', B = ...

2020-04-19 13:52:43 270

原创 进程通信基础02_Linux共享存储映射进程通信

共享存储映射进程通信理论使用文件也可以完成IPC,理论依据是,fork后,父子进程共享文件描述符。也就共享打开的文件。存储映射I/O (Memory-mapped I/O) 使一个磁盘文件与存储空间中的一个缓冲区相映射。于是当从缓冲区中取数据,就相当于读文件中的相应字节。于此类似,将数据存入缓冲区,则相应的字节就自动写入文件。这样,就可在不适用read和write函数的情况下,使用地址(指针...

2020-04-17 21:55:17 114

原创 常见面试题之队列操作

目录leetcode 103二叉树的锯齿形层次遍历答案leetcode 103二叉树的锯齿形层次遍历给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回锯齿形层次遍历如...

2020-04-14 11:23:43 143

原创 C++难点之++i与i++

引子最近校招面试常常问学生一个问题:++i与i++有什么区别呢?分别使用在什么场景下?解答++i:先自增再返回i++:先返回再自增int& int::operator++(){ *this += 1; return this;}int int::operator(int){ int tmp = *this; ++(*this); return tmp;}...

2020-04-13 16:31:55 106

转载 C++难点之智能指针

参考资料:《C++ Primer中文版 第五版》我们知道除了静态内存和栈内存外,每个程序还有一个内存池,这部分内存被称为自由空间或者堆。程序用堆来存储动态分配的对象即那些在程序运行时分配的对象,当动态对象不再使用时,我们的代码必须显式的销毁它们。在C++中,动态内存的管理是用一对运算符完成的:new和delete,new:在动态内存中为对象分配一块空间并返回一个指向该对象的指针,delete:...

2020-04-13 16:20:45 127

原创 设计模式(三)结构型模式之适配器adapter

设计模式(三)结构型模式之适配器adapter理论用在什么地方?代码理论用在什么地方?模式可以改变已有类(或外部类)的接口形式。是将一个类的接口转换成客户希望的另外一个接口。使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。代码#include <iostream>class Electric18v{public: void use_18v_electr...

2020-04-08 21:54:02 90

原创 设计模式(二)创建型模式之工厂模式

工厂模式原理概念类的角色关系代码原理概念工厂模式又称之为多态工厂模式,工厂模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心类不在负责产品的创建。核心类成为了一个抽象工厂,仅仅负责具体工厂子类必须实现的接口,类的角色关系抽象工厂:抽象工厂模式的核心,任何工厂类都必须实现这个接口具体工厂:具体工厂是抽象工厂的一个实现,负责实例化产品对象抽象角色:工厂方法模...

2020-04-08 20:40:26 93

原创 设计模式(一)创建型模式之单例模板

理论单例模式是一种对象创建型模式,使用单例模式,可以保证为一个类只生成唯一的实例对象。也就是说,在整个程序空间中,该类只存在一个实例对象。为何使用?在应用系统开发中,我们常常有以下需求:在多个线程之间,比如初始化一次socket资源;比如servlet环境,共享同一个资源或者操作同一个对象在整个程序空间使用全局变量,共享资源大规模系统中,为了性能的考虑,需要节省对象的创建时间等等。...

2020-04-07 12:22:33 84

原创 排序算法总结(三)归并排序

原理:1、把当前序列平分为两个子序列,i,j分别指向两个 序列的头部2、递归地对子序列进行递归3、把排序好的子序列再合并成一个有序的序列代码:#include <iostream>#include <unistd.h>#include <sys/wait.h>#include <algorithm>#include <stri...

2020-04-06 22:13:22 100

原创 进程通信基础01_Linux管道

进程通信基础01_Linux管道原理理论例子原理理论例子#include <iostream>#include <unistd.h>#include <sys/wait.h>using namespace std;int main(){ int fd[2]; int ret,i; pid_t pid; ret = pipe(fd)...

2020-04-05 15:22:25 55

原创 排序算法总结(二)快速排序

快速排序的实现原理基本思想lomuto实现原理基本思想选基、分割、递归选基:选择基准值分割:小于基准值的放在基准值前面,大于基准值的放在基准值后面递归:对于小于基准值和大于基准值的子序列进行递归排序lomuto实现#include <iostream>using namespace std;//#define BEBUGvoid swap(int arr[],...

2020-03-31 22:48:18 79

原创 排序算法总结(一)堆排序

堆排序要点建堆堆调整:堆调整 总体原则“从下向上,从右往左”,调整内部不仅要调整当前节点,还要调整分支的子节点实现#include <iostream>using namespace std;void swap(int arr[], int i, int j){ int tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp;...

2020-03-31 22:47:13 86

原创 2020计划

2020年更新计划:3月到4月:重点更新一下STL底层逻辑4月到7月:重点更新一下GIS算法于开源这块的知识

2020-03-28 21:29:26 94

空空如也

空空如也

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

TA关注的人

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