自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Lyrical-Wander的博客

read the mathematical theory

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

原创 C语言中关于数据类型带来的陷阱

笔者在阅读《深入理解计算机系统》时,理解了为何C语言被称为不安全语言,C语言除了指针非常灵活可能会导致大量漏洞之外,C语言的无符号数据也可能带来致命性危害。

2025-01-04 09:47:43 1271

原创 字——位级运算与有无符号数之间的比较

在嵌入式计算中,通常我们会使用无符号数进行计算,但有时不可避免地会遇到位级运算与有符号数与无符号数之间的大小比较,这些概念不难,但有一些细节值得注意,故记录下来

2024-12-30 20:09:30 1044

原创 遗传算法——附python实现与各方法的作用与修改

本文将会介绍遗传算法的思想,优缺点以及提供一个遗传算法的示例代码,此外,还会讲解父代基因的适应度高而产生的子代适应度降低的原因,以及选择策略的重要性。

2024-12-28 11:22:53 1956

原创 PyQt实战——将pcm文本数据转换成.pcm的二进制文件

在我们上两个功能模块中,音频编解码模块与音频播放模块,都在操作音频数据,在音频数据解码后生成的pcm数据以文本格式保存,无法直接给音频播放模块播放,因此在本文中,我们将实现pcm二进制文件生成模块,将pcm数据文本转换成.pcm格式的二进制文件

2024-12-28 11:19:17 1903

原创 PyQt实战——实现可视化音频播放器(十三)

在本文中,我们就要使用PyAudio库,来实现音频的播放,同时呢我们将加上matplotlib库,来绘制音频的波形。通过阅读本文,你将了解到:如何使用PyAudio,将音频文件传入PyAudio,如何绘制音频波形,以及音频波形与音频播放的同步,如何避免音频卡顿问题。

2024-12-27 14:20:06 1450

原创 PyAudio库基本知识详解——为自制PCM音频播放器做准备

在接下来的几篇文章中,我们打算自制一个PCM音频播放器,在开始动手前,我们需要首先了解我们需要使用到的库——PyAudio,本文将会着重介绍PyAudio库,下一篇文章我们将实战使用PyAudio库与matplotlib库做一个可看见音频波形变化的PCM音频播放器

2024-12-27 14:16:27 1439

原创 PyQt实战——实现编码器与进度条之间的通信,使进度条反映编码进度(十二)

上一篇文章中,我们讲了如何制作一个自定义的特色进度条,现在,我们需要将进度条的刷新与编解码器的进度绑定起来,如此进度条才有意义,因为编解码器比较吃算力,因此我们需要对编解码器单独开一个子线程跑,这样,在编解码器运行时,QT界面也能正常使用不受影响。既然编解码器是由子线程跑,那么为何不也为进度条开一个子线程,两个之间沟通消息,这样编码器与进度条的运行都不会影响QT界面的运行。

2024-12-26 10:01:48 1126

原创 PyQt实战——随机涂格子的特色进度条(十一)

这是实现音频编解码器功能模块的第二篇文章,在本文中,我们将实现自定义的特色进度条以及简单介绍编码器的UI布局,本文主要实现特色进度条,在本文中,我们会涉及到的知识点有:特色进度条的实现原理,一个python生成器的用法,PyQt的控件绘制机制。本文仅介绍编解码器UI的布局,因为实现UI时会用到开线程的部分,因此本文先不展示。本次笔者设计的特色进度条,是涂格子形式的进度条,当进度增加时,进度条内的方格会被随机涂上颜色,供大家参考。paintEvent在什么时候被调用?paintEvent是一个Qt。

2024-12-26 09:52:30 1327

原创 ADPCM编解码器的实现(C语言实现,包含完整代码以及GCC编译命令)

接下来的三篇文章,我们将实现音频编解码器功能模块,第一篇文章,也就是本文,我们将实现基于开源的IMA-ADPCM算法的音频编解码器。本文涉及到的知识点有:ADPCM的算法思想,ADPCM编解码算法实现,ADPCM主函数调用,以及GCC多文件编译

2024-12-25 09:29:50 1056

原创 PyQt实战——使用python提取JSON数据(十)

本文主要讲述笔者使用python提取JSON数据,并通过pyqt制作可视化界面,从JSON中提取音频数据为后续处理做准备

2024-12-25 09:23:53 1068

原创 搭建自己的Wiki知识库——Ubuntu与Wiki.js

Wiki是一种多人共同编辑和管理内容的平台,可以创建Wiki与你的小伙伴们一起存储和分享知识,这里我们使用Ubuntu与Wiki.js搭建知识管理平台,在本文中,将分析笔者在搭建过程中踩过的一些坑以及查过的一些文章和攻略,如果面临同样问题的比如apt-key命令失效过时的问题的同学可以参考本文

2024-12-24 09:36:23 1203

原创 逆向工程实战,在反汇编工具中理解汇编与伪C

在本文中,将会介绍笔使用Ghidra的一个反汇编例子,详细讲述笔者在反汇编过程中是如何去看代码的,并讲述了由于编译器或反汇编工具的原因导致汇编代码与伪C的差异与冲突。

2024-12-24 09:28:14 2052 3

原创 五分钟学会如何在GitHub上自动化部署个人博客(hugo框架 + stack主题)

上一篇文章,我们已经学习了如何搭建个人博客,本文主要讲述如何实现个人博客的上传于自动化部署,通过使用GitHub的pages功能,实现通过访问仓库地址即可访问博客,实现随时随地,任何都可以访问自己的博客

2024-12-23 09:50:25 2067

原创 10分钟学会免费搭建个人博客(Hugo框架 + stack主题)

本文记录了笔者在搭建个人博客的完整经历以及踩过的坑,本博客是基于hugo框架搭建的静态网页,主题使用的是stack主题,本文只讲述搭建的过程,下一篇文章将介绍如何将个人博客部署到GitHub上生成网页,并实现自动部署,这样其它的小伙伴也能看见你的博客

2024-12-23 09:36:50 1873

原创 PyQt5实战——翻译的实现,成功爬取微软翻译(可长期使用)经验总结(九)

本文笔者吸取了第一次爬取微软翻译的经验,发现在对微软翻译进行请求的时候,URL会随着会话结束而重新生成,这一点是本文需要解决的内容,且除了URL中出现的IG和IID两个数据外,在请求的表单数据中,还有key和token两个数据也在动态变化。本文旨在追踪这几个数据在何时被发送,如何被获取。

2024-11-08 12:18:48 1768

原创 PyQt5实战——翻译的实现,第一次爬取微软翻译经验总结(八)

本文并没有介绍关于PyQt的技术,而是作者在尝试爬取微软翻译的一次尝试,是一次经验总结,总结了作者在爬取翻译网页时遇到的问题与经验教训,后续笔者会更新爬取成功地经历与代码

2024-11-07 20:38:01 1245

原创 PyQt5实战——翻译器的UI页面设计以及代码实现(七)

基于PyQt开发的脚本集合包,本文主要讲述翻译器的UI设计以及代码实现,该翻译器中,我们会使用一些本系列前文没有提及的控件以及模型类

2024-11-07 17:56:50 1569

原创 PyQt5实战——UTF-8编码器功能的实现(六)

在这一篇中,主要讲述了如何实现字符串到UTF-8的转换,且详细解释了join,生成器,f'{02x}'等用法,通过一个例子推导出从字符串到UTF-8格式的转换过程

2024-11-04 21:59:34 886

原创 PyQt5实战——UTF-8编码器UI页面设计以及按钮连接(五)

本文中展示了,之前文章中铺垫的,功能区的用法。本质上就是功能区是PrimeWindow这个大的容器(Qwidget)专门空出来的一块地方,可以用来放其它的小的容器(Qwidget),其它的小的容器以对象(实例)的方式被创建。__init__方法是这个对象的入口(创建时被首先调用的函数),当对象被创建时,则会自动地进行初始化,完成整个编译器UI的创建和布局。按钮连接可以连接多个方法

2024-11-04 21:53:52 970

原创 【解决办法】无法使用右键“通过VSCode打开文件夹”

如果你遇到了用右键无法快捷使用VScode打开文件夹,且你的VScode下载了许多插件,安装了许多Python的虚拟环境,重新安装VScode的成本太高,试试这种方法

2024-11-04 21:45:43 3841 3

原创 PyQt5实战——操作台打印重定向,主界面以及stacklayout使用(四)

本文主要讲述了脚本集合工具包的主页面的UI布局(分成三个部分,功能选择,功能使用,日志窗口),如何实现操作台print重定向至edit文本框,以及stacklayout抽屉布局的使用,主要使用了抽屉布局来实现功能使用区的切换

2024-11-01 14:55:03 1176

原创 PyQt5实战——多脚本集合包,程序入口QMainWindow(三)

本文主要讲述程序的入口,以及解释了为什么Pyinstaller打包后图标不显示的问题,如果遇到使用Pyinstaller打包成exe后索引不到图标位置导致GUI程序图标不显示的情况,可以看一下本文是否有帮助

2024-11-01 14:34:54 1224

原创 PyQt5实战——多脚本集合包,UI以及工程布局(二)

本文主要讲述了作者的UI页面以及工程文件的布局,提前规划好UI页面的布局有利于后续各组件的摆放以及是否要限制组件的大小,设计好工程文件的布局有利于后期维护工程以及减少开发工作量,一些重复性的代码可封装起来,作者介绍了自己工程布局的思想

2024-11-01 14:19:28 1274

原创 PyQt5实战——多脚本集合包,前言与环境配置(一)

基于PyQt5开发的多脚本集合工具包,将常用的如UTF-8转换,翻译器,图像处理,音频处理等功能性脚本做一个可视化页面方便使用,本文章属于系列开头,包含前言与环境搭建

2024-11-01 14:12:31 779

原创 JavaWeb——IDEA操作:Project最终新建module

将以下地址修改为新module的地址。

2023-10-26 22:14:41 827

原创 JavaWeb——关于servlet种mapping地址映射的一些问题

此处定义了两个servket,一个路径为/hello,一个路径为/ *。按理来说,/ *包含了/hello,但由于优先级问题,我们在网址栏输入/hello时,它会优先找/hello,如果找不到,再找/ *。便开始排查问题,一开始是以为web.xml配置问题,但是经过几次调整后都没有解决,后来排查java文件是否出现问题,一开始以为自己少引入了包,后来修改doget后才恢复正常。在web.xml配置多个servlet映射路径(这里有两个servlet,一个是hello,一个是404)

2023-10-26 22:12:49 1323

原创 JavaWeb——Servlet原理、生命周期、IDEA中实现一个Servlet(全过程)

在JavaWeb中,Servlet是基于Java编写的服务器端组件,用于处理客户端(通常是Web浏览器)发送的HTTP请求并生成相应的HTTP响应。Servlet运行在Web服务器上,与Web容器(如Tomcat)进行交互,通过Web容器将请求分发给适当的Servlet进行处理。,可以接收并解析HTTP请求,执行业务逻辑,生成HTML、XML或其他格式的响应结果,并将其返回给客户端。Servlet可以处理各种不同类型的请求,如GET请求、POST请求等,并可以访问请求的参数、请求头、会话信息等。

2023-10-25 11:03:26 910

原创 JVM——GC垃圾回收器

内存效率:复制算法>标记清除算法>标记压缩算法(时间复杂度)内存整齐度:复制算法=标记压缩算法>标记清除算法内存利用率:标记压缩算法>标记清除算法>复制算法GC:分代收集算法存活率低复制算法区域大,存活率高标记清除(内存碎片不是太多的情况下)+标记压缩(内存碎片太多就压缩)混合实现。

2023-10-25 09:13:24 934

原创 JVM——堆内存调优(Jprofiler使用)Jprofile下载和安装很容易,故没有记录,如有需要,在评论区留言)

本章节是关于堆内存调优,查看堆内存状态,使用的工具是Jprofile,Jprofile下载和安装很容易,故没有写下来,如有需要,在评论区留言

2023-10-23 23:29:33 925

原创 JVM——一些零散的概念(后续学习深入了再补充)

凡是带了native关键字的,说明Java的作用范围的达不到了,需要调用底层C语言的库调用native方法,会进入本地方法栈,调用本地接口(JNI)JNI的作用:扩展Java的使用,融合不同的编程语言为Java所用它在内存区域中专门开辟了一块标记区域:Native Method Stack(本地方法栈),登记native方法在最终执行的时候,加载本地方法库中的方法通过JNI调用其他接口:Socket、WebService、http。

2023-10-23 23:22:53 867

原创 JavaWeb——IDEA相关配置(Maven配置以及创建自己的第一个Maven项目)

笔者根据狂神说的javaweb视频,跟着配置IDEA中的Maven,在后面,笔者将讲述自己如何从0配置Maven以及创建自己的第一个Maven项目,笔者将自己的心路历程,包括配置的过程,都以文字加图片的形式体现出来,即使小白也能跟着一步一步做!最最重要的是,笔者将自己走过的坑包括如何解决这些坑的方式都写下来了!有些地方笔者只写出了解决方法,并没有写出原理,如果有大佬了解,请在评论区为笔者解惑,万分感谢!

2023-10-21 21:02:16 4397 1

原创 JavaWeb——IDEA相关配置(Tomcat安装)

可以在中下载Tomcat,同样也可以在[Tomcat官网]()下载。

2023-10-21 20:37:53 430

原创 JVM——JVM概述以及双亲委派机制

当一个类加载器收到类加载的请求时,它并不会自己先去加载,而是把这个请求委托给父类的加载器去执行。如果父类加载器可以完成类加载任务,就成功返回,如果父类加载器无法完成此加载任务,子加载器才会尝试自己去加载。在双亲委派机制中,父类加载器先于子类加载器执行,子类加载器在无法完成加载任务时才尝试自己加载。栈中只存在实例对象的引用,即,栈中只保存,car1、car2、car3实例对象的地址,实例对象的真正数据存在于堆中,而stack存放的信息即为对应的堆地址。如何获得系统类加载器可以加载的路径。

2023-10-20 19:48:55 561

原创 JUC并发编程——各种锁的理解(基于狂神说的学习笔记)

false == true,所以会进入循环,循环体内什么都没有,又会进入判断,周而复始,直到那个线程unlock,调用CAS将thread修改为null。至此,读者可以看到,T1在打印“has this lock”之后,T2是无法持有该锁,它在不断地自旋,即进入while循环一直判断,我们来看一下这个代码在做什么。可以类比成:当你拿到进入一个房子的锁,进入房子后,再拿到进入卧室的锁,进入卧室,此时,就算你已经拿到了卧室的锁,你也并没有放弃房子的锁,别人依然进不来房子。synchronized版。

2023-10-20 19:41:53 261

原创 JUC并发编程——CAS与原子引用(基于狂神说的学习笔记)

CAS 是Java设置的CPU的并发原语Java是无法直接操作内存的但Java可以调用C++而C++可以操作内存Java可以通过native类调用C++来操作内存CAS = Compare And Set 比较并交换CAS是:比较当前内存中的值和主内存中的值,如果这个值是期望的,那么则执行操作,如果不是就一直循环比较(自循环)1、自循环会耗时2、一次性职能保证一个共享变量的原子性3、会存在ABA问题/***/

2023-10-19 19:15:53 225

原创 JUC并发编程——单例模式(基于狂神说的学习笔记)

使用synchronized与volatile的懒汉式单例。以上单例都不安全,使用反射即可破坏单例。使用枚举单例模式,反射无法破坏枚举单例。

2023-10-19 19:13:48 581

原创 JUC并发编程——Volatile详解(基于狂神说的学习笔记)

然后A又抢到CPU资源,因为A之前的操作停留在num++上,也就是说,它的下一步是将num写入内存(机器很傻,它不会察觉自己手上的num已经发生改变,而是遵循着代码的顺序,执行下一条指令,而num++后的下一条指令为“把num写入内存”)它将自己手上的num,也就是51,又写进内存。因此,A线程与B线程进行了两次num++操作,理应num应该从50变到52,结果只是从50变成51,而在程序中,这种情况可能出现,也可能不会出现,可能在任何时候出现,因此无法预测,每一次运行都是一个全新的结果。

2023-10-18 19:32:24 217

原创 JUC并发编程——JMM详解(基于狂神说得到学习笔记)

参考文献JMM概述-CSDN博客内存模型可以理解为在特定的操作协议下,对特定的内存或者高速缓存进行读写访问的过程抽象描述,不同架构下的物理机拥有不一样的内存模型,Java虚拟机是一个实现了跨平台的虚拟系统,因此它也有自己的内存模型,即Java内存模型(Java Memory Model, JMM)。因此它不是对物理内存的规范,而是在虚拟机基础上进行的规范从而实现平台一致性,以达到Java程序能够“一次编写,到处运行”。

2023-10-18 19:30:36 265

原创 JUC并发编程——ForkJoin与异步回调

ForkJoin在JDK1.7出现 ,并行执行任务,在大数据量下,能够提高效率讯飞星火提供的说法:Forkjoin是一种并行计算的算法,用于将一个大任务分解为多个小任务,然后将这些小任务分配给不同的线程或进程来并行执行,最后再将结果合并。在计算机科学中,Forkjoin通常用于实现基于分治策略的程序和数据结构,例如排序算法、图遍历算法、哈希表等。它可以有效地利用多核处理器的并行计算能力,提高程序的性能。

2023-10-18 00:01:54 234

原创 JUC并发编程——Stream流式计算(基于狂神说的学习笔记)

Stream流式计算是一种基于数据流的计算模式,它可以对数据进行实时处理和分析,而不需要将所有数据存储在内存中。Stream流式计算是将数据源中的数据分割成多个小的数据块,然后对每个小的数据块进行并行处理,最后将处理结果合并。这种方式可以大大提高程序的执行效率,因为每个小的数据块都可以在一个独立的线程中进行处理,而不需要等待整个数据集被处理完毕。Stream流式计算的优点有很多,其中最重要的是它可以大大提高程序的执行效率。Stream采用了一种延迟计算的机制只有在终止操作时才会触发计算。

2023-10-18 00:00:13 293

空空如也

空空如也

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

TA关注的人

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