嵌入式基础(二)
C语言相关 查看相关知识 14.预处理指令和多文件编程 查看相关知识 (1)预处理指令以#开头的都是预处理指令,在预处理阶段会处理的指令预处理—gcc -E xxx.c -o xxx.i宏#define预处理指令可以用来定义宏格式:#define 宏名称 (宏值)宏名通常都是由大写英文字符构成,宏名不可包括空格;用宏给数字命名时,不可使用赋值操作符,不自增自减宏能够给表达式命名,宏的参数可以用来表示表达式的未知数字;格式:#define 宏名称(参数列表) (宏值表达式)宏只检查参数个数,不检查参数类型可以在编译命令里使用-D选项指定宏所代表的数字;由于有些数字在编写程序时无法确定,只有在编译的时候才知道,这个时候需要在程序里使用宏名称代表它们,然后再编译时用数字替换这些宏宏操作符#是一个宏操作符,能够将宏的参数转换成字符串##是一个宏操作符,可以将一个代表标识符的参数和其他内容连接为一个新的标识符编译器内置宏—预定义宏;默认已经定义好的宏,直接使用即可,如下表| 宏 ...
嵌入式基础(一)
计算机基础终端相关 查看相关知识 Kernel - the innermost part of any modern operating system which directly talks to actual hardware.Shell - wrapper around the actual Kernel. Whenever we run command, we actually talk to shell which in turn invokes appropriate Kernel instructions. Apart from this, the shell is capable of performing some other stuffs like finding appropriate program while having commands, some file name short hand, piping commands etc. Linux/MAC流行的shell是bash;Windows通常 ...
2022年终总结
白驹过隙,又一年过去啦,记录下对我来说有意义的些许事情 关于博客2021.02.14心血来潮,突然想搭建自己的博客,当天便在阿里云买了服务器,然后在网上搜索一番,使用wordpress平台搭建了一个动态博客,也是我正式接触服务器的日子;2021年并没有在博客上频繁写文章,一是忙,二是觉得没啥可写的; 2022年偶然接触到HEXO静态博客,便希望使用HEXO搭建一个博客;更换HEXO博客的主要原因是,我在阿里云购买的服务器,前三年每年大概是96元,三年后再续费就会非常贵,所以如果我后面更换服务器,就要考虑数据移植的问题,我很担心自己的数据会丢失,所以决定使用HEXO搭建静态博客(数据都在本地),即使后面我不买服务器了,我也可以使用GitHub,vercel等平台托管我的网站。 正式开始行动是2022年7月份,利用空余时间,加班加点看别人分享的文章;由于我希望实现GitHub与服务器双部署,GitHub部署很容易,但是服务器部署一直不成功,期间折腾了很多遍,一直再重置服务器; 在搭建博客期间,我了解到了持续集成(CI)技术,打开新世界; 2022年12月份,偶然在哔哩哔哩刷到猕猴桃与安知 ...
网站加载优化方案
前言网站加载速度不仅可以极大地提升用户体验感,还能对访问者的转化率起到一定的帮助,经过优化的网站文件下载与页面显示速度更快,因此网站加载优化是十分必要的。 本文参考了以下两篇大佬的文章 山岳库博教程贴https://kmar.top/posts/7d9fb37e/ 糖果屋教程贴https://akilar.top/posts/8f31c3d0/ 压缩静态资源 查看教程 我是使用gulp来压缩静态资源的,被压缩的文件有HTML,CSS,JavaScript文件。1.插件安装在博客根目录打开终端,输入以下指令:123456789101112npm install --global gulp-clinpm install gulp --save# 压缩HTMLnpm install gulp-htmlclean --save-devnpm install gulp-html-minifier-terser --save-dev# 压缩CSSnpm install gulp-clean-css --save-dev# 压缩JSnpm ...
我和我的小伙伴超
前言思考再三,决定还是记录下来,趁我还能记得起部分事情,留着晚年回忆一波。 初识我们班大一上学期是50人,大一下学期转入3名转专业同学,所以一共是53人。超于2018年3月22日通过班群私聊我作业的事情,我回复完,顺手加了他,成为我们班我最后一个加好友的人。(因为我给我们班同学的分组是17电信1,所以很容易知道有没有加完整个班级同学) 熟悉大二下学期(2019年上半年),开始上数电模电课,超崭露头角。期末有一个数电模电综合课设,当时我忙于学生会以及其他竞赛,对课设毫无头绪,我便通过他的舍友(另外一位好朋友)找到他,超在实验室419给我讲解了一番,豁然开朗,友谊的种子自此开始埋下。 这学期期末,机缘巧合下,电子设计大赛缺人,我便邀请他和他的舍友一起参加电赛,开启了暑假留校之旅。暑假留校期间其实也并没有过多交流,大家都在实验室各学各的,深入交流是因为电赛我和超是一组的,所以便交流开始频繁起来。 因为电赛期间的交流,我邀请超当下一届协会的副会长,于大三上学期(2019年下半年)开启了我们在实验室419的相处,一起上课,一起干饭。 转眼到大三下学期(2020年上半年),由于疫情风控,我们在家里 ...
民政部数据反爬坑
前言本文记录抓取民政部数据时,出现的坑。主要抓取页面中县以上行政区划代码链接的具体内容。本文章仅用于笔者记录学习过程,请遵守相关法律法规,严禁用于非法途径。若读者因此作出任何危害网络安全的行为,后果自负,与笔者无关。 确定数据来源首先需要确认县以上行政区划代码链接是否在响应中,右键查看网页源代码,在页面中搜索“2020年11月份县以上行政区划代码”,发现存在该关键字,可以确定能够从网页响应中获取需要的数据。 接着,在超链接“2020年11月份县以上行政区划代码”上右键检查,查看所指向的url地址,如下图所示: 分析数据点击url地址,发现页面跳转后的地址与点击的url地址不符 怀疑在点击页面后,触发JS脚本链接重定向,于是将页面的响应打印输出,观察响应中是否存在页面跳转后的url地址,最终发现是有的,于是利用xpath表达式对真正的url地址进行提取。 编写程序以下代码是根据上文的分析,利用requests库实现的; 12345678910111213141516171819202122232425262728293031323334353637383940414243444546 ...
JS逆向之百度翻译
前言本文使用JS逆向的方法破解百度翻译;本文章仅用于笔者记录学习过程,请遵守相关法律法规,严禁用于非法途径。若读者因此作出任何危害网络安全的行为,后果自负,与笔者无关。 分析数据来源 打开百度翻译网站,在输入框输入需要翻译的单词:例如spider,右键查看网页源代码,在网页源代码中搜索spider,发现并没有spider单词,因此可以判断请求百度翻译翻译单词的过程应该是一个异步请求; 获取需要请求的数据 根据上文的判断这应当是一个异步请求;按下F12然后刷新网站页面,获取加载网站的JS,CSS等文件; 在输入框中输入查询单词,例如hello;查看发送的异步请求,一个一个查看,观察哪一个请求的响应是获得翻译结果的;这里判断应当是v2开头的这个请求; 查看请求头,发现这是一个post请求,根据表单数据初步判断可能有两项请求内容是变化的,一个是sign一个是token; 更换查询单词,发现token值并不变化,因此变化的只有sign值,接下来需要获取的sign的值;在JS文件中查询哪些文件中有sign这个变量,最后定位到如下图这个JS文件中,在该JS文件中,搜索sign,发现两处 ...
更换电脑如何迁移Hexo
前言防止自己忘记如何迁移,记录一下; 环境搭建安装GIT官网直接下载对应版本,默认安装即可;官网地址:git官网 安装node.js官网直接下载LTS长期维护版本,默认安装即可;官网地址:node.js官网 根据其他站长经验,可以在历史版本那里选择低版本下载,因为可能后面会出现各种不兼容的问题; 安装HEXO打开命令提示符,输入: 1npm install -g hexo-cli 本地站点搭建初始化本地文件夹在电脑磁盘任意位置,新建文件夹,例如新建文件夹-BLOG,进入BLOG文件夹,右键选择Git Bash Here,输入指令,如果失败直接删除BLOG文件重新建立文件夹输入下方指令即可: 1hexo init 安装HEXO依赖模块在Git Bash Here中输入指令: 1npm install 安装git部署插件在站点根目录下打开Git Bash Here,输入以下指令安装git部署插件: 1npm install hexo-deployer-git --save 与远程仓库建立连接在根目录下即BLOG文件夹下,右键打开Git Bash Here,输入以下指令: 12345git ...
浅谈Python中的迭代
迭代重复获取下一个元素的过程,例如:循环获取容器中的元素 for原理: 1.获取迭代器 1iterator = message.__iter__() 2.获取下一个元素 1234567while True: try: item = iterator.__next__() print(item) # 3.如果停止迭代则跳出循环 except StopIteration: break 可迭代对象(iterable)可以创建迭代器的对象,具有iter函数的对象,可以返回迭代器对象,例如列表,元组等容器 迭代器(iterator)执行迭代过程的对象,可以被next()函数调用并返回下一个值的对象,例如for循环 案例:自定义迭代器的创建分析1: 创建一个学生管理类 1234567class StudentController: def __init__(self): self.__students = [] def add_student(self, stu): self.__stude ...
浅谈Python装饰器
什么是装饰器装饰器就是一个函数,而这个函数用来给其他函数添加额外的功能 为何需要用装饰器 能够在不改变原函数功能的基础上,添加其他功能 降低代码的冗余 无需修改原函数的调用方式 如何使用无参装饰器的实现方法为下面的代码添加计算运算执行时间的功能 12345import timedef index(): print('start') time.sleep(3) print('end') 实现方法1: 12345678910import timedef index(): start=time.time() print('start') time.sleep(3) print('end') end=time.time() print('执行时间为:%s'%(end-start))# 调用index() 这样不仅修改了原函数,且若其他函数也需要计算运行时间,也必须在函数体内部加这些代码,使得代码冗余 实现方法2: 123456789impo ...