自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 资源 (2)
  • 收藏
  • 关注

原创 程序是怎么跑起来的——虚拟内存与动态链接

0、前言计算机的核心任务就是运行程序,而程序是如何运行的?这个问题一直困扰我很多年。网上有很多资料介绍程序如何被编译,如何被链接,然后装载,最后到OS中运行的,但都很分散,讲到的都是点,很少有串起来的;而串起来的又很少是基于64位的版本,大部分还是32位的程序。再加上讲原理的多,讲例子的少,读起来费劲,更不用说理解与记忆了。比如,对于动态链接,我相信很多童鞋跟我一样,好不容易看懂了,结果过了几...

2019-05-30 10:43:55 884

原创 人工智能——下一个增长点

我们的生活正在被信息化所深深的感染

2014-09-11 10:35:39 551

原创 称球问题的通用解法

最近看了个算法题 据说还是google面试题之一,大意是:八个球已知其中有一个是偏重的,问最少几次称出来?之前我在网上还有个更难的,大意是:13个球已知其中有一个重量异常(重或者轻),给一个天平3次称出那个异常球。 仔细想想 其实这两个题目是有紧密联系的。13球问题的解答需要用到8球问题的解法。先看看 8球与13球问题的解法: 8球:先将球8个球分成3堆:3,3,2

2009-11-13 13:06:00 1092

原创 一次讲清楚什么是指针与内存地址对齐

万字长文解释什么是内存,什么是指针

2023-04-14 11:12:41 778

原创 CPU的原子指令

普通的为何不是原子的?这跟CPU执行指令的过程有关。加一指令其实远远没有看上去这么简单,它进过了三个步骤才能完成;1、从内存loadcount变量到CPU寄存器;加入放入了a寄存器;2、再将a寄存器的值发送到累加器执行加法操作;3、将结果写回到count内存。而这三个步骤不是原子的,多线程访问会出现竞争,但是问题又来了,那么多线程为什么会竞争count变量呢?原来产生问题除开指令不是原子执行的,还有个关键的因素:变量共享多线程模型。这也是主流的线程模型:1、线程由进程创建,也叫做;

2023-04-11 20:31:21 814

原创 一图搞定CPU内存管理

先总结,图在????1、作为OS的基础,CPU能支持什么内存访问模型,OS就必须跟随;2、Intel CPU支持分段与分页两种模型;3、Intel CPU的访存模型是先分段再分页的模式,所以涉及到从逻辑地址->线性地址->物理地址的转换;这部分在CPU的MMU模块中由电路实现;4、逻辑地址为程序二进制的地址,是偏移量的形式存在,是个相对地址;这部分跟分段模型紧密相关;分段模型负责将CPU拿到的逻辑地址(主要是几个寄存器的值,GDTR,CD,DS,SS)转成一个线性地址(线性地址由OS生成

2021-03-16 14:59:54 452

原创 多线程编程那些事

多线程编程那些事先看一段代码:package jvm.valatile;public class VolatileTest extends Thread { boolean flag = true; long i = 0L; @Override public void run() { while (flag) { i++; } } public static void main(String[

2021-03-16 14:57:51 149

原创 性能调优那些事儿

性能调优那些事儿问题性能优化是软件开发中最重要的活动,也是软件工程中的深水区,可以说也是衡量一个程序员能力高低的标准。在大厂的面试中性能调优的问题也是最常见的,比如:为什么Nginx的单线程处理网络连接模型吞吐量与效率会如此之高?为什么Kafka的吞吐量会比其他的消息队列高?redisTPS/QPS比关系型数据库高出几个数量级?要想回答这些问题,需要做很多的实践与探索,而且要面对杂乱无章的、真真假假的网络文章,需要耗费大量的时间,这也就是程序员常说的“我变强了,也TM秃了”的感慨原因。虽然性能调优的

2021-03-16 14:55:48 478

原创 换个角度彻底理解红黑树

0 、前言红黑树是软件工程中非常重要的数据结构,在很多的工程领域都有它的身影,比如java的treemap、linkedhashmap,linux内核、linux的高并发多路复用利器epoll的核心数据结构就是红黑树;然而这个数据结构却不是那么容易理解,特别是网络上缺少对红黑树本质的分析,一般都是自底向上的来讲述,非常tricky,往往看了一段就不知所云,最后放弃了。但是,红黑树真的没这么复杂...

2019-05-30 10:46:29 216

原创 程序是怎么运行的

一直想写篇文章来说明在程序运行过程中操作系统都干了些什么事。下面我试着说明:首先,任何程序都是有格式的,所谓无规矩不成方圆,任何美的,精巧的食物都是精密组织的,程序也一样。我之前用的最多的是c#与java,有趣的是,当时很多人嘲笑java与c#们一直在用脚本写程序,大概在他们眼里c与c++才是真正的程序。但是,现实就是现实,其实我们都是在一个叫做虚拟机的程序下写托管代码,它掌握着程序的编译,链

2015-03-31 21:18:51 860

原创 现代软件工程的宿命

首先我说下现代软件工程与软件工程的区别一般的,软件工程是上世纪50年代

2014-10-23 16:19:56 567

原创 Library在计算机中的深意

其实学习计算机没有那么难

2014-09-17 10:22:16 3383

原创 速度——人类的一个本性

纵看整科学技术的发展,从

2014-09-17 08:41:02 586

原创 快速求出淘汰赛中轮空场次-最简单的算法

 如果快速求出N个人参加的淘汰赛中轮空的场次数。N可以使任意数,也就是任意人数参加的比赛。 例如:37个人参加淘汰赛,那么无论怎么安排比赛顺序,总是有4场比赛有运动员会轮空。  答案是:假如m个人参加比赛,N是大于或者等于m的最小2次幂。例如对于m=37来说,N就是2^6=64。那么,令s=N-m。对于m=37来说s=27。那么轮空数Result等于s的二进制表示方法中

2009-11-13 13:19:00 10794 2

C#公式编辑器支持自定义函数、阶乘求反、运算优先级

将公式解析成语法树再进行处理,支持自定义函数,支持扩展函数,支持自定义常量。

2014-11-10

C# 支持扩展的公式编辑与解析器

C# 支持扩展的公式编辑与解析器 1、可以自定义函数 2、快速解析、计算 3、可扩展 可编程

2010-12-27

空空如也

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

TA关注的人

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