“九阳神功”是怎么炼成的?

MyBatis动态SQL的九阳神功:从SQL拼接地狱到代码优雅之巅 让SQL的任意部分像乐高一样’自由拼接’”-- 自定义INSERT语句的前缀 --> < insert id = " insertUser " > INSERT INTO users ( < trim suffixOverrides = " , " > < if test = " username! 阅读详情

点击上方蓝色关注???? 有趣、有干货

前言

为什么突然想写这个话题呢?

最近有不少新关注的读者,在后台问:大学学 Java 和 C++ 哪个好找工作,学前端好还是后端好,该学 Vue 还是 React。。。

仿佛看到了自己当年的模样,所以觉得有必要单独写一篇文章,单纯以一个计算机应届毕业生的身份聊聊,我认为大学四年,计算机科班学生应该学些什么,哪些才是重点。

同样大学四年,为什么有些同学毕业就能成为大厂 Offer 收割机,各种 SP、SSP 拿到手软,有的同学明明在学校写了好多网站,项目经历满满,经历春秋招,却找到一份工作都很难。

不能说后者没认真学习,或许是用力的方向不对。

话不多说,直接进正题吧。

正文

人类的知识边界一直在不断的扩张,俗话说学无止境,这放在计算机领域也同样适用,计算机本身是一个人造科学,不属于自然科学。

每年,甚至每个月都不断有新的编程框架推出,学到头秃你也学不完,也没有必要去挨个学。

并且你会发现,很多一二线大厂内部用的东西基本都是自己搞一套的,比如服务发现、RPC、KV、DB、消息队列、日志、监控等等。

所以一般这些大厂招聘的时候基本不会因没学过某种框架而挂你,反正很多东西都是要进来重新学的。

他们会更加关注你的基础知识、解决问题的经验以及聪明度这种更加通用的能力上。

反而是一些小公司,可能会要求你必须会 Spring、Vue、Redis... 这些框架或者组件。

腾讯JD????
阿里JD????

某家外包JD????

上面分别是腾讯、阿里、某外包公司的招聘 JD(job description),显然,腾讯阿里看中的是扎实的编程基本功和快速学习能力,这意味着有培养潜力。

而外包公司就要求你会 xx 数据库、Spring 之类。不去评价哪个好,但是如果你想去 BAT,那是不是至少对照着它们的 JD 来提高自己的能力,不失为一种捷径。

在这里,我粗浅的把计算机编程领域的知识分为三个部分:

  • 基础知识

  • 特定领域知识

  • 框架和开发技能

基础知识是指不管从事任何方向的软件工程师都应该掌握的,比如数据结构、算法、操作系统。

特定领域知识就是你从事某个细分方向时需要掌握的知识,比如做游戏引擎的需要掌握图形学;做前端的需要掌握浏览器渲染原理、前端三大件;算法工程师需要更多的数学知识。

毕竟计算机各种门类挺多的,需要选个细分方向专研下去,什么都学只会什么都不精(大佬除外啦)。

一、基础知识

现在大环境比较浮躁,很少有人愿意花心思在基础上,喜欢直接学 Python 搞机器学习、写秒杀、做商城。

找工作的时候都是想看面经、总结速成。

但是作为优秀的计算机系学生的你怎么能流于各种编程框架(造框架除外),纠结学 SpringBoot 还是 SSH 呢?

把时间花在算法、基础学科上他不香吗?功利一点讲,回报反而会更大。

况且在计算机领域,很多基础的理论并不十分高深,我们努努力就可以掌握其中的核心知识。

1.1 数学

首先说明,这里把数学列出来不是为了显得高端,而是自己吃过数学的亏。

如果你是自学转行当程序员,我当然不会推荐数学,因为转行的大概率是去学 Java、前端这类,对数学基本没啥要求。

但是这篇文章主要面向的是还在大学的科班学生,这部分同学以后也许会去做算法(CV、NLP之类)、游戏引擎、信息安全编码等

这些方向对数学要求就会偏高,在计算机领域,线代、概率论、统计学这些数学分支相对比较重要,计算机本质上还是离散的。

比如在机器学习或数据挖掘中常常用线性代数来降低数据维度,很多问题最终都能化为求解线性方程组。

所以为了避免以后想走这些方向却被数学卡住,在大一、大二上数学课的时候就好好的学一下。

书到用时方恨少,不要现在以为没用处就不好好学,等你需要的时候,就知道后悔了。(默默流下了不学无术的眼泪┭┮﹏┭┮

什么?你说以后肯定做开发方向?

那的确可以把数学优先级放后面一点,用得确实不多,不过上数学课的时候总该认真听下吧,拿个高绩点也是百利无一害嘛。说不准哪天你又想加入算法内卷大军呢?

1.2 C语言

你也许会很疑惑,这里明明说基础知识,为什么要把一门编程语言单独列出来呢?

因为在我看来,没有比 C 语言更适合用来理解计算机系统了。

我们后面将会提到的操作系统、体系结构 这些东西非常适合用 C 语言去理解或者去实践。

并且 C 语言本身的语言特性非常少,但是想学好又是不容易,很多人都觉得 C 语言难,难在哪里呢?回想了一下我大一时的感受:

  • 简陋的标准库,几乎没有可用的数据结构和算法,什么都得自己来

  • 指针很难理解和使用

  • 需要了解汇编、链接、装载、内存等才能把 C 语言用好

不巧的是,这些东西正是计算机系统知识的一部分,所以用 C 语言作为学习计算机系统知识是最有效率的方式。

真的很难想象用 Java 或是 Python 去给别人讲解内存,因为这些语言抽象程度都比 C 语言高,意味着离计算机系统也就越远。

在 TIOBE 编程语言排行榜上,C语言几乎永远占据前三位,其地位自然毋庸置疑。

TIOBE-2020排行榜

而且几乎你开发中用到的很多东西都是用C语言编写的,Linux、Nginx、Redis、MySQL、Git......或许你会想要探究下原理,阅读点这些开源软件的源码,那么 C 语言也是你必备的瑞士军刀。

深入学习 C 语言,能够了解计算机底层的执行原理,是理解程序运行机制的绝佳语言,无出其右。

在这里,不得不引用对C语言最经典的总结:

任何比C语言更低级的语言,都不足以完整地抽象一个计算机系统;任何比C高级的语言,都可以用C来实现。

这真是极高而中肯的评价!

所以对于计算机科班来说,不管你是做前端还是后端,算法还是开发,C 语言都建议你好好学习。这是无关方向的一门语言,就是基础!

1.3 操作系统

我们编程的 IDE、写出来的程序全部都需要运行在操作系统上,说操作系统是计算机软件的基石也不为过。

程序运行起来就需要创建进程,这涉及到操作系统的进程管理;写程序需要定义变量、存储数据吧,这又涉及到内存,对应内存管理;有时候我们还需要读写文件,这又离不开和文件系统打交道;你需要学习使用锁、条件变量、临界区来保证程序并发执行时不会错乱。

而读写文件、分配内存这些又离不开系统调用(System call)。

并且当你真正做起工程就会发现,很多问题是和操作系统紧密相关的,不理解操作系统,你连问题的原因都分析不出来。

比如前段时间我们出现的在基于协程(libco)的框架下,使用多线程的锁去做同步互斥偶发死锁,后来分析才发现原因:

由于协程是应用层实现的,一个线程内多个协程对于操作系统是感知不到的:

协程模型

那么当一个协称 A 上锁后发起网络 IO 请求,这个时候会被切换到另外一个协程B,而协程 B 又去请求这个锁。

那么这个时候操作系统会认为这个锁已经被上了,因此会将协程 B 对应的线程挂起到等待队列,这样的话就导致协程 A 永远无法运行,也就无法释放锁,导致死锁。

解决的方法也很简单,就是将锁设置为可重入锁,可重入意味着同一个线程多次去请求同一个锁不会导致挂起。这样当协程 B 再去请求锁的时候,操作系统就会认为协程 B 所在的线程已经持有这个锁了,直接返回,继续执行。

总之,我们写程序每时每刻都在和操作系统交互,没有理由不学好。

1.4 编译原理

编译原理可能是我们平时接触得最少的了,大家也许会觉得自己又不用去造新的编程语言,学编译原理干啥。

学好编译原理有啥用?

你会站在更高的角度去审视这些编程语言,看到的不再是表面的语法,更会想到语法背后的实现。

这种感觉很透彻,就像搞懂了操作系统、体系结构你会明白一个程序从双击鼠标开始,到底是如何被运行起来的,这种掌握一切细节,透彻的感觉,真的很奇妙,不信你去试试。

说人话!

那学了编译原理你能干啥?

当你学完有限状态机以后,你会发现以前觉得很牛逼正则表达式似乎自己也能用 DFA、NFA 实现一下了。状态机的思想在编程中很多地方都用得上。

比如解析 HTTP 协议,如果没学过状态机思想,你可能会一行行的 if/else 去做解析,这里最麻烦的地方在于,if/else 需要提前将 HTTP 头部字段都接收到再来判断,而我们知道 HTTP 基于 TCP,而 TCP 是流式传输,所以你很有可能是几个字符一组组接收到的,这个时候用 if/else 写出来就很难看了。

而用状态机编写起来代码就会非常优雅。状态的转移是由规则驱动的,接收到一个字符就判断一个,非常的方便。

继续学完语法分析,你会掌握递归下降分析这样非常重要的思想,你可以使用递归下降快速的实现四则运算计算器。

如果不用递归下降你可能需要先中缀表达式转后缀,然后求值,这是我们大一数据结构课写的,当时用栈写的,有点麻烦。后来学完编译原理,又用递归下降重写了一遍,区区几十行代码遍搞定。

还有一类场景在实际开发中的用的很多,比如淘宝、京东这样的电商,它们的营销规则有很多,比如满减、直减、跨店等等,这样的规则是不可能写死在代码里的。

那是怎么做的呢?

一般会实现一个配置系统,并设计一个DSL(领域特定语言)来表达这些规则,将规则直接配置到系统中,这样可以非常方便的修改,那么如何在代码里去解析 DSL 定义的规则呢?这就需要为 DSL 写一个语法解析器,这里就会用到语法分析的方法。

DSL(Domain Specific Language),是一种用于某个特定领域的程序设计语言。这种特定于某个领域是相对于 C、C++、Python 这种通用语言而言的,通用语言可以在各个领域使用,我们熟悉的大多数程序设计语言都是通用语言,它们都是图灵完备的。

像我们平常经常使用的 JSON、SQL、HTML 这些都算是一种 DSL,你甚至可以尝试用递归下降去写一个 JSON、XML 解析器,这比写电商网站更有价值的。

继续往下学你会了解到抽象语法树 AST 如何生成、如何转化为中间代码、如何对中间代码优化、最终又是怎么生成机器指令的。

你会看到贪心算法在寄存器分配中的应用,也会看到图论中的可达性分析又是如何实现死代码消除。

IDE上面那个绿色的编译按钮对你不再是黑魔法。

为啥点一下就能生成可执行的程序?

你写的英文字母又是如何变成一个个二进制指令的?

学完编译原理,这些通通不是问题,妈妈再也不用担心你的学习~

当然完成一个像 GCC、Clang 这样的编译器难度太高太高,我们学习编译原理的目的也不是去造这样的轮子,而是为了更好的理解和运用编程语言。

1.5 体系结构&组成原理

上面说的都是软件层面,体系结构则是关于计算机是如何工作的,你会了解到典型的存储程序计算机是怎样运转的。

记得南大有个老师说过 “我们不是学习使用计算机的,而是学习如何造计算机”,虽然造计算机有点夸张,但是至少我们得了解下计算机的实现原理,了解下代码是怎么被 CPU 执行的吧?不然其实你会很困惑,明明一堆英文字母,怎么在 CPU 这种电路上跑起来的,我大一学 C 语言就百思不得其解,直到后来学了组成原理和数字逻辑。

我们说计算机中一切都是 0、1,0、1 又是通过高低电平来表达的,通过与、或、非等逻辑门电路来表达二进制的数值运算,再将这些简单的电路集成在一起,就形成了 ALU 等具有运算能力的处理器。

你会看到一条指令是如何被CPU执行的,CPU 从内存或 Cache 中取出指令,放入指令寄存器,并对指令译码。译码就是按照指令的编码规则,将指令拆分成一系列的微操作和操作数。然后发出各种设备控制指令,执行微操作。这样就完成一条指令的执行。

我们说学完编译原理,能够明白写的英文代码是如何被变成二进制指令的,学完操作系统能搞懂二进制程序是如何被链接在一起,又是如何被操作系统加载、执行的。而组成原理则会告诉你二进制指令是如何控制 CPU 跑起来的,我们的操作系统本质上也是一个二进制的程序。

当你理解了计算机存储层次结构,理解了多级 Cache,你就会通过优化数据访问方式来编写出速度更快的程序。

你会学到底层体系结构对 C 这些语言的栈帧和参数传递的支持,参数是如何被传递给另外一个函数的?函数的返回值又是如何拿到。

这是学习组成原理对于写代码的意义。

学这些到底有什么意义?

你会完整的看到写的代码如何变成二进制指令,又是如何去控制各种门电路,最后变成屏幕上花花绿绿的程序的(当然这里可能还需要学习显示器的原理),这就是我们常说的“基础”和“原理”。

并且计算机体系结构中的很多思想,是能够广泛运用于现代软件开发的,比如 CPU 的多级 Cache 思想,就是我们现在服务器开发中提高并发度常用的缓存技术,包括缓存的替换策略等等。

当计算机对你不再是黑盒,你了解写下的代码到执行的每一步,而这也将成为你以后的核心竞争力,作为科班毕业生不应该只会使用 Java、Redis、Mysql、Spring 来写各种网站。

如果读者里有半路转行或者从培训班出来的,也希望你们能够抽出空余时间去补补这些基础课,这会让你在编程这条路上走的更远和更稳。

1.6 数据结构与算法

为什么把算法放到最后来讲,是不重要吗?相反,它太重要了,所以才让它来压轴。

如果要问我大学什么最后悔?那肯定是没有从大一就开始好好学算法,去打 ACM。

现在还在大一、大二的同学还不抓紧机会,别等到以后来后悔。当然,不打 ACM,我们也是能够学好数据结构和算法的。

数据结构和算法你能在任何计算机领域里看到,比如在编译原理中寄存器的分配会用到贪心,死代码检测与消除会用到图论里不可达的知识;操作系统进程、线程调度会用到多级队列和调度算法;组成原理中 Cache 的替换会用到 LRU、FIFO 等算法;开发必备的数据库也离不开 B+ 树、LSM 等数据结构和查找算法。

很多时候我们需要的算法都被封装到编程语言的基础库里了,以至于很多同学会觉得算法离我们太远,其实不是的。

如果不学习算法,连什么时候用 Map(红黑树实现)、什么时候用 HashMap 都分不清。

所以学习算法有助于我们根据应用场景选择最合适的数据结构。

日常开发中也一定离不开算法,比如小北最近工作中涉及的某种嵌套 TLV(Tag-Length-Value)结构编码的解析,就需要用到递归、多叉树等知识。如果不学习算法,那么程序中只能见到大量的 if/else、while/for。。。

可以说不会算法的工程师一定不是一个优秀的工程师。

1.7 为什么我不说计网、数据库等

很多人喜欢把计算机网络、数据库原理这些也归为计算机基础来,我当然也认同,因为一个知识结构完整的计算机科班学生,应该了解这些知识。

但是我个人是觉得计算机网络、数据库无非就是建立在操作系统、编译原理、组成原理之上的应用层软件。

什么是数据库?没有数据库之前你会用文件去存储数据,但是不方便查找、修改等,数据库只是提高了这个过程的效率。

网络干什么的?网络就是让不在同一台电脑上的程序互相通信,本质上就是进程间通信的手段。

如果你只是开发单机工业软件,甚至真的可以不学网络,只是由于现在大多数程序员都是在互联网公司工作,所以不管前后端,都离不开和HTTP等网络协议打交道。

再次重申:不是计网、数据库不重要,只是我认为它们属于构建在操作系统之上的软件,不划在基础之列。

二、领域知识

这个我不敢说太多,因为各个领域我也不太懂。只简单提一点,抛砖引玉罢了。

如果你想去腾讯、网易做游戏引擎开发,那么图形学一定是你绕不开的知识,此外你还得学习渲染管线、着色器、物理、光照等等。

如果你想去 PingCap 这样的公司做分布式存储,那么分布式理论知识一定是你绕不开的关口,包括 CAP 定理、Paxos 算法、Raft 算法、ZAB 协议等等。

如果你想写一个数据库,那么你需要去了解磁盘、索引实现、SQL 解析(编译原理)、事务、如何用 MVCC 解决读写冲突等等一大堆的东西,还得了解一大堆编程语言层面的东西,比如锁、信号量、并发编程技巧,不得不说造数据库是一个脏活也是一个累活。

更进一步你想去做分布式数据库,那可能还得去学习数据分片的知识,查询任务如何做,是集中做,还是将逻辑下推给各个节点,如何实现分布式事务等等。

你说你只想去大厂 CRUD?没毛病,老铁!

那你得熟悉一门编译型语言(C/C++、Java、Go),理解语言部分底层原理,比如 C++ 你得看看 STL、看看对象模型吧,你不懂什么虚函数表、智能指针还想去腾讯写 C++? Java 的你得背背 JVM,什么垃圾回收算法吧,你不看看ConcurrentHashMap 好意思说你是做Java的?

咱CRUD的对象是数据库吧?那不得学学怎么才能把数据库用好。用户通过 HTTP 访问我们得服务,总得了解 HTTP吧?顺带着不看下 TCP 三次握手、四次挥手你好意思说是学计算机的?

用户把钱、信息放咱们这,总得保证用户数据安全吧?那 XSS、SQL 注入、CSRF 这些常见的 Web 攻击手段你总得了解吧?HTTPS、RSA、签名、数字证书这些安全手段总得知道吧。

双十一流量太大,老板还让你必须顶住,那你总得了解下缓存、异步、消息队列、NoSQL 这些千万 QPS 必备的大杀器吧?

看看!要想做好CRUD也不是那么容易滴。

(上面这段只是换一种方式把做后端的同学要学的知识写出来,不是吐槽更不是调侃,纯属娱乐。)

技能

这就很多了,包括 VSCode、Jetbrains 全家桶这些 IDE,文档编写 Markdown、Git 等版本管理工具。SSH 远程登录、端口转发,Ngrok 内网穿透等等这些提高你开发效率的工具,都算是技能,这个没啥好说的,平时用到多学习多积累就好了。

我只提一点,尽早使用 Linux、类 Unix(Mac)作为主力开发电脑。我大二的时候,就是看了王 ying 的那篇《完全用 Linux 工作》,直接买了个 SSD 套上 U 盘外壳,做了一个启动盘,后来用了将近一年的 Ubuntu,只有在选课、提交作业等需要用的 IE 浏览器的时候才会打开 Windows(这里不得不吐槽学校老古董网站!)

当然了,我也不是狂热的 Linux 爱好者,只是单纯觉得做开发的话,离不开各种环境安装、命令行的使用,这点上面类 Unix 系统带有天然的优势,谁用谁知道!

总结

写完才发现,这篇文章连篇幅都是「基础 : 领域知识 : 技能」 接近 7 : 2 : 1。

这也是我推荐你在大学期间分配学习时间的比例,至少学习基础知识的时间不少于 50%,当然,这些东西你都学完了那可以去找找感兴趣的方向专研一下。

千万不要大一、大二一上来就扎进 Java Web、Python 爬虫这种东西,这些可以学,但不是重点。

这篇文章由于篇幅限制,没有写到具体该如何去学,有哪些好的资料,我准备把这个单独再写一个 《How 篇》,持续关注我哟~

那么如何检验学得如何呢?

想必你一定听说这个计网面试题:“从 URL 输入到页面展现到底发生什么?“

这个问题换个表达就是「一个数据包是如何发送到另外一台电脑的」。

如果你能完整的说出整个过程,那么计网你一定是学懂了!这就是为啥面试这么喜欢问这个问题的原因。

那么我们依葫芦画瓢提一个问题

“从代码被写下到程序运行起来到底发生了什么?”

这个问题回答得越详细越好,基本上能说清楚了,你就理解了编译原理、操作系统、组成原理这三座大三。

唉,当年要是有这么个贴心学长告诉我这些,也不至于在 Andorid 开发、Java Web、Python 爬虫这些玩大半年啊。。。

不过还好后来自己意识到了基础的重要性,开始学汇编、重学C、搞 mini os、看 Linux 内核实现原理,最后成功的把头发掉了一把。。。

最后想送给你一句我挺喜欢的话:

万丈高楼高楼平地起,勿在浮沙筑高台。


漫画:兄弟,今晚又得熬个通宵了!

从月薪三千到月薪三千

大牛是怎么练成的?又是怎么赚钱的?

漫画:量子计算为什么这么牛?

架构师劝退指南

Java每次遇难,总会有大神拯救

程序员的宿命

芯片战争70年,真正的王者即将现身!

干掉软件开发的最大怪兽:狼人!

宇宙第一IDE到底是谁?

HTTP Server :一个差生的逆袭

如何降低程序员的工资?

程序员,你得选准跑路的时间!

两年,我学会了所有的编程语言!

Javascript: 一个屌丝的逆袭

我是一个线程

TCP/IP之大明邮差

一个故事讲完Https

CPU 阿甘

如果编程语言是一门武功绝学 学习编程与武功绝学 武侠小说中,各路侠客绿林好汉都是从基本功开始一招一式学起,掌握了足够多的招式后,加之勤学苦练,量变引起质变,会有一天打开任督二脉顿悟出这些招式背后的哲学逻辑,成为一代宗师。在编程的学习过程中,我们何尝不是从一招一式的函数、语法、特性等学起,掌握了一门编程语言后,再学习另一门语言就会快很多,如同拥有内功后,习得其他武功也会轻松很多。 如果编程语言是一门武功绝学,各语言分别是哪门武功绝学呢? 汇编语言 汇编语言 - 易筋经 汇编语言是计算机提供给用户的最快最有效的语言,也是能够.. 阅读详情

相关推荐

计算机自学宝典:九阳神功全面掌握

在软件开发的实践中,项目案例分析是提高实战能力和学习新技术的重要手段。它涉及理解项目背景、需求分析、技术选型、代码实现、测试验证、部署上线以及后续的维护和优化等全过程。接下来,我们通过一个简化的项目案例,来具体分析和总结这些实战技巧的运用。假设我们要开发一个在线简历网站,该网站允许用户创建和管理自己的在线简历,并且支持求职者浏览和搜索简历。需求分析- 确定用户故事,例如用户能够创建个人资料、上传简历、编辑和删除简历等。

weixin_31139479的博客 829

计算机知识大全,零基础入门到精通,收藏这一篇就够了

网络安全产业就像一个江湖,各色人等聚集。相对于欧美国家基础扎实(懂加密、会防护、能挖洞、擅工程)的众多名门正派,我国的人才更多的属于旁门左道(很多白帽子可能会不服气),因此在未来的人才培养和建设上,需要调整结构,鼓励更多的人去做“正向”的、结合“业务”与“数据”、“自动化”的“体系、建设”,才能解人才之渴,真正的为社会全面互联网化提供安全保障。

wananxuexihu的博客 2834

Flink on k8s 环境搭建(一)

Flink on Yarn的环境搭建过程中,需要进行配置较多,且需要搭建zookeeper Hadoop Yarn 等相关组件,安装流程比较复杂,集群出现问题重新安装的流程也比较复杂,且Yarn的3个节点中 只能起了 3个resourceManager和1个NodeManager,Flink 作业申请资源时只能 向NodeManager的节点申请资源,整体有资源瓶颈的隐患(后继flink作业会越来越多),现在尝试进行Flink on k8s 的环境搭建。

wangqiaowq的博客 3413

计算机基础知识(持续更新)

计算机病毒是指编制或者在计算机程序中插入的破坏计算机功能或者毁坏数据,影响计算机使用,并能自我复制的一组计算机指令或者程序代码。RAM:随机存取存储器,也叫做主存。是与CPU直接交换数据的内部存储器。这种存储器在断电时将丢失其数据,故主要用于短时间使用的程序。ROM:即只读存储,是一种只能读出事先所存数据的固态半导体存储器。

weixin_41172713的博客 4165

从零开始掌握Simscape Multibody:机械系统建模与仿真入门

本文为机械系统建模与仿真入门指南,详细介绍了如何从零开始使用Simscape Multibody。通过构建曲柄摇块机构的实战案例,系统讲解了刚体、关节、约束等核心模块的使用,以及模型验证、参数化设计和多领域系统集成等进阶技巧,帮助工程师和学生高效进行虚拟设计与测试。

weixin_29229261的博客 312

手把手教你用Verilog在FPGA上驱动0.96寸OLED(I2C协议,含完整代码和字库)

本文详细介绍了如何使用Verilog在FPGA上通过I2C协议驱动0.96寸OLED显示屏,包含完整的硬件连接指南、I2C协议解析、Verilog代码实现及字库设计。从初始化序列到字符显示引擎,提供可立即上手的解决方案,适合嵌入式系统开发者快速实现OLED显示功能。

weixin_29655587的博客 328

黑马程序员_java语言基础_概述

——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-01.01_计算机基础知识(计算机概述) java语言基础_概述

jiao142857的博客 2735

74.9008深度刷机原理|高通QPST/Firehose底层刷写协议详解

移动设备刷机与底层维修技术指南 本文为移动设备维修人员和高级玩家提供全面的刷机与底层维修技术指南,涵盖高通、联发科和苹果A系列芯片的主要操作。 主要内容 核心操作:Bootloader解锁、Fastboot刷写、EDL深度修复、iTunes DFU模式恢复和分区表重建 适用场景:系统故障修复、底层损坏恢复、安全限制解除、系统降级和深度硬件维修 关键技术:详细解析刷机协议栈层级、关键分区作用和刷机安全机制 操作步骤: 环境搭建与驱动安装 Bootloader解锁(以小米为例) 高通机型系统刷写 苹果设备DFU

2601_95651806的博客 205

计算机基础知识(免费、全面)

查看目录 网络基础知识* 计算机基础知识1* 计算机基础知识2# 计算机病毒* 病毒:人为编制的程序,特点有隐蔽性、传染性破坏性等。传染性是病毒的基本特征,破坏性是目的* 按感染的方式分为:引导型病毒、文件型、网络、复合型、宏病毒、外壳型* 杀毒软件:KV300、KV3000、Kill、AV95* 引导型病毒感染引导区和主导区,如:大麻病毒、小球病毒、2708病毒。引导型病毒存放在引导区中* 文件病毒:大多是可执行文件,如:黑色星期五、CIH(硬盘/BIOS数据丢失)。 复合病毒:感染文件和引导区* .

MrFlySand的博客 1万+

蓝牙调试抓包工具--nRF Connect移动端 使用详细总结

摘要: nRF Connect移动端是一款功能全面的蓝牙低功耗(BLE)调试工具,支持设备扫描、多设备连接、服务/特征值查看及数据读写操作。核心功能包括实时数据通信(读取/写入/通知)、设备固件更新(DFU)以及高级工具如自动化测试和信号分析。兼容Android 4.3+和iOS设备,适用于开发调试(如ESP32/nRF52)、设备管理和数据分析。需注意设备兼容性问题(如旧安卓设备可能需关闭连续扫描),并确保数据类型匹配。配套工具链包括nRF Toolbox和nRF Connect SDK,是BLE开发的必

AIoT深度探索者 | 嵌入式系统架构师 深耕物联网(IoT)与人工智能(AI)融合技术,聚焦​​边缘计算、图像开发、低功耗通信协议​​,致力于智能硬件,关注我获取最新技术文章信息与海量资源~ 2390

芒果YOLOv12改进90:检测头篇之ShareSepHead:即插即用|原创新颖共享Sep检测头,更省参数量,更高效,打造新型YOLOv8检测器,精度高效涨点

芒果YOLOv12改进90:检测头篇之ShareSepHead:即插即用|原创新颖共享Sep检测头,更省参数量,更高效,打造新型YOLOv8检测器,精度高效涨点

包括YOLOv5、YOLOv7、YOLOv8等模型改进 346

计算机系统 基础知识点汇总,超全!!!

计算基础知识点合集来啦!!! 更多知识请关注我!!! 第一章 计算机系统 第一章 计算机系统1.概述1.1.1 计算机的发展历程1.1.2 计算机体系结构1.2 计算机硬件系统1.2.1 中央处理器(central processing unit)1.2.2 计算机的基本工作原理1.计算机指令格式2.计算机指令的寻址方式3. 计算机指令系统4. 计算机执行指令的基本过程5.指令执行的时序1.2.3 存储器1.RAM存储器5. 存储器的层次化结构1.2.4 数据的内部表示1.进位计数制及其相互转换2.定点数的

weixin_46486131的博客 7万+

项目实战第四十七讲:易宝支付对接详解(保姆级教程)

本文是项目实战第四十七讲,易宝支付对接详解。1、xxl_job 接入fix;2、支付接口,将thirdOrderNo赋初始值,并将数据库中third_Order_No设置为非空;3、性能提效:将深拷贝改为字符赋值,提升程序性能;先不改动。

Jet_qi的博客 2680

听风辨器,神功护体——IT运维人员的九阳神功(中)

今天恰逢2020年下半年第一天。2020太难了,上半年忙着见证历史,人人都不易。希望大家保持乐观,下半年一切都会好起来! 言归正传,继续说运维。修炼至此,大家都已具备九阳神功前三重的功力,浪迹IT江湖三十年的融哥带大家继续乘风破浪、精益求精。 页面打不开、系统卡顿、应用宕机……每天IT运维人员被各种飞来横祸困扰,如六大派狠人围攻光明顶。要想搞定业务运行过程中的种种问题,你必须变成一个小号的魔教教主,打通任督二脉、调动全身功力,方能转危为安,世界和平。 九阳神功第四重:缩骨大法 他心中只一个念头:“这小子

ifusionskye的博客 959

从零开始跑通3DGS教程:(五)3DGS训练

本文介绍了在Docker环境中训练3DGS(3D Gaussian Splatting)的方法,属于《从零开始跑通3DGS教程》系列文章的第五部分。主要内容包括:Docker环境准备(基于pytorch/pytorch:1.13.1-cuda11.6-cudnn8-runtime镜像)、容器内conda环境配置(安装必要依赖和3DGS相关组件)、以及训练命令执行步骤。文章提供了详细的命令行操作流程,帮助读者快速搭建3DGS训练环境。适合在Linux系统、Nvidia GPU环境下使用,完整教程可参考系列文章

诺有缸的高飞鸟的博客 1757

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

内外双修,人剑合璧——IT运维人员的九阳神功(大结局)

继续运维的话题。软件硬件日益复杂,运维人员压力山大,那么几十年以后,数字化世界会变成什么样子呢?看张图: 这是电影《异型:契约》的画面,飞船Covenant搭载2000名乘客飞往外星球,行程几十年,只有一个机器人船员。这是人类的理想,在未来世界里,庞大的系统不再需要人肉运维,硬件和软件都能自己照料自己,出了什么故障自我诊断、自我修复,世界大同。可是现实却是: 好吧,理想还是要有的,早晚能实现。为了理想,我们要努力再努力! 浪迹IT江湖三十年的融哥,今天带大家修炼九阳神功的最高三重。 九阳神功第七重:诸毒不

ifusionskye的博客 1041

jre9下载 jdk9

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

程序员的九阳神功,学会逆天改命!

【此文章转自乐字节】 编程中的九阳神功,看程序员怎样扭转乾坤! 现在有一种论调就是说基础知识就像是编程中的九阳神功,掌握好了,就可以内力大增,成为绝顶高手。 其实基础知识既没有那么不堪,也没有那么神乎奇迹。 计算机安全行业有一个著名的词叫做“脚本小子”,指的是只会使用一些别人的工具扫描一些别人已知的漏洞的“黑客”,“脚本小子”常常从某些网站上复制脚本代码,然后到处粘贴,却并不明白其中的方法与原理,因而“脚本小子”通常形容一些基础不扎实的入门黑客,“脚本小子”和“黑客”是计算机安全领域相去甚远的两类人群,安

weixin_53173799的博客 513

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

修炼技术的九阳神功,让你从模式小白轻松进阶为模式大神

本书以作者与虚拟女友(小璐)在生活中遇到的各种问题作为主线,引出设计模式的各种功能、用途,以及解决方法,系统介绍了23种设计模式,根据具体的实例形象化、具体化地进行了代码的编写和详细讲解,让那些本来对设计模式不太了解、一知半解、只有概念的读者,彻底了解和掌握常用的设计模式使用场景及使用方式,并掌握每个设计模式的UML结构和描绘方式。在软件开发过程中,我们经常会遇到一些复杂的问题,比如如何设计一个灵活、可扩展的系统,如何管理代码的复杂性,如何在多个类之间保持良好的协作等等。设计模式的重要性不言而喻。

悟纤学院 339

设计模式(一)--编程界的九阳神功

在学习设计模式前,我们先要弄明白一个问题,那就是为什么要学习设计模式?在JAVA领域,大部分使用的是贫血模型,业务逻辑都是service之间的调用,类似于函数式编程,其他高深的东西都封装于框架中,平时能用上设计模式的地方确实不多,似乎学习了也没啥用。 我觉得设计模式特别像九阳神功,练成「九阳神功」后,内力自生速度奇快,无穷无尽,普通拳脚也能使出绝大攻击力,学习了设计模式,虽然还是普通的功能,却在稳定性,可维护性上大不相同了。 九阳神功是融会贯通武学体系,练成后天下武学皆附拾可用。学会了设计模式,再看各种

Cloud的专栏 4691

修炼你的《九阳神功》行走江湖

据香港文汇网10月30日报道,武侠小说泰斗金庸(原名查良镛)当天下午病逝于香港养和医院,享年94岁。消息一经发布,震荡了两岸三地。 从1955年使用笔名“金庸”连载武侠小说处女座《书剑恩仇录》开始,到1972年完成《鹿鼎记》后封笔,金庸总共写了15部脍炙人口的武侠小说...

chuitong9165的博客 281

玩转流量,天下无锅——IT运维人员的九阳神功(上)

今天跟大家聊聊IT运维。 我们的生活和工作,越来越依赖于IT系统,无论支付、办公、吃穿住行……离了互联网和软件,一天也玩不转。当然,与前端应用日益丰富对应的,就是IT系统后台的日益复杂、运维工作的日益困难。可以说,IT运维工作支撑着社会运转的基础,离每个人都不遥远。 如果你是某单位的IT运维人员,那么下面这些状况一定不陌生: 周一,网络部门做了负载均衡的升级,业务部门反馈偶尔出现业务响应慢,是升级的问题还是应用系统的问题? 周三,文档系统进行了硬件迁移,用户发现文档系统的页面打不开,是网络问题?服务器问题?

ifusionskye的博客 909

程序员如何修炼自己的九阳神功

“焚我残躯,熊熊圣火,生亦何欢,死亦何苦”,明教被六大派围攻,张无忌在光明顶一站成名,武功也是基本上无人能敌,凭借着九阳神功,快速的学会了乾坤大挪移;在和少林寺过招的时候又快速的学会了少林龙爪手。这就是九阳神功护体,天下无敌。 在这个非武侠的时代,技术更新的实在快,Java8还没搞明白,Java11就来了,学习的速度永远跟不上技术的迭代。那么对于Spring Boot官网快速的更新迭代,如何修炼...

kun blog 689

编程基础知识真的是九阳神功吗?

作者|大飞码字来源|大飞码字(ID:BigFly1024)有不少读者咨询过基础知识相关的问题。有问怎么能够学好基础知识,有问基础知识到底有什么用,也有直接过来喷我,说工作只有CRUD,...

优快云资讯 6173

程序员界的九阳神功与独孤九剑

想写这篇文章已经很久了,可以说它是我很早以前就思考过的两个理念之一(另一个是"金字塔理论"),希望读过本文的人多多提出你们不同的看法,共同分享。

lycos的六度空间 2470

《九阴真经》正本和九阳真经

《九阴真经》正本上卷 “天之道,损有余而补不足,是故虚胜实,不足胜有余。其意博,其理奥,其趣深,天地之象分,阴阳之候列,变化之由表,死生之兆彰,不谋而遗迹自同,勿约而幽明斯契,稽其言有微,验之事不忒,诚可谓至道之宗,奉生之始矣。假若天机迅发,妙识玄通,成谋虽属乎生知,标格亦资于治训,未尝有行不由送,出不由产者亦。然刻意研精,探微索隐,或识契真要,则目牛无全,故动则有成,犹鬼神幽赞,而命

糯米糊糊的专栏 1万+

九阳真经

《九阳真经》和《九阴真经 》可以说是金庸小说里最神奇也是最厉害的两本武功秘籍。  《九阳真经》在金庸小说中第一次出现是在《神雕侠侣 》最后一回中,觉远大师 凭借此书震惊当时的绝世高手“东邪,西狂,南僧,北侠,中顽童 ”等人,但经书也被尹克西 带到了昆仑山 中;在九十多年之后,张无忌 在昆仑山的白猿腹中得到经书,并凭借此经威震武林成为一代大侠。  《九阳真经》是达摩老祖手书在《楞伽经 》的夹缝中

如是所来的专栏 8196
上一篇: 漫画:兄弟,下班别走啊,一起填坑!
下一篇: 漫画:如何才能搞定老板?
码农翻身
码农翻身 《码农翻身》作者 《码农翻身》作者
博客等级 码龄8年 3万+粉丝 1084原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值