- 博客(268)
- 资源 (13)
- 问答 (1)
- 收藏
- 关注

原创 计算机知识结构梳理
有关自身经历的一些想法从事计算机及相关工作已有20年,每每想起自身学习的过程,心里总觉得有些曲折,其中既有自身认识的问题,也有学校课程安排的问题。自身问题不想多谈,毕竟每个人所面对的环境和生活不一样。谈及学校的课程安排,我倒有不吐不快之感。计算机专业往往采取教授编程语言开始,然后安排大量课时给如英语,大学物理,数学课程。中间穿插模拟电路,数字电路,汇编语言,操作系统等相关课程。每每想起总觉得前后不搭,大学最后的课程安排又让人觉得过于追求即时效果而缺少基础研究。回想走过的弯路,心中不免烦乱,加之工作要求,
2022-02-09 22:00:20
7243
原创 栈是如此重要——C函数栈传参
可以看到add2的函数栈在构建时,在rbp的高8位是回到main函数的地址(RA)。在C的main函数调用add2函数前,将第一个参数和第二个参数分别放在了rdi和rsi寄存器中,那么在进入add2的汇编片段时,这2个寄存器将会将值放在内存栈中。由于是O0选项进行的gcc编译,因此对C程序不做优化,上述汇编是将内存栈空间作为过渡,将值传递给参数寄存器。,当main调用add2时会传2个参数到add2执行的汇编片段,那么这2个参数是如何在栈上布局的呢?在进入add2之前,栈的形式如下。
2025-04-30 16:46:19
392
原创 栈是如此重要——C函数栈
栈为先进后出的数据结构在《数据结构》中有C的栈实现算法,然而很少看到对于栈有什么作用的描述。考虑一个场景,当CPU在计算时需要将某些值临时保存,待当前需要处理的事情处理完毕之后,重新把这些数据还原。此时应该怎样做?典型的应用就是函数调用,比如add2(2,3);return 0;在上述程序中,add2会调用add3函数,当调用add3函数前,计算机必须保留下add2函数的位置,以便在add3结束之后可以返回到add2处理的位置。此时,栈就起到了记录现场的作用。
2025-04-27 11:22:31
673
原创 字节,字节码,字节码文件,字节码指令
计算机一般是一个字节一个字节的读取数据,使用字节进行编码符合计算机的读取数据的流程。第三,使用通用的字节码指令针对的是纯软件的虚拟机,其内容与平台无关。因此使用字节码的程序很方便移植,甚至可以说不需要任何操作,直接放在有Java虚拟机的机器上运行即可,实现了。这些字节根据Java虚拟机规范的要求在不同的位置表达不同的意思。由于电路实现上的原因,计算机的计数方式为二进制,即由0和1组成。为了方便的表示字节,一般采用16进制的形式。生成的.class文件为01组成的文件,使用vs code的。
2025-04-24 09:43:37
906
原创 关于编译和调试OpenJDK的一些问题
由于`OpenJDK`的编译环境是跟操作系统紧密相关的,所以,当分析`OpenJDK`代码的时候,首先应该阅读`README.md`,确定当前阅读的`OpenJDK`能够在哪些环境下进行编译和调试。这里将一些基本需要解决的问题进行阐述。
2025-04-21 14:25:11
557
原创 在Ubuntu 18.04下编译OpenJDK 11
链接: https://pan.baidu.com/s/1QAdu-B6n9KqeBakGlpBS3Q 密码: 8lho不同版本的jdk会要求在不同版本的Ubuntu下编译,不要用太高版本的Ubuntu或者gcc,特别是gcc,这个跟glibc的版本还绑定,如果gcc版本太高,则glibc版本也高,也会影响openjdk的编译。gcc7,freetype2可以直接使用apt-get install安装先configure,再makeconfigure可以参考openjdk/doc/building.htm
2025-04-21 13:50:36
461
原创 Java虚拟机(JVM)平台无关?相关?
平台无关是因为其执行过程是由纯软件实现的栈式计算机实现,而平台相关是因为Java虚拟机的具体操作跟平台指令和操作系统相关。不仅如此,为了能够实现**“一次编译,处处执行”**,Java虚拟机还能根据不同的操作系统进行适配,对于有些与操作系统和CPU结合的部分,也提供了不同的实现。所以,如果有程序要实现一个加法,那么在计算机底层执行时,其执行的内容是不一样的。上生成的.class文件,其内容是一样的。Tape是输入数据,Program是针对这些数据进行计算的程序,中间横着的方块表示的是机器的状态。
2025-04-17 17:25:21
814
原创 C++的*了又*
先看下面一段代码主函数这里首先在堆中创建了一个HeapWord对象的空间,然后其首地址放入heapword中然后又在堆中创建一个HeapWord对象的空间,然后其首地址放入p中然后声明一个变量p1,该对象指向一个指针,该指针指向的是HeapWord类型。
2025-04-11 16:30:30
198
原创 Unable to create an object of type ‘DbContext‘. For the different patterns supported at 原因
如果没有设置为“始终复制”则可能导致其配置文件无法复制到bin目录下,则。有可能是代码中设置数据库连接的文件没有设置为“始终复制”时找不到对应的数据库连接。
2024-08-19 14:00:26
925
原创 如何在asp.net mvc的视图中判断Model的一个属性为null
假设Model.InstFormatID为空。因为最后渲染成html的时候会变成下面的代码。所以得绕一下,改动代码如下。使用如下代码是不能判断的。
2024-05-20 16:52:50
350
原创 JQuery删除指定行
在增加行的js代码中指定函数delInst进行删除行操作。注意,这里传$(this)参数作为当前行的引用。,然后调用JQuery的remove操作即可。
2024-02-05 09:36:32
663
原创 JQuery的$(this)在if之后会变化
此时用浏览器调试发现,每选择一次下拉框就会导致链接字符串变长。$(this)`了。此时不再有链接长度变长的情况。
2024-01-22 16:47:38
509
原创 运算符的优先级(规矩是人定的)
先乘除后加减的本质就是运算符的结合性9+5*2等价于9+(5*2)这里要注意一个问题,无论是都是左结合的。因此加减法的产生式为乘除法的产生式为现在问题是如何把上述两个产生式混合在一起,并且符合先乘除后加减。
2024-01-02 22:38:03
721
原创 运算符的结合性(形神兼备)
在编译原理中,产生式就是权威。表达式如果以某产生式进行语法分析,那么就只能按照它的方式进行表达,且不能具有二义性。但是,在表达式中有时会涉及打括号的问题。很多时候,在原表达式中打括号和原表达式等价。比如但有时候却不等价 ,比如在编译原理中,括号代表了运算符的结合性,如果运算符以左侧为标准则被称为左结合的,此时在左侧打括号和不打括号等价。反之亦然。
2023-12-26 23:41:57
896
原创 二义性(说话装X有罪)
上述二者都是二义性表达,在离散数学上来看都不具有唯一表示。在《编译原理(第二版)》中对二义性有这样的定义一个文法可能有多棵语法分析树能够生成同一个给定的终结符号串,这样的文法称为具有二义性(ambiguous)。注:ambiguous,在英文中是模糊的意思。那么反言之,如果表达式不具有二义性则应为一个文法如果有且只有一棵语法分析树可以生成给定的终结符号串,那么该文法不具有二义性。有关语法分析树的内容参见语法分析树(先看例子再看定义)-CSDN博客说话要说明白,意思表达要唯一,不要没事装逼!
2023-12-25 15:17:07
990
原创 语法分析树(先看例子再看定义)
如果非终结符A有一个产生式A->XYZ,那么在语法分析树种就可能有一个标号为A的内部结,该结点有3个子结点,从左到右标号分别为X、Y、Z。如图给定一个上下文无关文法,则该文法就有一颗语法分析树(parse tree)
2023-12-23 23:16:59
1178
原创 编译器语法推导(1)基本定义(逐句举例对照)
在中,我们讲到了两个概念,分别是终结符号和非终结符号。回忆一下二者。词法单元,不可再变词法变量,尚未确定比如其终结符号为if, (), {}非终结符号为expr, stmt。
2023-12-22 09:46:13
422
原创 什么是文法产生式(尽量写简单了)
一个典型的if-else语句可由下述构造规则表达其中变量名全称stmtstatementexprexpression比如if(i==0){return 1;涉及术语产生式(production)终结符号(terminal)if, (), {}非终结符号(nonterminal)expr, stmt上下文无关文法(context-free grammar)由四部分构成终结符号集合:也被称为”词法单元“非终结符号集合:也称为”语法变量“产生式集合。
2023-12-21 16:10:34
934
原创 什么是DAG(只讲概念不讲算法)
编译器的目的是将源程序编程目标代码(汇编)放入计算机执行。这里有一个问题,世界上有很多不同架构的CPU,比如x86,ARM等。不同架构的CPU有不同的汇编。于是上图带来的问题是直接从源程序翻译成不同架构CPU的目标代码工作量太大且容易出错。正确的做法是在和中间加一层作为桥梁,将其衔接起来。
2023-12-21 11:24:15
1087
原创 Selector选择器在AspNetCore中的用法
项目编辑过程中会选择其所属的上级项目,而上级项目在数据结构中是以ParentID的方式表达,而非Project类型,用户不会记录也不应该记录ID值,因此应提供Selector项目下拉框供用户选择。但是MVC的Razor页面绑定数据时绑定的时单个对象或者IEnumerate集合对象,因此,如果在页面上绑定项目列表则成为完成的难题。
2023-09-07 14:42:06
230
原创 How to resolve the update problem tracking instance in many-to-many in EFCore 7.0.10
【代码】How to resolve the update problem tracking instance in many-to-many in EFCore 7.0.10。
2023-09-01 14:17:06
151
原创 openjdk11 compiling failure undefined JvmtiSampledObjectAllocEventCollector::object_alloc_is_safe_to
【代码】openjdk11 compiling failure undefined JvmtiSampledObjectAllocEventCollector::object_alloc_is_safe_to。
2023-05-26 14:34:31
184
原创 x86的编码格式
x86采取可变长度的方式进行编码,其主要原因应是8086的机器性能不高,导致编码越短越好。而8086的编码模式相较于x64较简单,且x64兼容x86编码,所以,以下阐述将由8086一直讲到x648086采取以下编码格式其中opcode是必须的,其他的是可选的opcodeopcode的格式前6位表示操作,后2位分为以及位Mod R/MMod R/M表示寻址方式,下表表示寻址的类型首先以mod=11为例进行阐述首先制定reg域的编码规则,此规则适用于任何mod方式假设指令为则指令序列为,根据上述的格式可知为o
2022-06-20 16:54:32
2196
转载 vscode试图过程写入管道不存在
1.对于win10上面的C:\Users\Administrator/.ssh/config 这个错误的解决办法解决办法1:参考:https://zixizixi.cn/windows_vscode_ssh_error_bad-owner-or-permissions1解决办法2:一定要把config文件的路径写在这里或者上述两种方式同时用一用————————————————版权声明:本文为CSDN博主「喜欢打篮球的普通人」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处
2022-06-17 22:29:01
364
原创 Hibench版本可能导致运行不成功
这里写自定义目录标题Hibench版本可能导致运行不成功前言问题原因解决方案Hibench版本可能导致运行不成功前言下面列出我所用的Hibench,Hadoop,Spark的版本以及不成功的课题名称版本Hibenchbf390d2e6Hadoop3.1.0Spark3.0.0出问题的课题Sql/问题原因Hibench在做课题的时候,只按照Hadoop和Spark的文档要求在pom.xml里面加入引用,至于是否真的可以,它不管。对于sql类课题,可以
2022-05-14 15:22:26
623
原创 Hadoop分布式计算实验
1 分布式计算的背景由于网络中待处理的数据量越来越大,高性能单机处理的能力也无法满足海量处理的要求。此时,若将巨大的数据进行分割交由不同的机器各自进行处理,再将每个机器的计算结果进行汇总,进而提高了运算时间。此时,用性能较低的机器也有可能在计算能力上超过高性能的单机计算能力。2 HadoopApache Hadoop是大数据开发所使用的一个核心框架。使用Hadoop可以方便地管理分布式集群,将海量数据分布在集群之中,并使用分布式并行程序处理这些数据。在该集群中的每台计算机都提供本地计算和存储。其本身
2022-04-11 16:43:56
74
转载 Qemu的CentOS扩容
virsh listId Name State----------------------------------------------------10 qemu_test runningqemu_test映射的qcow文件为test.qcow2qemu-img info test.qcow2image: /home/test.qcow2file format: qcow2virt
2022-03-31 16:36:02
705
原创 Hadoop学习中VMWare的网路配置
Hadoop学习中VMWare的网路配置1 背景为了学习Hadoop,则在自己的机器上模拟构建一个集群环境2 VMWare网络配置步骤首先在VMWare中新建一个网络适配器在VMWare中“编辑”–>“虚拟网络编辑器”–>“添加网络”设置网络设置NAT在Windows的网络连接中设置右键设置IPV4这里表示是Windows的IP,也就是Windows自己有了2个IP,一个是路由器DHCP分配的,一个是自己设置的网络连接的结构是这样的3 VMWare中的Cen
2022-03-28 15:59:31
2499
转载 java -jar HelloWorld.jar出现HelloWorld.jar中没有主清单属性/Error: Invalid or corrupt jarfile HelloWorld.jar
参考链接:https://www.cnblogs.com/linjian/p/4785530.html1.导出jar包,CMD运行,报HelloWorld.jar中没有主清单属性2.用压缩软件打开jar包3.修改META-INF 文件夹下的MANIFEST.MF文件4.添加如下5.注意在Main-Class: 之后带个空格,否则会报Error: Invalid or corrupt jarfile HelloWorld.jar6.另外源文件放在default package 里面,放到其他包里面
2022-03-03 19:00:11
445
原创 二进制实现原理之半导体基础
物体的导电性正常情况下,我们用万用电表测量一段导线的电压或者电流,其值为0.原因是其内部的自由电子,此时并未受电场力的影响而产生定向移动。如图。当在金属的两端加上电源的正负极,此时,导线的两段即产生了电场,自由电子由电场的负极流向正极,我们把与自由电子移动方向相反的方向定义为电流方向。此时在导线中就产生了电流。原子组成我们知道,自由电子带负电荷,在未受电场力的情况下,导线是不带电的,即不会向外发射电子。下图是不可能的。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img
2022-02-15 21:53:06
1333
原创 Hotspot中的Arena内存对齐算法
算法分析最近在分析Hotspot的内存代码时,看到如下的宏定义#define ARENA_AMALLOC_ALIGNMENT (2*BytesPerWord)#define ARENA_ALIGN_M1 (((size_t)(ARENA_AMALLOC_ALIGNMENT)) - 1)#define ARENA_ALIGN_MASK (~((size_t)ARENA_ALIGN_M1))#define ARENA_ALIGN(x) ((((size_t)(x)) + ARENA_ALIGN_M1
2022-02-14 22:51:27
386
原创 VS Code连接不到虚拟机的Linux
当VS Code连不到虚拟机的Linux的时候,首先检查Linux的IP是否发生了更改,如果没有,那是因为VS Code的启动早于虚拟机,重启电脑即可
2022-02-13 18:11:17
1251
原创 二进制作为计算机的计量依据
进制的由来古代最早为了计量,据说采用的是结绳方式,每一个结就代表比前一个数字加1,以结的个数比较东西的多少。后来,有文字之后,各文明都有了自己的计算方法,以中国为例,分别有十进制(天干)和十二进制(地支),以及二者结合的六十进制;英语系国家应该也有十二进制的过程,比如eleven和twelve,很明显与twenty one 以及 twenty two不一样。最后,由印度发明的十进制通过阿拉伯世界传到了全世界,成为了目前世界上标准的进制方法。所谓进制,也就是计量的个数达到当某个数之后,则会向前进一位,原来
2022-02-11 23:25:32
853
ARM汇编语言的系统号调用例程
2020-09-27
图形学DDA画直线算法
2010-02-12
VS2005最简单的OpenGL例子
2010-02-12
TA创建的收藏夹 TA关注的收藏夹
TA关注的人