- 博客(57)
- 资源 (2)
- 收藏
- 关注
原创 ubuntu突然进不了图形界面解决方案
虚拟机一直开着,长时间没有用就自动休眠锁屏了,但是发现输密码后进不了桌面,只好重启,重启后引导过程中黑屏,左上角有一个白色横杠光标。
2022-09-21 09:02:53 2517
原创 在ubuntu上使用wireshark对some/ip协议进行抓包
介绍在ubuntu上使用wireshark对some/ip协议进行抓包的方法
2022-09-01 11:54:22 4090 3
转载 Dapper, a Large-Scale Distributed Systems Tracing Infrastructure
现代互联网服务通常都是复杂的大规模分布式系统。这些系统由多个软件模块构成,而这些软件模块可能由不同的团队开发、使用不同的编程语言实现、部署在横跨多个数据中心的几千台服务器上。这种环境下就急需一种能帮助理解系统行为、分析性能问题的工具。本文将介绍 Dapper 这个在 Google 生产环境下的分布式系统跟踪服务的设计,并阐述它是如何满足在一个超大规模系统上达到低损耗应用级透明大范围部署(ubiquitous deployment)这三个需求的。......
2022-08-29 09:30:54 543
原创 Teamtalk IM即时通讯系统部署(CentOS7+LNMP)
背景最近有任务,要写一个聊天室系统,于是开始寻找开源的参考,看到很多人推荐Teamtalk这个蘑菇街开发并开源的IM系统。于是想部署运行一下,看看效果再开始学习源码和架构。但是服务器的部署算是难道我了,由于这个项目比较复杂,模块较多,还使用了很多开源的工具,所以部署过程需要编译安装很多部分,在不了解整个架构的情况下进行部署很容易出问题。虽然也提供了一键部署脚本,但是由于已经有几年没有人维护了,部署脚本里的很多内容已经失效,centos系统也有了更新,因此有很多问题,我试了很多次都没有成功,着实很浪费时间和
2020-07-09 21:32:21 738
原创 pyenv install build failed:Fatal: You must get working getaddrinfo() function.
问题描述使用proxychains来安装python版本,但是报了Fatal: You must get working getaddrinfo() function. or you can specify "--disable-ipv6".错误解决方案proxychains PYTHON_CONFIGURE_OPTS="--disable-ipv6" pyenv install 3.6.2...
2020-05-18 10:55:52 1754 4
原创 X Error: BadDrawable (invalid Pixmap or Window parameter)解决方案
问题描述在gnuradio-companion中执行gr-ieee802.11模块的examples/wifi_transceiver.grc 时出现了如下错误:X Error: BadDrawable (invalid Pixmap or Window parameter) 9 Major opcode: 62 (X_CopyArea)解决方案参考:https://stackove...
2020-03-31 16:01:25 5093
原创 六、内存管理
几个调试心得,一个小的不起眼的bug(完全由自己的不细心造成),导致自己饶了弯路,调了2天。好在也积累了一些经验,吃一堑长一智嘛!尽快记录一下,免得下次再犯。GP exception(General Protection):出现这个处理器异常的,显然就要考虑是特权级错误,因为在保护模式下,有可能是段描述符初始化的时候特权级设置错误。要特别注意循环语句中修改代码的时候,一些特殊的continu...
2020-03-31 16:00:00 222
原创 六、文件系统
这一章实现一个简单的文件系统。文件系统其实比较难以理解,所以先给出它的含义:用于存储和组织计算机文件数据的一套方法(怎么存,怎么增删改查):此时文件系统其实是一套机制,包括静态的存储方法和动态的管理方法存在于某介质上的具备某种格式的数据:通常说硬盘分区是某种文件系统时指的是这种。静态的,表明这个分区由某种策略和机制来管理。第一个的含义其实包含了第二种,只不过第一个含义的是以第二种为基础,...
2020-03-31 15:59:11 2076
原创 五、进程间通信
进程间通信(进程间消息传递)一、微内核 or 宏内核1.1 为什么进程间通信要先讨论微内核和宏内核?经过多年灌输式的应试教育,我们读书学习的时候,往往只是被动地接受作者或者是老师所传达的知识和方法,但是并不会先问为什么。为什么书的作者要这样编排,为什么解决这个问题要用这种方法,为什么这个系统要这样设计,为什么不那样设计…除了少部分真理,这世间万事万物的出现和兴衰都有着它背后的道理。我们学习的...
2020-03-31 15:58:20 399
转载 【彻底理解IQ信号:信号为什么要用复指数表示】正交信号:复数,但不复杂
全文请点击:【彻底理解IQ信号:信号为什么要用复指数表示】正交信号:复数,但不复杂
2020-03-26 18:13:02 3895 1
原创 Windows下,用VMWare Workstation 15安装Ubuntu 18.04虚拟机,连接USRP N210
问题背景这两天需要用USRP N210做实验,实验环境是Ubuntu,USRP N210是要用网线(以太网)进行连接的,因此涉及到一个网络地址配置的问题。问题描述首先,就是决定用虚拟机还是双系统的问题,由于双系统安装和使用不够方便,我最终决定使用虚拟机,和Windows之间互拖文件也方便。其次就是Ubuntu版本的问题。这个貌似后来从同学和学长的建议来看目前是16.04版本比较好,但是由...
2020-03-19 17:49:18 2681 2
原创 ubuntu 18.04安装绿联千兆USB网卡的AX88179芯片驱动(编译报错解决)
问题背景由于我的笔记本没有网口,又因为要接USRP N210需要使用USB3.0千兆网卡(百兆不行),因此就买了绿联的USB3.0千兆有线网卡,主要是因为要在linux系统上使用,所以特意找了这个提供Linux驱动的型号。问题描述但是我在安装的时候却发现了问题:驱动程序在ubuntu18.04下直接编译会报错,错误如下。817:3: error: ‘struct ethtool_ops’...
2020-03-19 16:18:26 6048
转载 Linux下 目录/usr缩写 及 目录结构说明(转载)
在 linux 文件结构中,有一个很神奇的目录 —— /usr。讨论中,大部分观点认为:usr 是 unix system resources 的缩写;usr 是 user 的缩写;usr 是 unix software resources 的缩写。根据常识判断,是 user 缩写的可能性不大,因为和 /home 冲突了嘛。不过是 system resources 还是 software...
2019-12-12 16:24:16 694
原创 4. 输入输出系统(键盘和显示器交互)
输入/输出系统(包含键盘和显示器与用户交互)经过这一章,操作系统才拥有和用户交互的接口,用户才能通过键盘操作它,并在显示器获取结果。先是键盘键盘中断对应的是8259A的IRQ1,外部硬件中断处理的框架已经搭好,现在需要做的只是写好中断处理程序并把它的地址填进函数指针数组即可。键盘初体验先写键盘中断处理函数(新建keyboard.c)PUBLIC void keyboard_handle...
2019-12-09 17:15:11 2288
原创 3. 进程实现及其调度
进程、系统调用和进程调度进程是操作系统最重要的概念之一,实际上,实现进程之前的部分都不能被称为操作系统。进程的切换和调度等内容是和保护模式的相关技术紧密相连的,而这也是本书作者要花大量篇幅先介绍保护模式的原因,但是,对于一个只学过微机原理和C语言的小白(比如我)来说,理解起来还是太难了。为此,我特意先学习了保护模式相关的知识,具体书籍和路径前面已经介绍过。“对于进程的概念,只有在有了基于具体平...
2019-12-09 17:12:27 539
原创 2.BootLoader到内核雏形
内核雏形本章主要是研究一下内核的可执行文件格式ELF并实现一个内核的雏形,值得庆祝的是,这一章终于可以使用C语言进行编程了。首先,提出一个必须明确的问题——Loader应该走多远?完成了实模式到保护模式的跳转后。其他的一些工作,比如GDT、IDT、8259A的初始化等是交给内核做还是也由Loader完成?实际上,从逻辑上将,Loader不是OS的一部分,所以不该越俎代庖。因此,还是...
2019-12-01 11:29:22 350
原创 1.从主引导扇区到BootLoader
本笔记主要目的是记录整个过程和思路,并记下一些关键点和需要注意的不容易理解的点,很多细节就略过了,需要的读者可以自行google或者参考原书《Orange’S一个操作系统的实现》.整个实现过程代码参见github为什么要有BootLoader?前面我们知道了,BIOS会加载MBR然后执行它,MBR需要做的事情主要有加载内核、做好进入保护模式的准备工作(设置GDT等),然后跳入保护模式,最后...
2019-12-01 11:27:55 945
原创 【如何阅读一篇论文(How to read a paper)】
“How to Read a Paper” S. Keshav David R.三遍法第一遍了解论文的整体思想;第二遍掌握论文的基本内容但不是细枝末节;第三遍深入理解这篇论文在这之前要明白:为什么要读论文?回顾一个会议与研究的领域保持同步,了解最新的研究成果为一个新领域做一个综述(这也是作为新手首要要做的)第一遍时长:5-10分钟分以下几个步骤:仔细阅读标题tit...
2019-10-13 19:42:34 670
原创 【PAT-A1155】Heap Path(二叉树遍历)
【题意】给出一个完全二叉树的层序遍历序列,判断其是大顶堆、小顶堆还是不是堆。【思路】因为通常我们静态存储二叉树在数组中也是以层序存的。所以可以直接读入序列存在数组中。输出路径:先序遍历(不过注意要先访问右子树再访问左子树)用vector保存路径,边界时输出路径。判断是否为堆:从路径的第二个结点开始遍历若有比父结点小的,就不是小顶堆;若有比父节点大的就不是大顶堆;若两者都不是,就不是堆。...
2019-10-07 20:33:33 142
原创 【PAT-A1110】complete binary tree
[分析】这题就是完全考完全二叉树定义和性质的一道题。主要还是定义:对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。所以判断二叉树是否为完全二叉树,就要获取其对应满二叉树的顶点编号的信息。容易想到用层序遍历二叉树就能给顶点编号,开始时,我采用在顶点出队的时候给顶点依次递增编号,后来发现这样其实是不对的,因为只有存在的...
2019-09-20 16:04:47 132
原创 【PAT-A1109】Group Photo
【题意】N个人拍照的时候排阵形,共K排,前面每排N/K人,有多的都放最后一排。后排的人身高不能比前面的任意一个人矮,同时每排中间的人最高,两边身高依次下降。身高相同的按照名字的字典序排。给出每个人的姓名和身高,输出最终排列的名字阵形。【代码】#include <cstdio>#include <algorithm>#include <iostream>...
2019-09-14 15:39:21 143
原创 【PAT-A1108】Finding Average(字符串处理)
【分析】这题主要考察字符串的处理,主要学会用字符串string和其他基本数据类型的转换函数比如stod,stoi (string头文件)。以及判断字符的函数isdigt() isalpha()(cctype)这里遇到一个注意点,就是ios::sync_with_stdio(false);这个取消与stdio同步的语句,如果加了,cin就不要与scanf等函数同用,最好都用cin,否则很可能会...
2019-09-12 20:34:52 137
原创 【PAT-A1101】 Quick Sort(two pointers)
【分析】这题其实也不难也可以算DP题,但就是要找清楚方法。开始的时候的想法是直接排序,然后选排序后位置没变的元素,但是其实这是想当然了,排序后位置没变的元素必然满足题目条件,但是题目要求是原始序列满足条件。因此,这题还是要用别的方法。用pre[i]表示i号位及以前的元素中的最大值,post[i]表示i号位及以后的元素中的最小值。如果pre[i]和post[i]相等就说明满足条件。【代码】#...
2019-09-12 20:19:03 96
原创 【PAT-A1102】Invert a Binary Tree(二叉树的遍历)
【分析】这题就是简单的二叉树遍历,invert的话,只要输入的时候把左右孩子调换一下即可。#include <cstdio>#include <algorithm>#include <queue>#include <vector>using namespace std;struct Node { int data; int lchi...
2019-09-10 09:46:42 151
原创 【PAT-A1103】Sum of Number Segments(DFS)
【分析】这题类似于01背包问题,我这里用DFS的递归方法遍历所有情况,并加上了剪枝。同时参考别人的方法,可以考虑用“打表”记录各个数的p次方的表,这样可以避免重复计算,降低复杂度,避免倒数第二个测试点超时。【代码】#include <cstdio>#include <cmath>#include <iostream>#include <vect...
2019-09-10 09:39:52 129
原创 cin、cout关闭同步提高速度
cin的速度比scanf慢很多。cin慢的原因主要在于默认cin与stdin总是保持同步, 这一步是消耗时间大户.只需要加上std::ios::sync_with_stdio(false)来关闭同步就好了, 速度甚至要优于scanf....
2019-09-06 19:28:41 1320
原创 【PAT-A1018】Public Bike Management(dijkstra + DFS最短路)
【分析】这题题意不是很清楚,有题目理解上的陷阱,因为题目没有说得很清楚。主要就是在题目说明部分,说当最短路不唯一时,选从控制中心带去自行车数最小的那条路。而在输出说明部分,又说不唯一时选从目的地带回自行车最少的路径。这个问题的一种解释就是,因为在题目说明部分并没有说那样的选择方法选出来的就一定保证是唯一的,而在后面那种选择标准后题目说明是唯一的,那么选择标准应该就是先按第一种标准选,再按...
2019-09-06 18:08:50 216
原创 【PAT-A1030】Travel Plan(最短路径)
【分析】典型的最短路径问题。以边权作为第二标尺,要求所有最短路径中第二标尺和最小的路径。注意点就是Dijkstra和DFS函数的书写。Dijkstra里执行n次的总循环不要弄错了。【代码】#include <cstdio>#include <algorithm>#include <vector>using namespace std;const...
2019-09-06 15:16:47 122
原创 【PAT-A1007】Maximum Subsequence Sum(DP)
【分析】最长连续子序列和问题。经典问题。dp[i]代表以i号元素结尾的最长连续子序列和。注意读题,题目说明了全部元素为负的处理方法。一定要认真读完题目的每一个字并确保理解之后再开始解题,否则以为节省了时间,反倒会因此浪费大量时间。【代码】#include <cstdio>#include <algorithm>#include <cmath>usi...
2019-09-06 14:08:47 111
原创 【PAT-A1045】Favorite Color Stripe(LCS)
【分析】这题是最长公共子序列问题(子序列不一定连续,而且允许公共部分有重复元素)给出的目标子序列每个元素是独立的,没有重复。但是从被匹配的总的序列中,子序列不一定连续,而且允许公共部分有重复元素。比如总序列为 {2 2 4 1 5 5 6 3 1 1 5 6}目标序列为{2 3 1 5 6}匹配出的四种情况{2 2 1 1 1 5 6}, {2 2 1 5 5 5 6}, {2 2 1 ...
2019-09-05 23:27:53 154
原创 【PAT-A1068】Find More Coins(DP)
【题意】有N枚硬币(可以有面值相同的),给出每枚硬币的面值,然后要求用这些硬币去支付价值M的物品,要求选出来支付的硬币面值之和必须为恰好等于M。要求按照递增顺序输出选出硬币的面值,如果答案不唯一,那么输出字典序最小的一组,如果无解,则输出"No Solution"。【思路】这是一个典型的01背包问题,只不过这里的同一面值硬币可以有多个,但是又不是无限个,所以可以把所有同一面值的硬币都看看成...
2019-09-05 21:31:34 318
原创 【PAT-A1040】Longest Symmetric String(DP or string hash)
【分析】最长回文子串问题。有DP和字符串hash两种方法。字符串hash先求出字符串hash数组H1[],再将字符串反转,求出其字符串hash数组H2[].对回文子串长度分奇偶讨论:奇数时,枚举回文子串中心点i,二分回文子串半径k,找到最大的使子串str[i - k]~str[i + k]是回文子串的半径k。而判断子串str[i - k]~str[i + k]是回文子串的方法就是:...
2019-09-03 22:57:00 126
原创 【PAT-A1057】Stack(找第序列第K大,分块法or树状数组+二分)
【题意】给栈stack加一个除了push和pop外的操作peekMedian获取中位数。【分析】值得注意的是,由于这里是动态查询,即在每次peekMedian之间序列可能会由于PUSH和POP操作变化,所以用简单的排序后直接获取操作复杂度会很大,因为每次序列变化后都要重新排序。而动态查询序列第K大问题通常采用分块法O(n√n)或者树状数组+二分的方法O(logn*logn)显然通常情况后者...
2019-09-03 19:38:53 200
原创 【PAT-A1080】Graduate Admission(排序)
【题意】一个模仿考试排名和志愿录取的流程。共N个考生,M所学校,每个考生有K个志愿。先给考生按照平均成绩排名,平均成绩相同就按照笔试成绩排名,还相同的话排名就一致。然后按照排名顺序对每个考试进行录取,每个学校都有录取名额,依次考生的每个志愿,如果当前志愿学校还有名额就录取,否则看下一个学校,如果全部志愿都没能录取,就不能录取。另外,如果多并列的人报了同一所学校,而且这所学校只剩最后一个名额的话...
2019-09-03 15:21:17 188
原创 【PAT-A1081】Rational Sum(分数运算)
【题意】就简单的分数加法运算,之前做过一题更难的。不过这里就是要注意输入得到的值不标准,要reduction一下,而且明白了reduction中为什么在分数为0的时候把分母设为1,这是因为0参与的加减法运算不会错。【代码】#include <cstdio>#include <algorithm>using namespace std;typedef long l...
2019-09-02 19:47:04 152
原创 【PAT-A1082】Read Number in Chinese
【分析】这题没有考察什么特定的经典算法。但是要考虑的很全面,细节很多,需要从一开始就规划好思路,不然贸然开始很可能会考虑不全面。【思路】首先,按照通常的中文习惯,是四位为一节来划分的。这里最多为9位,所以最多到亿。符号好解决,只要特殊判断一下就行。从最高位开始遍历每一位,同时记录它从最低位开始的位数,4位为一节,第三节后面要加一个“Yi”,第二节后面要额外加一个“Wan”,第一节后面不...
2019-09-02 17:36:20 144
原创 【PAT-A1083】List Grades(排序)
【分析】这题就是简单的排序。没什么难度。【代码】#include <cstdio>#include <algorithm>#include <iostream>using namespace std;const int maxn = 110;struct Record{ char name[12]; char ID[12]; int gr...
2019-09-02 15:17:00 131
原创 【PAT-A1084】Broken Keyboard(hash)
【分析】这题难度不大,但是在做题过程中遇到一些问题。这里记录一下字符大小写转换函数:单个字符可以用头里的toupper()和tolower()函数。整个字符串可以用头里的transform(str.begin(), str.end(), str.begin(), ::tolower).unordered_map在用迭代器遍历的时候,它的顺序并不是插入元素的顺序,因为它的原理是用hash....
2019-09-02 14:49:47 164
原创 【PAT-A1085】Perfect Sequence(two pointers)
【题意】给出N个10^5以下的正整数组成的序列,找出能使M <= m*p成立的最大序列元素数,其中M是目标序列的最大值,m为最小值。【思路】考虑到时间限制为200ms,N的最大值为10^5 所以时间复杂度不能超过 10^6量级即O(nlogn)的复杂度。首先对序列进行排序,复杂度O(nlogn)然后用two pointers两个指针分别指向最大值和最小值,然后判断M <...
2019-09-02 11:36:03 140
原创 【PAT-A1086】Tree Traversals Again(二叉树重建)
【分析】这道题就是典型的二叉树重建和遍历。从中序遍历的出入栈操作,得到先序序列和中序序列,重建树结构,再得到后序序列。【代码】#include <cstdio> #include <iostream>#include <string>#include <vector>#include <stack>using namesp...
2019-09-02 10:21:00 133
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人