java程序员需要掌握的计算机底层知识 学习笔记(一)

Python实战:5分钟搞定VCF文件中每个样本的SNP统计(附bcftools安装指南) 本文介绍了三种高效统计VCF文件中每个样本SNP数量的Python方法,包括原生解析、结合bcftools的推荐方案以及使用PyVCF3专业库。特别推荐bcftools结合Python的方法,适用于中大型VCF文件,显著提升处理效率。文章还提供了bcftools安装指南和进阶统计技巧,帮助生物信息学分析人员快速完成SNP统计任务。 阅读详情

《编码:隐匿在计算机硬件背后的语言》

《深入理解计算机系统》

语言:C    java  《C程序设计语言》《C primer Plus》

数据结构与算法:《java数据结构与算法》 《算法》 《算法导论》 《计算机程序设计艺术》

操作系统:Linux内核源码详解   30天自制操作系统

网络:机工《TCP/IP详解》卷一

编译原理: 机工  龙书《编译原理》  编程语言实现模式

数据库: SQLite源码  derby

计算机需要解决的最根本的问题,就是怎么代表数字

cpu的制作过程,cpu的原理:晶体管的工作原理《编码》17章

汇编的执行过程:

01001000  为了好记这段代码  比如这段代码表示:add

汇编的本质:助记符(可以理解为词典,将二进制编码翻译成我们可读的信息)。就是通过表来翻译二进制编码,本质就是机器语言。

计算机通电-》CPU读取内存中程序(电信号输入) -》 时针发生器不断震荡通断电 -》 推动CPU内部一步一步执行(执行多少步取决于指令需要多少的时钟周期)-》计算完成-》写回(电信号)-》DMA写给显卡输出(显卡内部有缓冲区,每个缓冲区的位置都对应屏幕的位置)

时针发生器的震动频率就是计算机主频

问题:java的解释与编译的区别?

java编译后是Bytecode二进制码,通过jvm的解释器解释为cpu的机器语言(解释执行)。c语言编译后放入内存即为机器语言,可以直接cpu执行。

cpu的二进制语言即机器语言与java语言的bytecode二进制语言有什么区别?

java为了跨平台,bytecode是java自身的二进制语言,需要jvm跟据不同的操作系统,跟据不同系统的解释器,解释为相应操作系统的机器语言,去cpu执行(跨平台原理)。

java相关硬件知识

cpu和内存是计算机硬件核心。

cpu的基本组成:

PC->programme Counter 程序计数器 : 记录当前指令地址。内存是个特别大的数组,当前指令在内存的哪个位置,需要记录指令的地址。

Registers 寄存器  :暂时存储CPU计算机需要用到的数据(从内存内拷贝临时数据到CPU内部,便于指令执行,运行计算完指令释放),  寄存器好几个,各个都有各自的功能。与JVM的栈有相似点。成本很高。

        64位CPU表示寄存器可以一次存储64的数字,ALU可以一次读64位数字。

ALU:Arithmetic & LOgicUnit  运算单元,做计算机运算。  如  内存内有两个数字 2,3,求和

        运算流程为:内存中的数字2copy到寄存器A,3copy到寄存器B。程序计数器PC记录当前指令为Add。

        ALU接收到Add命令,会到A和B取出2,3进行计算,计算完成后输出给寄存器C,最后C再将结果copy到内存的某个位置。

CU :Control UNit 控制单元

MMU : memory management unit 内存管理单元。硬件加操作系统组成。

cache : 缓存

超线程:

 一个运算单元对应多个pc和寄存器。如果不对应多个,需要线程切换。如三个线程ABC,CPU只有一个PC和寄存器,则线程A执行,执行过程中,数据暂存,切换到B线程执行B线程,这样的切换就是线程切换,上下文切换,context switch。效率比较低。

如果CPU比较强,可以有很多个PC,寄存器,线程能更快的切换。

存储器的层次结构:

 缓存的物理结构:

每个CPU内有两个核,每个核都有L1,L2,两个核共享L3.

 如果有两个CPU,则两个CPU共享内存。如图:

 缓存原理:按块读取:跟据程序局部性原理,读取同时可以读取附近的数据,可以提高效率。

                充分发挥总线CPU针脚等一次性读取更多数据的能力。

cacleline的概念:缓存行

主内存的数据-》L3 -》L2-》L1-》计算单元与寄存器

CPU内部的缓存一致性协议MESI,是以缓存行为单位的。

如:

CPU A的L2的缓存发生变动,则计算机的其它CPU的L2也要同样更新变动,重新从内存读取。

 有的数据一个缓存行装不下。缓存行不适合,保持一致性需要锁总线。缓存一致性协议有时也被成为缓存锁。终极解决方案就是锁总线,只能当前缓存行读取完,其它CPU才能访问内存。

缓存行越大,局部性空间效率越高,但读取时间慢。

缓存行越小,局部性空间效率越低,但读取时间快。

英特尔折中,一行64字节。

伪共享:

在多核架构中, 会发生一种伪共享的情况,原因是,每个cpu缓存自己的数据,cpu0对long i进行操作,缓存了i和i附近共计64字节数据;cpu1对long j进行操作,缓存了j和j附近共计64字节的数据。若i和j相邻,那么两个cpu缓存的就是主存中相同的一段64字节的内存数据。此时若cpu0对i的操作是写,导致这段地址上的数据对于其他cpu的缓存失效,cpu1尽管不操作i,也需要重新去主存中load这段数据,导致了额外的开销

由于缓存一致性协议会造成不同CPU之间的相同缓存行不停的更新,会造成性能降低。

案例:一:已知long类型长度为8,则在一个long类型的数组长度为2,分成两个线程,分别不停的更新数组的两个位置,即A线程更新index0位置,B线程更新index1。

二:long数组设置为长度为16,即总长度为128,A线程更新index0位置,B线程更新index8位置。

会发现第二种方案会比第一种方案效率更高。

已知英特尔的缓存行长度为64

因为第一个方案,两个线程的更新一直是一个缓存行,触发缓存一致性协议,影响效率。而第二个方案,由于index8超出了64长度,因此index0与index8不在同一个缓存行,所以效率更高。

缓存行对齐:

对于有些特别敏感的数字,会存在线程高竞争的访问,为了保证不发生伪共享,可以使用缓存行对齐的编程方式。

JDK7中采用long padding提高效率,即加入两个长度为8的long数组。

JDK8中,加入了@Contended注解,配合 JVM: -XX:-Restrictcontended 实现缓存行对齐

CPU的乱序执行 

两个互相没有关联的指令会乱序执行。

代码:jvm/jmm/Disord.java

乱序执行会出现的问题:

DCL (Double check Lock) 双重锁单例为什么是单例volitle?到底需要不需要volatile

 由于初始化的过程中分为很多指令,存在中间态。

由于CPU的乱序执行,有可能发生指令重排序:

问题:如何解决指令重排序?

1.设置内存屏障

对某部分内存做操作时前后添加的屏障,屏障前后的操作不可以乱序执行。.

intel CPU层面硬件实现  有三个原语:lfence(读屏障) sfence(写屏障) mfence(读写屏障)

也可以使用总线锁来解决cpu指令重排序的问题。

2.有序性保障也可以通过 intel lock汇编指令实现。lock指令又为原子指令。指令是一个Full Barrier,执行时会锁住内存子系统来保证执行顺序,甚至跨多个CPU。Software Locks通常使用了内存屏障或原子指令来实现变量可见性和保持程序顺序。

3.JVM层级的内存屏障,与硬件没有任何关系。 SS,SL,LL,LS   (s:store 写 l:load 读)

volatile的实现细节,即在volatile前后加了jvm的内存屏障。

:Jvm层面

CPU指令重排序规则:只要前后两条指令没有互相依赖的关系,即可重排序乱序执行。

JMV指令重排序规则:Hanppens-before原则 JLS - java language sepicifation  8条规则

  • 程序次序规则:在一个线程内一段代码的执行结果是有序的。就是还会指令重排,但是随便它怎么排,结果是按照我们代码的顺序生成的不会变!
  • 管程锁定规则:就是无论是在单线程环境还是多线程环境,对于同一个锁来说,一个线程对这个锁解锁之后,另一个线程获取了这个锁都能看到前一个线程的操作结果!(管程是一种通用的同步原语,synchronized就是管程的实现)
  • volatile变量规则:就是如果一个线程先去写一个volatile变量,然后一个线程去读这个变量,那么这个写操作的结果一定对读的这个线程可见。
  • 线程启动规则:在主线程A执行过程中,启动子线程B,那么线程A在启动子线程B之前对共享变量的修改结果对线程B可见。
  • 线程终止规则:在主线程A执行过程中,子线程B终止,那么线程B在终止之前对共享变量的修改结果在线程A中可见。
  • 线程中断规则:对线程interrupt()方法的调用先行发生于被中断线程代码检测到中断事件的发生,可以通过Thread.interrupted()检测到是否发生中断。
  • 传递规则:这个简单的,就是happens-before原则具有传递性,即A happens-before B , B happens-before C,那么A happens-before C。
  • 对象终结规则:这个也简单的,就是一个对象的初始化的完成,也就是构造函数执行的结束一定 happens-before它的finalize()方法。

 as if serial  不管如何重排序,单线程执行结果不会改变。

总结:解决CPU指令重排序方法?

CPU层面:三个原语:Lfence, Sfence, MFence 或者lock指令锁总线。

JVM层级:8个happens-before原则 + 4个内存屏障 (LL,LS, SS, SL)

as-if-serial:不管硬件什么顺序,单线程执行的结果不变,看上去像是serial

扩展问题:多个请求,要求顺序执行,怎么操作?

WC-write combining buffer合并读写技术

为了提高写效率,cpu在写入L1时,同时用wc写入L2

计算单元,寄存器与L1之间还有一个缓存单元叫:storeBuffer,空间特别小。

满四个字节,通过wc直接写入L2

由于ALU速度太快,所以在写入L1的同时,写入一个wcBuffer即storebuffer,满了之后直接写入L2

NUMA  non uniform-memory-access 非一致性内存访问

UMA,多个CPU共享一块儿内存空间   :一致性内存访问

一致性内存访问缺点:不宜扩展,cpu数量增多后引起内存访问冲突加剧。cpu的很多资源花在争抢内存地址上面。4颗CPU左右比较合适。

NUMA:指在主板插槽上,一组CPU有一个专用的memory内存。各组CPU与内存通过总线连接,也可以总线互相访问别的cpu的专用内存(效率较低)   就近访问原则。

ZGC-NUMA-aware  最近内存分配

分配内存会优先分配该线程所在CPU的最近内存

启动:

通电->biod uefi工作 ->自检 -》到硬盘固定位置加载bootloader-》读取可配置信息-》可配置信息存放于cmos

bootloader将读取到的相应的操作系统内核配置信息,读入计算机内存。

然后计算机权限交给操作系统内核。-OS

os本身就是一个软件,可以同时管理硬件(cpu,内存等)和应用(进程)

linux操作系统:《linux内核设计与实践》

 内核:

 宏内核:所有的功能都具备。这些功能程序都与内核在一块儿内存空间或者说芯片(计算机内存)

微内核:应用管理进程调度。只有进程调度与微内核在一块儿内存空间。因此微内核操作文件系统可以理解为:本身没有读硬盘的程序,需要到其它空间或芯片找到文件系统功能(可通过互联网或局域网),读完后返回给内核,内核在返回给应用。(效率低,弹性部署 5G loT)

 鸿蒙即基于微内核,弹性部署,通过互联网实现微内核互联。

各设备都有各自功能的微内核,各设备通过互联网实现互联,可以实现以下功能:

冰箱:洗碗机,把我里面的碗洗一下。

洗碗机:ok没问题,机器人,去冰箱把碗拿给我。

机器人:ok没问题

 外核:存在于科研实验室(不重要)为应用定制操作系统(多租户 request-based GC JVM定制化)

BurpSuite+安卓模拟器双保险:避开真机抓包限制的完整配置指南 本文详细介绍了如何通过BurpSuite与安卓模拟器(如雷电、夜神)协同工作,绕过真机抓包限制的完整配置指南。从环境准备、网络拓扑配置到证书部署和流量分析,提供了一套高效的解决方案,帮助安全测试人员稳定捕获手机数据包,提升测试效率。 阅读详情

相关推荐

《点亮创新灯塔!AI应用架构师与中小学初等教育AI智能体,共筑智能化教育辅助创新灯塔》

中小学AI智能体,是基于AI技术,能感知教育场景、理解教育规律、辅助教师教学和学生学习的智能系统。做老师“做不了”的事:比如5分钟批改45本作业,精准统计每个学生的易错点;做老师“做不好”的事:比如根据学生的学习风格(视觉/听觉/动觉)推荐个性化内容;绝不做老师“该做的事”:比如情感交流、价值观引导、创意教学设计——这些“人的温度”,AI永远无法替代。我是林宇,资深AI应用架构师,专注教育AI领域8年,参与过10多个中小学AI智能体项目,曾为北京、上海、深圳等城市的100多所学校提供AI教育解决方案。

Java大师兄的博客 432

硬件级多线程保障

硬件与多线程存储结构图数据一致性总线锁缓存一致性协议缓存行对齐小demoWCBuffer(write combining buffer)CPU乱序执行CPU 内存屏障JVM内存屏障 存储结构图 对于现代CPU,广告中我们经常可以听到一个三级缓存的概念。其中第一级和第二级缓存,为每个CPU核心独享,第三级缓存,是所有CPU核心共享,缓存集成在CPU内部,读取写入速度非常快,但是容量很小 再往下一级便是我们的内存,容量大,读写速度相对较快, 再往下便是我们的磁盘, 容量可以非常大,但是读写速度比较一般。 那整

Ralap的博客 1182

NLP自然语言处理:神经网络语言模型(NNLM)

目录 一、传统语言模型 1.1 稀疏性 1.2泛化能力差 二、神经网络语言模型 2.1 前馈神经网络模型(FFLM) 2.2 循环神经网络模型(RNNLM) 2.2.1循环神经网络模型示例 2.2.2RNN语言模型训练过程 2.2.3RNN语言模型反向传播 2.2.4语言模型评估 语言模型的构建目的是为了对语言中的各要素的分布进行估计,具有较长的研究历史和广泛...

陈宸的博客 1万+

CPU合并写

合并写

yw_2022的博客 587

【maven】idea左侧External Libraries里,没有Maven的依赖包 代码飘红

文章目录1.概述M.参考 1.概述 因为内网开发,然后这几天我被隔离了,然后公司搞了一个外网的vpn能连接的云桌面,云桌面也是网络隔离的,因此只能自己拷贝相关的文件到里面。 然后我就拷贝了代码和maven仓库中的一部分,因为本地的20G一次拷贝不完,需要多次拷贝,但是我拷贝了kafka,仍然飘红。具体如下 idea左侧External Libraries里,没有Maven的依赖包 然后整了很久都没搞定,后来我自己新建了一个项目,然后引入发现是不可以的,而且框框里面的飘红。 然后我就想是不是因为缺少依赖

九师兄 4411

AI:270-基于ASFF改进YOLOv8检测头的多尺度特征融合方法详解与实战

ASFF是一种基于自适应特征融合的策略,能够动态调整不同尺度特征的融合权重,适应场景中不同大小的目标。传统的YOLOv8检测头使用固定的特征融合策略,而ASFF则通过引入学习参数,使得网络能够根据输入图像的特征自适应地选择不同尺度特征的重要性。这一策略对于检测小目标或尺度变化大的目标具有显著优势。本文提出了一种改进YOLOv8检测头的新方法,通过引入自适应空间特征融合模块(ASFF),有效提升了多尺度目标检测的性能,特别是在小目标检测任务中的表现。

一键难忘的博客 3910

CPU、内存

文章目录volatile 是禁止指令重排序(DCL单例使用)new对象过程JVM重排序规则 volatile 是禁止指令重排序(DCL单例使用) class T { int m = 8; } T t = new T(); 在这个new对象的过程中有几种状态 几条指令 申请内存空间赋值初始值–>复制栈中内容–>消耗栈中一个(弹出来)指向的对象调用构造方法(消耗一个引用)—>弹出栈赋值给局部变量(astore-1;astore-0是this) 初始化有中间态(半初始化),有可能会出

weixin_45883611的博客 542

KEPServerEX 6 之驱动协议(UDD)实战 HTTP协议对接OpenWeatherMap天气 API全流程指南

本文分享了基于 KEPServerEX 6 的通用设备驱动(UDD)对接OpenWeatherMap天气API的实战方案。该方案针对工业物联网场景进行了深度优化,具有动态城市切换、运行时热配置、老旧JS引擎兼容等核心特性。文章详细介绍了从环境准备、脚本部署到Tag配置的全流程,重点解析了Legacy JS语法适配、Float类型安全处理等关键实现细节,并提供了完整的避坑指南和故障排查方法。该方案经过生产环境验证,可稳定实现气象数据采集与动态切换功能,适用于SCADA/MES系统集成场景。

-雲飛兄-博客 712

WCBuffer合并写

WCBuffer合并写: WriteCombliningBuffer的速度比L1还要快,只有4个字节的位置

学亮编程手记 1440

【异常】飞书OpenClaw机器人 HTTP 401: Invalid Authentication 报错排查与解决方案

HTTP 401 是HTTP协议标准定义的未授权(Unauthorized)状态码,核心含义为请求方身份认证无效,服务端拒绝执行本次请求。飞书开放平台服务端对自建机器人的全链路鉴权校验失败。无论是机器人接收飞书事件推送的上行请求,还是机器人主动调用飞书开放平台API的下行请求,只要身份凭证无效、鉴权逻辑校验不通过,飞书服务端就会返回该报错,并最终透传到飞书客户端会话窗口中。

奶爸的编程之路,也就一周冷个三天 3758

YOLOv8融合改进 更换检测头为Detect_DyHead同时添加C2f_DBB模块

yolov8独家训练测试融合网络结构,提供详细步骤详细代码,手把手教你在yolov8官方包中把检测头更换为Detect_DyHead检测头,并且将原始的C2f模块更换成C2f_DBB模块,提高检测精度,亲测在多个数据集上有涨点!!!!!

分享一些自己改进代码的实例 4747

Write Combining Buffer

现代CPU使用了很多技术来降低对内存存取数据的延时,因为CPU执行的速度实在是太快了,在从内存存取数据的约120ns中,可以执行数百条指令。 其中多级的缓存架构就是为了减少这种延时,来提高CPU的利用率。 在SMP系统使消息传递协议来保证缓存的一致性。但是CPU运行实在是太快了,人类总是很贪婪,想尽各种办法榨取CPU的性能,因此在缓存体系统,还存在的其它一些不怎么被人熟悉的Buffe...

weixin_30737433的博客 760

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

java程序员应该掌握的底层知识

文章目录java程序员应该掌握的底层知识相关书籍推荐硬件基础知识CPU的制作过程CPU的原理计算机组成汇编语言(机器语言)的执行过程量子计算机cpu的基础组成存储器的层次结构缓存cpu的乱序执行合并写UMA与NUMA操作系统基本知识启动什么是操作系统内核分类用户态与内核态进程 线程 纤程的基本概念(面试高频)纤程纤程的实现纤程的应用场景内核线程进程的创建和启动僵尸进程孤儿进程进程调度中断与系统调用(软中断)从汇编角度理解软中断内存管理内存管理的发展历程ZGCCPU如何区分一个立即数 和 一条指令内核同步机制

qq_37892401的博客 1549

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

计算机底层知识第一课,程序员,你搞懂了吗?

对于程序员来说,计算机组成原理相关知识重要吗? 不知道大家有没有发现各个大学计算机系的培养计划,它们都有差不多十来门核心课程。其中,“计算机组成原理”却是入门和底层知识的第一课。 **为什么这样说?**想象一下,一名赛车手不知道赛车的内部构成和工作原理,你觉得他能驾驭赛车,在专业赛事中夺冠吗? 同样的道理,要成为一名优秀的软件工程师,写得一手好程序,就要了解计算机是怎么工作的,深入计算机组成原理。...

qianduanshuo的博客 3074

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Java底层知识面试题

主题 链接 Java基础知识 面试题 Java集合框架 面试题 Java并发编程 面试题 Redis 面试题 文章目录JVM内存结构class文件格式运行时数据区:堆、栈、方法区、直接内存、运行时常量池堆和栈区别Java中的对象一定在堆上分配吗?Java内存模型计算机内存模型缓存一致性MESI协议可见性原子性顺序性happens-before内存屏障synchron...

qq_26761587的博客 7660

Java程序员应该掌握的计算机底层知识

Java程序员应该掌握的计算机底层知识 背景 做为一个java程序员,虽然对计算机底层知识没有硬性的要求,但是我个人觉得掌握一些必要的计算机底层知识,对我们的java开发理解还是很有帮助的! 我的计算机思维导图 后续会持续更新补充,有兴趣的小伙伴可以了解下哦! ...

wxh_lhl的博客 291

Java程序员应该掌握的底层知识

1 相关书籍推荐 读书原则:不求甚解,观其大略,大体读明白,先拿来用,用着用着,很多道理你就明白了 底层知识相关书籍 《编码:隐匿在计算机软硬件背后的语言》 《深入理解计算机系统》 C语言:《C程序设计语言》、《C Primer Plus》 数据结构:《Java数据结构与算法》、《算法》、《算法导论》、《计算机程序设计艺术》 操作系统:《Linux内核源码解析》、《Linux内核设计与实现》、《 30天自制操作系统》 网络:《TCP/IP详解-卷一》 编译原理:《编译原理》、《编程语言实现模式》 数据库

hanzong110的博客 616

初级JAVA程序员应该掌握的Linux知识

1.学会常用的linux命令 2.学会根据日志找出问题 3.学会发版 4.理解操作系统底层思想

qq_32648593的博客 5966

计算机底层原理——汇编语言

前言 如果我们想要做高级程序员,汇编语言是我们必经之路,对我的技术提升非常非常重要,总而言之, 想要成为高级程序员,我们必须要学会汇编语言,汇编语言是非常重要的计算机底层技术,一般用于底层的编写。不懂汇编的程序员算不上一个好的程序员,充其量是一个熟练使用某种语言的工程师,而编程高手一定要研究底层。 1.语言 何为语言,就是人和人之间交流的工具。而汇编语言就是计算机的语言。 机器语言(二进制): 主流的电子计算机只认识 0和1,因为在电路中只有两种状态,要么通电要么断电,我们用数字表示这两种状态就是0和1,我

保持学习 1万+

Java程序员需要掌握的底层知识

汇编语言(机器语言)的执行过程 汇编语言的本质:机器语言的助记符 其实它就是机器语言 过程:计算机通电 ---> CPU读取内存中程序(电信号输入)--->时钟发生器不断震荡通断电--->推动CPU内部一步一步执行(执行多少步取决于指令需要的时钟周期)--->计算完成->写回(电信号)--->写给显卡输出(sout,或者图形) CPU的基本组成 PC -&g...

qq_44503377的博客 819

非科班的java程序员该如何补充计算机基础知识,需要看哪些书?

这里是修真院后端小课堂,本篇分析的主题是 【非科班的java程序员该如何补充计算机基础知识,需要看哪些书?】 java比较特殊,毕竟后端扛霸子,想要认真学好java,必须有好的计算机基础,可是为什么需要基础呢? 把这个问题弄明白,要学哪些基础知识就清楚多了。 第一个问题,10个用户使用的系统和1000000个人使用的系统,对后端来说差别大吗? 这是很多初学者弄不清楚的事情。对前...

IT修真院:初学者转行到互联网的聚集地 5481

学java要不要看底层代码_程序员是否需要学习底层知识

程序员是否需要学习底层知识?这两天每天中午午休前都会看一些《编程人生》。现在已经看了七八个人,这些人开始编程的时候,正好是计算机的起步期,所以对整个计算机的底层都比较了解。不知道这是不是这些人能够成为大师的一个必要条件,自己有没有必要在这方面努力一下。我想这也是很多程序员思考过的问题。现在分享一下我的思考,和大家一起探讨。——ps:这些人大部分在中学的时候就开始编程,而那个时候我们一般都正在为考试...

weixin_39862697的博客 783

全网最硬核Java程序员必备底层知识(一)

对于Java开发者而言,关于底层知识,我们一般当做黑盒来进行使用,不需要去打开这个黑盒。 但随着目前程序员行业的发展,我们有必要打开这个黑盒,去探索其中的奥妙。 本篇系列文章,将带你一起探索底层黑盒的奥秘之处。。

爱敲代码的小黄 2155

程序员是否需要学习底层知识

程序员是否需要学习底层知识? 这两天每天中午午休前都会看一些《编程人生》。现在已经看了七八个人,这些人开始编程的时候,正好是计算机的起步期,所以对整个计算机的底层都比较了解。不知道这是不是这些人能够成为大师的一个必要条件,自己有没有必要在这方面努力一下。我想这也是很多程序员思考过的问题。现在分享一下我的思考,和大家一起探讨。——ps:这些人大部分在中学的时候就开始编程,而那个时候我们一般都正在为...

weixin_30952535的博客 300

一篇文章了解计算机底层知识

DAY1 JAVA程序员需要掌握的计算机底层知识 微机原理 计算机组成原理 操作系统 书: 入门:《编码:隐匿在计算机软硬件背后的语言》《深入理解计算机系统》 * 数据结构与算法: -毕生的学习 leetcode C JAVA 《C Primer Plus》 《Java数据结构与算法》《算法》* 《算法导论》《计算机程序设计艺术》 操作系统:Linux内核源码解析 30天自制操作系统 网络:机工《TCP/IP详解》卷一 编译原理:机工龙书 编译原理》《编程语言实现模式》马语 数据库:SQLite源码 De

qq_30647191的博客 995

又爆新作!阿里甩出架构师进阶必备神仙笔记,计算机底层知识/数据结构与算法/网络全都有

前言 据有关数据表明,目前Java程序员这个群体的数量不减反增,行业内的竞争也是越来越严重。在同一时间入行的人,经过一段时间的学习后,差距就会显示出来。其实出现这样的原因大多数都是因为学习的方向出了问题。大多数人学Java刚开始只是为了快速就业,但是在工作了之后却没有一个好的学习路线,那些其实很重要的东西只是因为工作上用不到从而忽略掉了,慢慢的才发现自己与别人之间已经存在很大差距了! 今天这篇文章就与大家聊聊那些程序员必知必会的一些知识:计算机底层、数据结构与算法以及网络。小编(互联网雷锋)也是专门为

weixin_50205273的博客 1140
上一篇: redis深入学习笔记
下一篇: 量化交易-Tushare数据使用教程
like_java_
博客等级 码龄9年 54粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值