自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(48)
  • 问答 (7)
  • 收藏
  • 关注

原创 关于在Ubuntu上配置mysql踩的一些坑

最近准备换工作了,回顾了下学校时期做的那个webserver,又在linux下mysql踩了一些坑,特此记录下来如果出现404错误,但是检查source.list又没有问题,那可能你的镜像源很久没更新了,记得。

2024-04-05 20:49:50 447

原创 FreeRTOS-07任务切换 对vPortSVCHandler和xPortPendSVHandler的理解

其实看懂代码之后就知道上下文切换的实质是将哪个任务栈的数据加载入cpu寄存器中,新任务加载时,旧任务的数据将由cpu寄存器通过汇编代码加载回其任务栈,然后屏蔽中断,调用切换函数修改当前指向的TCB,再恢复中断,通过新任务的TCB将新任务的任务栈数据加载入cpu, 自此切换完成。

2023-12-19 21:19:41 1311

原创 过来人大学四年的教训小结

如果能去的学校都差不多,那么重要的就是你想干什么和你想去哪里了,优先选择离家乡近的学校,因为放假回乡十分省钱(个人反例,福建的选了西安的学校,结果放假坐飞机回去就特别花钱,一次900-1000,退票又麻烦)高考完三个月,如果做什么规划都迷茫,建议先把驾照考了,这个时候考时间最充足。对于对所处专业乃至社会常识一无所知的新人来说,大学四年是最好不过的试错环境,心态一定要放开,尽量尝试新的事物(考驾照,报社团,学证书等等),你在大学积累的这些阅历都会在后面的工作中给你重大的帮助!即将走入社会,尽快把学生思

2023-10-28 13:14:22 399 2

原创 用bash脚本实现openocd一次性烧录

有的时候eide扩展烧录莫名奇妙就会失灵,弹出"upload busy"的错误,网上也查不到是怎么回事,只好手动打指令,奈何openocd烧录指令又太过麻烦,于是多方查找整了个适合自己的脚本供自己实验,这里把脚本分享出来,方便自己在公司的时候就能在网上找到,也方便各位开发,有更好的方案欢迎提出哈。IDE:vscode+eide扩展。开发板:stm32f103c8t6。可根据自身实际情况做更改。烧录器:stlinkv2。

2023-10-03 20:18:01 593

原创 C语言实现贷款计算器

一个心血来潮的研究,避免以后买房被坑。捣鼓了半天才发现原来支付宝的那个利率是年利率不是月利率,坑了我半天。。。

2023-08-19 18:14:53 1370 3

原创 实现vscode上用gdb调试stm32

这周负责编写设备的某个模块,其中遇到了一些变量地址不正确的错误,按理这种底层变量错误用gdb一类的调试器就能很快查到,可是初入嵌入式一行,此C语言非彼C语言,对于gdb怎么对接到项目上根本一无所知,问了下周边同事,发现他们居然都是直接打串口日志来调试的,那岂不是每次遇到问题都得在代码上留一堆丑陋的printf?

2023-08-06 17:32:36 1849 3

原创 STM32 江协教程 EXTI外部中断(对射式红外传感器计次、旋转编码器计次)笔记补充 旋转编码器判断方向的两种实现方法记录

spm=1001.2014.3001.5502后的一点小补充。方法一,一方下降沿同时查看另一方电平,以A为例,A下降时若B为高电平则为正向,A下降时若B为低电平则为反向,这种判断方法有个问题另一方电平会有一定持续时间延迟,导致用很小的力扭旋钮也会触发中断,导致没有转到位就出现数字变化的情况,不推荐。方法二,官方方法,通过A,B电平变化的滞后性来判断,如果A下降之后B也下降就是正向,而B下降后A再下降就是反向,由于A,B变化都是即时性的,就很好的解决了上面方法一的问题。

2023-07-20 23:38:27 517 2

原创 图灵完备游戏:信号计数 解法记录

可以看看,不管是情形1还是情形2,由于输入2-4的输入情况都在两个亮及以上,全加器1的c端输出一定为1,由于全加器1的c端输出是半加器2的b端输入,因此可转化为半加器2的s端输出一定为1,而这个输出正好和数位2引脚绑定。**计数4的情况:**全加器1s端和c端都输出1,由于全加器1的s端输出是半加器1b端的输入,于是半加器1s端输出0,c端输出1, 半加器1c端输出和全加器1c端输出分别成为半加器2a端和b端的输入,于是半加器2 s端输出0, c端输出1,正好对应计数4的情况,和引脚为4的终点绑定。

2023-05-27 13:05:39 1513 1

原创 谈FANUC KAREL与C的几点区别

3.socket编程,karel是跟发那科机器人对接的,要注意的一点是机器人用的是server port,跟C的socket描述符差别还是挺大的,监听,读写对端都是用的这个port,还要开个file变量去OPEN才能发数据,而C accept得到client的fd后直接就能对client fd读写了,多客户端情况下对应到C服务端就是有多个client fd整数,karel的情况,我目前还没遇到多个客户端连接机器人的情况,但是示教器上S3-S8 5个port是空闲的,这种工业的情况应该连接管理会很简单。

2023-05-07 20:14:03 536

原创 20230420-上海广策信息技术笔试记录

思路:AC,其实就是自己实现一个快速排序,分别把数字字符串和字母字符串遍历提取出来,然后再遍历主串,数字串和字母串设两个指针在开头,主串遍历到字母则字母串指针值拷进去,然后前进一位;想法:两步,一.实现大数乘法,二.通过阶乘乘法求出阶乘结果字符串,然后遍历统计字符串末尾0的个数。特定一个字符串s,该字符串仅由字母与数字组成,即a-z,A-Z,0-9组成,脑筋急转弯,半天想不出来,其实当时也想到位运算的。LC的简单题,不知道为什么一直有3道用例错,枯了。序,并且不改变之前字母和数字所在的位置,即字母之。

2023-04-20 19:19:14 466

原创 浅谈Python装饰者模式与其他静态语言(C++,Java)装饰者的区别

2023-03-07 21:51:37 206

原创 WebServer重写(一):日志库双缓冲和阻塞队列压测对比

2023-01-31 20:56:00 890 4

原创 对于Muduo主从Reactor模式的理解

2023-01-03 09:40:12 392

原创 C++ Primer 13.5练习:实现StrVec和String

A

2022-12-22 20:46:52 378

原创 实验模拟TCP连接的各种异常情况(三次握手丢包,两端异常)

2022-12-05 21:45:40 2105

原创 Effective STL 学习笔记

2022-12-03 20:10:16 337

原创 WebServer异步日志模块,Log类构析导致线程死锁解决分析

1

2022-09-30 20:32:10 263

原创 javascript随机生成邮箱,手机号,姓名,日期,密码供数据库使用

2022-09-22 21:59:34 2639

原创 20220911- LC第310场周赛

x

2022-09-11 13:32:41 748

原创 如何在vscode中使用gdb命令行与打印指针数组

.

2022-09-10 16:14:19 2131

原创 C++11 auto, decltype类型推断分析

2022-08-05 11:18:29 296

原创 2022-7-17 FTP客户端项目实现 - 总结

通过该项目对于Linux的文件和网络相关API更为熟悉,了解了网络协议的基本实现方式,同时加深了对TCP传输特点和网络传输原理的理解。

2022-07-17 23:29:46 839

原创 linux- 云服务器重装系统后如何恢复远程连接

.

2022-06-11 08:36:59 406

原创 信号量实现哲学家问题(C)

.

2022-06-06 22:22:33 236

原创 生产者消费者问题条件变量和信号量各自实现(C++)

.

2022-06-06 22:18:07 158

原创 弄懂数字签名,公钥私钥,数字证书的一些问题

对称加密和非对称加密各自如何应用?非对称加密的缺点是比较慢,因此常用的通信方式就是对称加密,对称加密的公钥为了确保机密,通常由私钥方使用非对称加密的方式传输给通信各方,以后的通信就都是基于这个公钥的对称加密。那非对称加密的公钥是怎么来的?发起通信的一方(通常是CA)自己生成一个公钥,将带有公钥的数字证书(无法被冒充或篡改)一起发给通信各方。我怎么就能确定非对称加密传输过来的公钥就是通信方的?有人冒充怎么办?所以就需要第三方权威机构的介入,通过颁发数字证书为公钥的可信度背书,我向服务器发送请求,服务

2022-05-27 00:03:49 787

原创 操作系统整理-进程调度算法

先来先服务调度算法(First Come First Severed, FCFS)如其名所说,先来的进程先被执行。会出现短作业需等待先来的长作业造成等待时间过长的问题。最短作业优先 (Shortest Job First, SJF)亦如其名,调度程序优先选择运行时间最短的进程来运行,会造成短作业“饿死”长作业的问题。高响应比优先算法(Highest Response Ratio Next, HRRN)兼顾了长作业和短作业的算法,调度程序选择响应比最高的进程来运行,响应比公式一般是(等待..

2022-05-27 00:00:49 163 1

原创 操作系统整理-僵尸进程

僵尸进程什么是僵尸进程?Liunx系统中,子进程先于父进程结束后不会消失,而是会在进程表内留下返回信息等待父进程回收,从子进程结束返回到被父进程回收的这段时间它们成为僵尸进程。设计僵尸进程的目的是什么?​ 子进程返回结束以后其占用资源需要被回收,内核会将这些子进程转为僵尸进程来释放它们所占有的大部分资源,这些僵尸进程唯一保留的是内核进程表的一条记录,包括子进程ID,终止状态,资源使用数据等信息。子进程转为僵尸进程便于其父进程调用wait()来“认领”这些“僵尸”并做进一步处理。【疑问:为什么不是内

2022-05-26 23:57:14 755

原创 十大排序算法C++实现及分析一览

📈十大排序算法C++实现及分析一览十大排序算法复杂度一览排序算法平均时间复杂度最好情况最坏情况空间复杂度排序方式稳定性冒泡排序O(n2)O(n^2)O(n2)O(n)O(n)O(n)O(n2)O(n^2)O(n2)O(1)O(1)O(1)In-place稳定选择排序O(n2)O(n^2)O(n2)O(n2)O(n^2)O(n2)O(n2)O(n^2)O(n2)O(1)O(1)O(1)In-place不稳定插入排序O(n2)O(n^2)O

2022-05-01 19:40:37 132

原创 C语言补漏:字符串指针与字符数组传参

字符串指针与字符数组传参深信服的笔试上被吊打,其中对一道用指针做形参的题目印象十分深刻,借此恶补了一晚上指针,今天总结,以作警示。​ 试想有如下情形,将一个字符串指针做形参赋值函数修改其字符串,函数结束后字符串被改变了吗?#include<stdio.h>void testPstr(char *ppstr){ ppstr = "hasten"; printf("%s\n",ppstr);}int main(){ char *pstr = "test";

2022-04-17 20:38:57 4891

原创 排序算法(五) 三种非比较排序

计数排序思路很简单,就是设一个哈希表来统计数组各元素的个数,统计完毕后计算前缀和,将各元素统计数转化为应该放的下标位置,最后遍历原数组各元素,将元素放到哈希表映射的位置即可。(注意每次放一个元素对应下标位置计数减1)实现class Solution {public: // 数据范围 -50000 <= A[i] <= 50000, 故数组要容纳100000个数 int SIZE = 100001; // 设置偏移量的目的是使得所有值都为正值,防止数组溢出

2022-04-17 19:49:18 1109

原创 排序算法(四) 堆排序&优先队列

不就是堆排序吗,优先队列又是什么,和堆有什么关系?答:优先队列可以看做一种特殊的线性表(数组/链表),它是实现堆的底层数据结构,对于大根堆(根节点为最大值),每次队列都能取出其内的最大值,对于小根堆则反之。对大根堆,堆中的每一个节点都大于其下的子节点,对于小根堆则反之,可将堆看作一个以根节点为起点自上而下递增(递减)的二叉树。实现堆排序一般来说,对于升序则构建大根堆,对于降序则构建小根堆。堆排序的基本思想是:将待排序序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根节点。将其与末尾元素进行

2022-04-17 19:47:22 852

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

实现class Solution {public: vector<int> sortArray(vector<int>& nums) { int n = nums.size(); vector<int> tmp(n); mergeSort(nums,0,n-1,tmp); return nums; } void mergeSort(vector<int

2022-04-17 19:41:01 631

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

有三种方法可实现快排:单循环方法一,单循环,会将所有与基准数相等元素扔到同一侧,造成递归树倾斜,由于递归开销很大,《算法4》也没有讲这个实现方法,故没有主动实现。现贴别人代码作为参考 void quickSort(int[] nums,int lo,int hi){ if(lo >= hi) return; int mid = partition(nums,lo,hi); quickSort(nums,lo,mid - 1); quickSort(nums,mid + 1,hi)

2022-04-17 19:40:26 680

原创 排序算法(一) 三种比较排序

冒泡 vector<int> bubbleSort(vector<int>& nums){ int n = nums.size(); for(int i = n - 1; i >= 0; i--){ bool isSorted = true; // nums(i,n]是有序的 for(int j = 1; j <= i; j++){

2022-04-16 19:44:32 1038

原创 Effective C++ Chapter5 定义与实现 总结

Chapter 5 定义与实现Item 26 尽可能推迟变量定义为了避免无谓的变量声明造成垃圾值的构建和构析开销,建议不要预先定义变量,而是有必要时在定义变量(注意最好用括号而不是赋值运算符),这样有利于程度的可读性和性能。面对循环时有两种处理方式,在循环外声明变量和在循环内声明变量,设循环为n次,则前者定义成本为 1次构造 + 1次构析 + n次赋值, 后者定义成本为 n次构造 + n次构析,如果类的赋值成本不高,可以选择在循环外声明,否则在循环内定义变量可能是更高效的做法。Item

2022-03-31 19:32:13 637

原创 Effective C++ Chapter 4 设计与声明 总结

Chapter 4 设计与声明Item 18 把接口设计的易于正确使用而难于错误使用遵守以下原则使得接口易于正确使用而难于错误使用:保证正确性:保证接口的一致性, 行为能够兼顾内置类型(比如把常量0换成static_cast<object*>(0)作为形参给shared_ptr的构造函数)预防错误:引入新类型(比如书中的Date类型就通过把构造函数的参数从数字换成了能自定义输入规则,封装性更强的Day,Month,Year三个类)限制运算符的使用(比如三个分数类a,b

2022-03-28 22:00:14 711

原创 EffectiveC++ Chapter3资源管理 总结

Chapter 3 资源管理Item 13 用RAII对象管理资源为了防止忘添加delete导致资源泄漏,应该使用RAII对象(比如shared_ptr)来管理需要调用的资源shared_ptr和auto_ptr的区别:shared_ptr允许多个指针指向同一块内存而auto_ptr不行,auto_ptr指向对象时实际上会发生对应对象的拷贝(然而现在C++11早就把auto_ptr弃用了,职能转给了unique_ptr, 对象转化调用的是std::move函数而不需要再先拷贝后删除了)Item

2022-03-28 21:59:02 693

原创 EffectiveC++ Chapter 2 构造,构析,赋值 总结

Chapter 2 构造,构析,赋值Item 5 知道C++自动生成和调用什么编译器可能会隐式生成一个类的初始构造函数,拷贝构造函数,拷贝赋值函数和构析函数。Item 6 明令禁止你不想要编译器生成的函数书中介绍了如何避免类被拷贝的两种方法:将其拷贝构造及赋值函数声明为private(无法防止friend函数调用), 或者将类继承自一个Uncopyable类,实际上现在的C++11直接把不想要的函数声明为delete就行了。Item 7 在多态体系中声明虚构析函数也是常识了,直接说明不在继承体系

2022-03-28 21:56:36 95

原创 C++_《C++ Primer》 第15章 面向对象程序设计

C++_《C++ Primer》 第15章 面向对象程序设计要点:如何写C++的多态virtual和动态绑定virtual的作用是让实际指向派生类的基类指针能动态调用函数的派生类版本而不是基类,不加virtual关键字调用的就是基类的版本。其中的原理是指针是静态类型在编译时确定,指向的对象是动态类型在运行时确定,故编译器编译时只能识别到指针的类型是基类,而无法识别到指针指向的实际类型是个派生类,加了virtual声明就能确保识别出动态类型。c++规定,当一个成员函数被声明为虚函数后,其派生类中的

2022-03-25 21:34:46 1117

空空如也

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

TA关注的人

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