自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 分治算法

// "static void main" must be defined in a public class.public class Main { public static void main(String[] args) { int[] a = {7,1,4,9,7,6,5,3}; SortArray(a); System.out....

2019-05-31 18:05:51 160

原创 INSERTION-SORT

INSERTION-SORT升序FOR J = 2 TO A.length key = A[j] i = j - 1 while i > 0 and A[i] > key A[I + 1] = A[I] i = i - 1 A[I + 1] = key Next降序for j = A.length - 1 to 1 step -1 key = A[j]...

2019-05-29 22:49:37 655

原创 套接字接口

套接字接口(socket interface)是一组函数,他们和Unix I/O函数结合起来,用于创建网络应用。大多数现代系统上都实现套接字接口,包括所有的Unix变种,Windows和Macintosh系统。从Unix内核的角度来看,一个套接字就是通信的一个端点。从Unix程序的角度来看,套接字就是一个有相应描述符的打开文件。因特网的套接字地址存放在如下代码所示的类型为sockaddr_i...

2019-04-23 12:19:06 1928

翻译 DNS

#include "csapp.h"/*Internet address structure*/struct in_addr{ unsigned int s_addr; /* Network byte order(big-endian)*/}/* DNS host entry structure */struct hostent{ char *h_name; /*Official d...

2019-04-23 11:36:07 178

原创 虚拟内存

虚拟内存诞生的原因:在系统中运行的进程共享CPU和主存资源,当运行的进程太多,有限的主存资源和过多的主存需求就会造成矛盾,会存在饱和值。造成一些进程无法正常工作,而且内存还很容易出错,当一个进程在另一个进程的存储空间中写入内容时,会造成不可知的错误。为了更好的管理内存资源,虚拟内存必须为每个进程提供一个大的(确保进程可以顺利的运行),一致的(我们应该对需要进行运行的进程一视同仁)和私有的(确保...

2018-09-30 10:40:29 1090

原创 三类目标文件

可重定位目标文件 -其代码和数据可和其他可重定位文件合并为可执行文件 . 每个.o文件由对应的.c文件生成 . 每个.o文件代码和数据地址都从0开始可执行目标文件 -包含的代码和数据可以被直接复制到内存中并执行 -代码和数据地址为虚拟地址空间中的地址共享的目标文件 -特殊的可重定位目标文件,能在装入或运行时被装入到内存并自动被链接,称为共享库文件。...

2018-09-16 15:07:59 480

原创 链接过程的本质

链接的本质三类目标文件目标文件中目标代码举例目标文件的格式标准ELF标准格式的两种视图//一个C语言程序举例---------------------------main.c-----------------------------int buf[2] = {1,2}; //全局变量void swap();int main(){ swap(); ret...

2018-09-16 11:20:47 395

原创 链接器的由来

原始的链接器概念早在高级编程语言出现之前就已经存在了最早的程序员 用机器语言编写程序,并记录在纸带或卡片上

2018-09-12 23:48:09 241

原创 可执行文件生成过程概述

预处理预处理命令-$gcc -E hello.c -o hello.i-$cpp hello.c > hello.i处理源文件中以“#”开头的预编译指令,包括:删除“#define”并展开所定义的宏处理所有条件预编译指令,如:“#if”,“#ifdef”,”endif”等插入头文件到“#include”处,可以递归方式进行处理删除所有的注释“//”和“/*...

2018-09-12 22:22:52 1904

原创 1.3.1 隔离级别

隔离性其实比想象的要复杂。在SQL标准中定义了四种隔离级别,每一种级别都规定了一个事务中所做的修改,哪些在事务内和事务间是可见的,哪些是不可见的。较低级别的隔离通常可以执行更高的并发,系统开销也更低。 每种存储引擎实现的隔离级别不尽相同。如果熟悉其他的数据库产品,可能会发现某些特性和你期望的会有些不一样。 下面简单的介绍一下四种隔离级别:READ UNCOMMITTED(未提交读) 在...

2018-09-12 19:28:21 157

原创 7.6 符号解析

链接器解析符号引用的方法是将每个引用与它输入的可重定位目标文件的符号表的一个确定的符号定义关联起来。对那些和引用定义在相同模块中的局部符号的引用,符号解析是非常简单明了的。编译器只允许每个模块中每个局部符号有一个定义,静态局部变量也会有本地链接器符号,编译器还要确保它们拥有唯一的名字。、 不过,对全局符号的引用解析就棘手得多。...

2018-09-12 19:12:18 227

原创 1.3 事务

在理解事务的概念之前,接触数据库系统的其他高级特性还言之过早。事务就是一组原子性的SQL查询,或者说一个独立的工作单元。如果数据库引擎能够成功地对数据库应用该组查询的全部语句,那么就执行该组查询。如果其中有任何一条语句因为崩溃或其他原因无法执行,那么所有的语句都不会执行。也就是说,事务内的语句,要么全部执行成功,要么全部执行失败。 银行应用是解释事务必要性的一个经典的例子。假设一个银行的数据库有...

2018-09-09 14:54:45 138

原创 1.2 并发控制

无论何时,只要有多个查询需要在同一时刻修改数据,都会产生并发控制的问题。本章的目的是讨论MySQL在两个层面的并发控制:服务器层和存储引擎层。并发控制是一个内容庞大的话题,有大量的理论文献对其进行过详细的讨论。本章只简单地讨论MYSQL如何控制并发读写,因此读者需要有相关的知识来理解本章接下来的内容。 以Unix系统的eamil box为例,典型的mbox文件格式是非常简单的。一个mbox邮箱中...

2018-09-07 23:52:51 264

原创 7.5 符号和符号表

每个可重定位目标模m都有一个符号表,它包含m定义和引用的符号的信息。在链接器的上下文中,有三种不同的符号:由模块m定义并能被其他模块引用的全局符号。全局链接器符号对应于非静态的C函数和全局变量;由其它模块定义并被模块M引用的全局符号。这些符号称为外部符号,对应于在其他模块中对应的非静态C函数和全局变量。只被模块m定义和引用的局部符号。他们对应于带static属性的C函数和全局变量。这些符...

2018-09-07 22:04:05 1305

原创 MySql架构与历史---1.1 MySQL逻辑架构

和其他数据库相比,MYSQL有点与众不同,他的架构可以在多种不同场景中应用并发挥好的作用,但是同时也会带来一点选择上的困难。Mysql并不完美,却足够灵活,能够适应高要求的环境,例如Web类应用。同时,Mysql即可以嵌入到应用程序中,也可以支持数据仓库,内容索引和部署软件,高可用的冗余系统,在线事务处理系统(OLTP)等各种应用类型。 为了充分发挥Mysql的性能并顺利的使用,就必须理解器设计...

2018-09-07 12:04:33 318

原创 7.4 可重定位目标文件

下图展示了一个典型的ELF可重定位目标文件的格式。ELF头(ELF Header)以一个16字节的序列开始,这个序列描述了生成该文件的系统的字的大小和字节顺序,ELF头剩下的部分包含帮助链接器语法分析和解释目标文件的信息。其中包括ELF头的大小,目标文件的类型(如可重定位,可执行性,或者共享的),机器类型(如x86-64),节头部表(section header table)的文件偏移,以及节头部...

2018-09-06 19:54:25 719

原创 Mysql 架构与历史

和其他数据库系统相比,Mysql有点与众不同,他的架构可以在多种不同场景中应用并发挥号的作用,但是同时也会带来一点选择上的困难。MySql并不完美,却足够灵活,能够适应高要求的环境,例如Web类应用。同时,Mysql既可以嵌入到应用程序中,也可以支持数据仓库,内容索引和部署软件,高可用的...

2018-09-06 19:20:09 225

原创 3.7.1 运行时栈

C语言过程调用机制的一个关键特性(大多数其他语言也是如此)在于使用了栈数据结构提供的后进先出的内存管理原则。在过程P调用过程Q的例子中,可以看到当Q在执行时,P以及所有在向上追溯到P的调用链中的过程,都是暂时被挂起的。当Q运行时,他只需要为局部变量分配新的存储空间,或者设置到另一个过程的调用。另一方面,当Q返回时,任何它所分配的布局变量存储空间都可以被释放。因此,程序可以用栈来管理它的过程所需要的...

2018-09-04 22:39:59 1743 1

原创 3.7 过程

过程是软件中一种很重要的抽象。它提供了一种封装代码的方式,用一组指定的参数和一个可选的返回值实现了某种功能。然后,可以在程序中不同的地方调用这个函数。设计良好的软件用过程作为抽象机制,隐藏某个行为的具体实现,同时有提供清晰简洁的接口定义,说明要计算的是哪些值,过程会对程序状态产生什么样的影响。不同编程语言中,过程的形式多样:函数(function),方法(method),子例程(subroutin...

2018-09-04 21:37:06 267

原创 第四章 简单的工厂模式(Simpe Factory)----------- 4.1 哪里会使用到简单工厂模式

自给自足的生活是不能满足人们日益增长的物质文化需求的,因为每个人的精力有限,一个人如果专注于某种物品的产生,则必然没有精力去专注另一种物品的产生。因此专业化的生产是社会的发展的必然趋势,软件开发也一样,开发人员不能将代码卸载一个类中,这样类越来越大,变得难以维护,因此需要将一个类中不同功能划分成多个类来实现,这就是面向对象设计原则中类的单一职责原则,简单工厂模式就是将类的指责进行细分。 比如下面...

2018-09-03 20:24:10 160

原创 7.3 目标文件

目标文件与三种形式:可重定位目标文件。包含二进制代码和数据,其形式可以在编译时和其他可重定位目标文件合并起来,创建一个可执行目标文件可执行目标文件。包含二进制程序代码和数据,其形式可以被直接复制到内存并执行。共享目标文件。一种特殊类型的可重定位目标文件,可以在加载或者运行时被动态的加载进内存并链接。编译器和汇编器生成可重定位目标文件(包括共享目标文件)。链接器生成可执行目标文件。从技...

2018-09-03 19:00:16 179

原创 7.2 静态链接

像Linux LD程序这样的静态链接器(static linker)以一组可重定位目标文件和命令行参数作为输入,生成一个完全链接的,可以加载和运行的可执行目标文件作为输出。输入的可重定位目标文件由各种不同的代码和数据节(section)组成,每一节都是一个连续的字节序列。指令在一节中,初始化了的全局变量在另一节中,而未初始化的变量又在另外一节中。 为了构造可执行文件,链接器必须完成两个主...

2018-09-03 18:44:16 142

原创 7.1 编译器驱动程序

考虑下面的C语言程序,他将作为贯穿本章的一个小的运行示例,帮助我们说明关于链接器是如何工作的一些重要知识点。----------------------------code/link/main.cint sum(int *a, int n);int array[2] = {1,2};int main(){ int val = sum(array,2); return...

2018-09-03 08:22:00 809

原创 链接

链接(linking)是将各种代码和数据片段收集和组合成为一个单一文件的过程,这个文件可被加载(复制)到内存并执行。链接可以执行于编译时(compile time),也就是在源代码被翻译成机器代码时;也可以执行于加载时(load time),也就是在程序被加载器(loader)加载到内存并执行时;甚至执行于运行时(run time),也就是由应用程序来执行。在早期的计算机系统中,链接时手动执行的。...

2018-09-01 00:51:14 145

原创 深入理解计算机系统 第二部分 在系统上运行的程序

继续我们对计算机系统的探索,进一步来看看构建和运行应用程序的系统软件,链接器把程序的各个部分联合成一个文件,处理器可以将这个文件加载到内存,并且执行它。现代操作系统与硬件合作,为每个程序提供一种幻象,好像这个程序是在独占地使用处理器和主存。而实际上,在任何时刻,系统上都有多个程序在运行。...

2018-09-01 00:34:37 246

原创 3.5 单例模式在数据库连接池管理中的实际应用

目前大多数程序开发都需要用到数据库连接池,在数据库连接池的管理类中,就使用了单例模式,来实现对连接池的管理。这里模拟一个连接池的 管理类Manager.java,它的示意代码如下://***Manage.java*********************public class Manager{ static private Manager instance;//单例模式 ...

2018-08-31 15:36:56 2139 1

原创 3.4 单例模式在日志管理中的实际应用

作为非常简单的单例模式,其实现方法就是定义一个该类的静态变量,然后再定义一个获取该静态变量的静态方法。单例模式在程序开发中有着广泛的应用,比如数据库连接池,日志管理等都会使用到,学习设计模式最好的办法就是看好的代码,Log4j是Apache的一个开放源代码项目,得益于它良好的架构设计,开发人员可以随意控制日志语句的输出,输出的目的地可以是控制台,文件,邮件,数据库等。在Log4j中就用到了单例模式...

2018-08-30 22:50:13 1808

原创 3.单例模式------双检测锁机制的单例模式

前面介绍的懒汉式单例模式使用方法,在单线程的程序应用中是没有任何问题的,但是在多线程的程序中就会出现问题,当多个线程都进行if(instance == null)判断时,就会产生多个类的实例,这就违反了单例模式的原则,也不符合程序的需要,怎么办呢?对于多线程下的应用,可以增加synchronized()同步机制,示意代码如下:public class Singleton{ p...

2018-08-30 19:38:16 598

空空如也

空空如也

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

TA关注的人

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