自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(105)
  • 资源 (1)
  • 收藏
  • 关注

原创 逻辑代数运算律

这里谈及的是二元逻辑运算符&&(与)、||(或)以及一元运算符!(非). 这些运算符的运算律还是挺重要的, 因为先入为主写就的代码会按照原来的逻辑思维定势写出比较复杂的&&、||、!的混合条件case, 而通过运算律可以简化他们, 特别是在重构代码的时候会派上用场.

2024-04-10 11:29:38 209

原创 不要乱用Qml属性implicitWidth与implicitHeight

implicitWidth/Height一般用在可重用控件,它也不是必要的,QtQuick可以没有者两个属性,只因为了方便而存在。它提供了项目的自然大小的提示,但没有强制执行此大小。如果没有设置width/height系统就会默认使用implicitWidth/Height。这里要注意,如果设置的implicitWidth/Height大于设置的width/height,那么会优先启用implicitWidth/Height。width/height控件属性则为控件的宽度和高度。

2024-03-20 12:20:34 156

原创 记一次无法ping通Cisco switch处理

网络小白,仅仅在工作中需要telnet到switch。奈何之前不知什么原因一直无法ping通该switch,很久只能使用串口连接来配置了。而今遇到了使用脚本telnet switch的场景,不得不再次面对这个问题。结果发现并没有我的switch ip所属的Vlan 802。让管理员添加Vlan 802后,问题得到解决。

2024-01-31 17:19:35 234

原创 《Linux0.11源码解读》理解(五) head之开启分页

一个页表的最后一项在页表中的偏移地址是1023*4 = 4092(表项从0到1023,偏移地址=序号*4)。在保护模式下,ds段选择子,如0x10指向的是全局描述符表中的第二个段描述符(数据段描述符),里面内容中的段基址是 0。然后开启分页(cr0 的PG 标志,位31)。,共有4个页表只需设置4项(页目录和每个页表项本身也占据4K,每项4byte,一共可以设置1k个项/条目)。,共有:4(页表)*1024(项/页表)=4096 项(0 - 0xfff),也即能映射物理内存4096*4K = 16M。

2023-07-18 22:45:49 452

原创 QML MouseArea堆叠时传递组合事件

我们知道mouseX和mouseY是在此MouseArea内部的相对坐标,一个mouseArea使用固然没有问题,但是我发现一旦above传递给beneath后,above接收到的mouseX/Y正确无误但是beneath的mouseX/Y是不对的(假如我们对坐标感兴趣的话)!2方MouseArea各自接受自己的,互不影响。一旦above在onPressed设置mouse.accepted = false,beneath固然能收到pressed和released,但是above只能收到pressed了。

2023-07-13 18:54:24 365

原创 《Linux0.11源码解读》理解(四) head之重新设置IDT/GDT

上节提到,现在cs:ip指向0地址,此处存储着作为操作系统核心代码的system模块,是由head.s和 main.c以及后面所有源代码文件编译链接而成。head.s(以下简称head)紧挨着main.c,我们先执行head。

2023-05-27 22:51:02 1050

原创 《Linux0.11源码解读》理解(三) 执行setup

上一节的最后jmpi把cs:ip设置为0x9020:0000。于是CPU开始,它的作用是。

2023-05-17 22:25:01 391

原创 《Linux0.11源码解读》理解(二) 加载setup、加载system

现在CPU开始执行bootsect,它的作用是把第二部分、第三部分程序陆续加载到内存中。而把放到合理的内存位置需要先对内存进行规划。根据上一节,boostsect当前所在内存位置是0x07c0,大小为512byte,现在要将其挪动到内存的。除此以外,还要将位于硬盘上的4个(SETUPLEN)扇区的setup程序加载到内存的;最后要将system程序(内核)加载到内存的,并指定了其末尾位置(ENDSEG)。

2023-05-04 22:05:45 752 4

原创 《Linux0.11源码解读》理解(一) 从开机到加载bootsec

计算机启动时, 内存(RAM)没有任何东西, 自然也无法跑操作系统. 但是可以执行固化在ROM里面的BIOS程序. 在按下电源键的一刻. CPU的cs和ip寄存器硬件被设置为0xf000和0xfff0, 于是cs:ip也就指向0xffff0这个地址, 而这个地址正是指向了ROM的BIOS范围(这里是0xfe000~0xfffff, 20根地址线全部范围0x0000~0xfffff, 这个范围包括RAM、ROM、其他map的外设).下的程序,它的中断调用都是建立在中断向量表基础上的。

2023-04-20 16:09:00 458

原创 QML Text属性width、implicitWidth、contentWidth更新时序

对于动态内容Text, width被getHgWidth绑定, 故function一定先调用, 不论implicitWidth和contentWidth是否为0. 一旦有text动态更新,先变化的属性是implicitWidth, 这将trigger function再次调用,这将导致width更新, 而最后更新的是contentWidth.说句题外话,我之前getHgWidth想用Text A和Text B的visible属性来作为function参数来更新witdh,但发现虽然每次。

2023-03-16 15:52:21 777

原创 《STL源码剖析》理解之将类成员函数和for_each等算法结合

既然抱怨的是“_Func这个函数不能转为接受一个参数的函数”,但以上代码使用的函数“print2”明明是只接受一个参数的函数,那为什么编译器还会报这个错呢?显然print2的参数是int而不是Int。mem_fun_ref返回一个仿函数,而这个仿函数接受两个参数,一个是T*指针(也就是方法所在类对象的指针,可理解为this),第二个才是我们需要的Int。类成员函数可以通过函数适配器(function adapters)包装成一个仿函数(重载了operator()的类),将其搭配于STL算法一起使用。

2023-02-24 23:48:34 422

转载 修改Eclipse字体以及背景颜色

3. 选中 Test Editors,右边出现Test Editors面板。3. 在右边的对话框里选择Java - Java Editor Text Font,点击出现的修改(Change)按钮,可以设置显示在在主窗体中程序的字体大小。2. 展开Appearence标签,选中Colors And Fonts选项,展开。1. 打开window->Preference,弹出Preference面板。2. 展开General标签,选中Editors选项,展开。4. 护眼色数值(16进制): #C7EDCC。

2022-12-19 14:02:51 978

转载 将文件中的tab转换为space空格

在Linux中还有其它的方法可以将文件中的tab和space相互转换。来键入的,此方法将所有tab替换为4个空格。使用expand和unexpand命令。,同样将所有tab替换为4个空格。在vi中使用替换命令。

2022-11-17 16:07:43 812

原创 Cisco switch常用命令

monitor session destination interface //接分析工具的端口(PC抓包)如phone连到Gi1/0/2,pc连到 Gi1/0/1,则用wireshark抓电脑网卡的包抓到的就是phone的包。monitor session source interface //定义被监控的端口。switchport access vlan //port一对一设置vlan。

2022-11-07 12:27:54 910

转载 Git远程分支操作

使用git fetch不会合并远程分支,需要再显式使用git merge命令。如果远程分支已在本地分支之后,可以不删除远程分支而使用强制方式推送到远程分支。获取远程分支数据, 远程仓库名就是add remote -add的名字。设置要推送的远程分支为本地待跟踪,方便后续拉取代码操作。如果远程分支名和本地分支名一致,那么使用简易方式。如果需要本地分支和远程分支名一致,实现如下。设置本地分支想要跟踪的远程分支。修改要跟踪的远程分支,使用参数。显示本地分支和远程分支的关系。推送本地分支内容到远程分支。......

2022-08-08 18:04:30 925

转载 Git本地分支操作

注意, 这里说的分支都是指本地而非远程的.

2022-08-08 17:27:27 259

原创 嵌入式Linux为Qt定制keymap

而嵌入式平台按键有限且要自行指定keycode,这时不再使用上述keymapDefault的缺省实现.比如将输入设备gpiokeys实现为驱动/dev/input/event1(假如他的F8keycode是82,非66),那么如何让Qt使用/dev/input/event1并使用新的keycode--Key_F8映射关系呢?...

2022-07-25 22:46:28 602 1

原创 从 typedef struct T *T 看C语言的命名空间

最近在看《C语言接口与实现》一书. 第二章提到, 一个ADT(抽象数据类型)就是一个借口, 其标准范例是栈. 其接口定义如下所示:众所周知宏定义的作用仅仅是一个替换而已, 因此typedef这句话实际为:按照书上说法, Stack_T对外接口表现为一个“不透明指针”. 我起初理解是, 以后凡是看到Stack_T的地方实际指代的都是指针Stack_T*. 乍看起来这种理解没错, 但看一下栈的实现后, 便发生了理解不能的事情:这里#define 指令又把T定义为Stack_T的缩写. 问题来了

2022-07-02 17:30:35 538

转载 cpu的位宽、操作系统的位宽和寻址能力的关系

cpu的位宽暂时没有严格的定义,但是一般从数值上来讲:cpu的位宽 = 数据总线的位宽 = cpu内部通用寄存器的位宽 = 机器字长放出一个百度百科对于机器字长的定义供大家理解概念:CPU的寻址能力与它的地址总线位宽有关,与数据总线宽度(CPU位宽=数据总线位宽)无关。16位CPU的地址总线位宽可以是20位,32位CPU的地址总线可以是36位,64位CPU的地址总线位宽可以是40位。NOTE:CPU内部寄存器之间、CPU和外设的数据交互是通过总线来实现的,下图展示了cpu和外部设备(存储器和IO)之间的总线

2022-06-30 16:44:04 3545 1

原创 Git fork, branch的异同及其cherry-pick和pull request操作

对于原生的Git来说,是没有fork的,fork是类似GitHub、码云等等在线代码托管平台提出来的功能. fork可以克隆出一个仓库的新拷贝,包含原仓库(即upstream repository,上游仓库)所有内容,如分支、Tag、提交. 若在被克隆项目进行修改和提交, 则完全不影响原仓库. 而若要将修改推到原仓库, 需要pull request,一旦对方接受,修改便合并入原仓库. branch是一个Git操作,可以开启另一个分支, 在原先仓库上得到一个新的分支. 处理分支的方式十分轻量,创建新分支速

2022-06-26 11:07:03 1617

原创 Docker设置DNS, 或直接配置静态域名

需要在docker内通过内网域名下载文件. 也许在家办公, 访问DNS服务器的不稳定的原因, 默认的 8.8.8.8 或 8.8.4.4 (Google免费的) 无法解析诸如公司的内部域名 sqbu-github.xxxxx.com. 而在宿主机上可以进行操作:于是乎, 在宿主机通过ping域名, 或者利用nslookup可以获得域名的IP, 以及宿主机所使用的DNS服务器:那么如果让docker内识别出域名sqbu-github.xxxxx.com呢? 经查阅有若干种方式:加入刚.

2022-06-22 00:21:21 1486

原创 gcc在ELF链接多级so时, 探究-l -L -Wl,-rpath的作用

首先声明下多级so是指, 该so依赖其他so.比如libtest.so依赖libtest1.so的方法; 此外在此例中, 我们有名为test_xxx的ELF文件需要链接libtest.so, 以使用libtest.so的方法:公司项目的编译系统中, 遇到个未引起注意而不得其解的现象. 即编译libtest.so时, 不用指出所依赖的libtest1.so也可以编译成功. 但是编译/链接test_xxx.out时, 必须显式依赖所有的so, 包含一级的libtest.so 和 二级的libtest1.

2022-06-16 16:00:26 388

原创 gcc请求显示或关闭warnings

gcc可以用' -W'开始的选项请求许多特定的警告. 反之, 每个特定的警告选项也有一个以“- wno -”开头的否定形式来关闭警告; 具体选项参见:Warning Options - Using the GNU Compiler Collection (GCC)其中, 2个选项值得注意:-w 关闭所有warning, 而 -Werror 将所有warning视为error.前者-w关闭所有warning自然需要慎用.后者-Werror有些公司项目为了引起对warning的重视, 默认开启即不允许有

2022-06-06 17:11:01 3786

原创 More Effective C++ (3)笔记之不要期望以多态处理数组 & 重载<<操作符

多态指的是可以通过基类类型的指针或引用, 来操作派生类的对象. 然而通过基类类型的指针或引用,来操作派生类的对象数组, 则没有任何保证如预期般运作.有一个class BST以及继承自BST的class BalancedBST:class BST{public: BST():bst1(-1),bst2(-2){} virtual ~BST(){cout << "BST::~BST" << endl;} virtual ostream& op

2022-05-15 18:16:32 185

原创 gcc头文件依赖顺序所遇到的坑

公司的genmake编译系统是用python对ninja + gcc所写的一个wrapper, 最终编译命令诸如:[100%] ${GCCPREFIX}/home/lajiang/.genmake/artifactory/toolchain/arm_gcc-8.3.0_glibc-2.28-x86_64-linux-gnueabihf/bin/arm-cisco-linux-gnueabihf-gcc -D_GNU_SOURCE -isystem platform/compiler/glibc -D_

2022-05-11 21:03:19 501

原创 Linux命令行/vim 常用跳转、删剪粘快捷键备忘

Linux命令行光标到行首: ctrl + a光标到行尾: ctrl + e左移一个单词:Esc + b右移一个单词:Esc + f删除至行首: ctrl + u删除至行尾:ctrl + k删除一个单词: ctrl + wvim(命令模式下)光标到第一行: gg 或输入 :0光标都最后一行: G 或输入 :$光标到行首: ^ 或 0光标到行尾: $光标移动指定行尾: 1$ (当前行尾) 2$(下一行尾)左移一个单词: b右移一个单词: w删除当前行: ...

2021-11-12 15:39:04 882

原创 对于何时调用构造函数、copy构造、赋值运算符的区分

有个Obj类:class Obj{public: Obj() : mem(0) { cout << "Obj()" << endl; } Obj(int n) : mem(n) { cout << "Obj(int n)" << endl; } Obj(const Obj& obj) { mem = obj.mem; cout << "Obj(const Obj& obj)" <&lt

2021-03-07 10:02:54 118

转载 物理地址扩展(PAE)分页机制

摘要: Intel通过在处理器上把管脚数从32增加到36,以提高处理器的寻址能力,使其达到2^36=64GB,然而线性地址的位数仍然是32位,为此,需引入一种新的分页机制。从pentium pro处理器开始,intel引入一种PAE机制,另外一种叫做页大小扩展机制(PSE)在pentium III中引入,但是linux没有采用,本文不讨论它。 本文来源:内存管理:物理地址扩展(PAE)分页机制http://blog.csdn.net/trochilus...

2021-03-04 22:10:05 1143 2

转载 HTTP的短连接和长连接

在http1.1中request和reponse header中都有可能出现一个connection头字段,此header的含义是当client和server通信时对于长链接如何进行处理。在http1.1中,client和server都是默认对方支持长链接的, 如果client使用http1.1协议,但又不希望使用长链接,则需要在header中指明connection的值为close;如果server方也不想支持长链接,则在response中也需要明确说明connection的值为close。不论req

2021-02-08 15:38:54 122

原创 C++引用拾遗

引用是变量的别名;在某种场合以引用替代指针是C++区别于C的一个显著特征;引用内部是用指针实现的。1. 如果将引用赋值给一个普通(非引用)变量会发生什么:int glbVar = 10;int& retRef(){ return glbVar;}int main(int argc, char* argv[]){ int tmp = 0; int* ptr_tmp = &tmp; tmp = retRef(); int&amp

2021-02-04 00:29:32 176

转载 socket读写返回值的处理

在调用socket读写函数read(),write()时,都会有返回值。如果没有正确处理返回值,就可能引入一些问题 总结了以下几点 1当read()或者write()函数返回值大于0时,表示实际从缓冲区读取或者写入的字节数目 2当read()函数返回值为0时,表示对端已经关闭了 socket,这时候也要关闭这个socket,否则...

2021-01-25 23:11:03 2647 1

转载 HTTP方法post和get区别

POST和GET都是向服务器提交数据,并且都会从服务器获取数据。区别:1、传送方式:get通过地址栏传输,baipost通过报文传输。2、传送长度:get参数有长度限制(受限于url长度),而post无限制3、GET和POST还有一个重大区别,简单的说:GET产生一个TCP数据包;POST产生两个TCP数据包长的说:对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送header,服务器响应1

2021-01-06 22:39:19 105

原创 代理、适配器和外观模式

重写基于另一组类的包装器接口是常有的事儿。创建包装器API的副作用是影响性能,函数调用开销+额外代码量,但为了创建更有针对性、质量更高的API是值得的。

2020-12-18 16:11:18 139 1

原创 简单工厂和扩展工厂模式

工厂模式一个创建型的设计模式。它允许创造对象时不用知晓所创建对象的具体类型。一般C++的构造函数有以下限制:1. 没有返回值2. 命名限制(构造函数名字必须和类名字相同)3. 不能声明虚构造函数4. 静态绑定创建(构造函数没有运行时动态绑定的概念,编译时须能够确定具体类型名)而工厂模式绕开了以上限制。它们经常和继承一起使用,即派生类能够重写方法并返回派生类的实例。常见做法是使用抽象基类。简单工厂抽象基类是包含纯虚函数的类,不能使用new实例化。其用于描述各个类共享的行为,指定了派生类必

2020-12-16 17:35:35 208

原创 单例线程安全实现、DCLP及其注意事项、饿汉懒汉实现方式

单例设计模式确保一个类仅存在一个实例,并提供了对此唯一实例的全局访问点。可以认为单例是一种更加优雅的全局变量。相对于全局变量,它还有其他优点:1. 确保一个类只创建一个实例2. 为对象分配和销毁提供控制3. 支持线程安全地访问对象的全局状态4. 避免污染全局名字空间用C++实现单例为了阻止客户自行分配、销毁、复制该类对象,将默认构造、析构、复制构造和赋值操作符都声明为私有并且不实现。class Singleton{public: static Singleton&

2020-12-14 22:58:28 229

转载 Application启动流程

谈到Android Application的启动流程,很多文章都是各种源码类和方法的一堆调用关系,这样的文章就算看一百遍,也只是云里雾里。源码得看,但是最好不要一下子深陷到源码的细节之中,不可自拔。这里站在前人的基础之上做一个总结。在说应用的启动流程之前,得先了解一下Android系统的启动流程,因为Application的启动是离不开系统的处理的。Android系统的启动流程BootLoader启动内核和init进程;init进程分裂出过个守护进程,如Android Debug Damon

2020-06-19 13:50:24 705

原创 performance调查要点(持续更新)

线程优先级 CPU占用率,使用top

2020-06-05 14:56:08 126

原创 Java protected与默认权限的区别

作用域 当前类 同package 子孙类 其他package public √ √ √ √ protected √ √ √ × friendly(default) √ √ × × private √ × × × friendly ...

2020-04-17 14:42:52 875 1

原创 NDK编译native程序(二)构建原生组件

接上一篇NDK编译native程序(一),ANT使用的build.xml指定了使用ndk-build来构建native so。<exec executable="/opt/android-ndk-r15c/ndk-build" dir="${basedir}/main/jni" > <arg value="V=1" /> <arg value="APP_BU...

2020-04-06 00:13:34 351

原创 NDK编译native程序(一)构建Java应用程序

Android原生开发包(NDK)是Android软件开发包(SDK)的相关工具集,用于Android平台上C++平台上的开发。使得开发人员能够使用机器代码生成的编程语言(C、C++、汇编)实现一些对代码性能要求较高的的模块并将其嵌入到Android的应用程序中。用原生组件(命令行)构建Android项目需要三步,第一步和第三步由ANT工具完成:构建Java应用程序 构建原生组件 将Ja...

2020-04-05 23:41:37 445

opengl es win32模拟器(63位也适用)

opengl es win32模拟器(63位也适用) 亲测可用~~~

2018-06-03

空空如也

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

TA关注的人

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