FreeDOS USB Bootable Drive

FreeDOS USB Bootable Drive http://www.aselabs.com/articles.php?id=243 Author Aron Schatz Posted March 3, 2008 Views 61988 We all use flash drives instead of the older floppy disk standard of last century. The problem with USB is that it isn’t made to boot like a floppy disk. Motherboards now support booting from USB drives made to look like hard drives. This guide is a step by step process running on Ubuntu. Tags Guides USB DOS Boot ...

2012-04-02 · 8 min · 1552 words · -

linux test

linux test http://www.ibm.com/developerworks/cn/linux/l-bash-test.html 内置命令 test 根据表达式_expr_ 求值的结果返回 0 (真) 或 1 (假) 。也可以使用方括号: test expr 和 [ expr ] 是等价的。 可以用$? 检查返回值;可以使用 && 和 || 操作返回值;也可以用本技巧后面介绍的各种条件结构测试返回值。 -d 目录 -e 存在 (也可以用 -a) -f 普通文件 -h 符号连接 (也可以用 -L) -p 命名管道 -r 可读 -s 非空 -S socket -w 可写 -N 从上次读取之后已经做过修改 可以用 -eq、 -ne、-lt、 -le、 -gt 或 -ge 比较算术值,它们分别表示等于、不等于、小于、小于等于、大于、大于等于。

2012-04-01 · 1 min · 58 words · -

linux 格式化U盘

linux 格式化U盘 先卸载u盘 #umount /dev/sdb1 #注意/dev/后面的设备要根据你的实际情况而定 格式化并建立VFAT文件系统 #mkfs.vfat /dev/sdb1 最后再mount上就成了,或者把U盘拨了再插上,系统可能会自动mount上,就可以用U盘了

2012-03-29 · 1 min · 10 words · -

linux下制作dos启动U盘

linux下制作dos启动U盘 下载镜像文件win98usb.tar http://ubuntuforums.org/showthread.php?p=5459421#post5459421 查看U盘挂载点 df -h sudo dd if=win98usb.img of=/dev/sdb conv=notrunc unzip the package win98boot.zip mount the usb disk Copy the bootable ISO BIOS files to the USB stick sudo cp -r xxx xxx 编辑config.sys device=himem.sys /testmem:off himem.sys后面的/testmem:off的作用是HIMEM.SYS载入时不会慢慢检查内存

2012-03-29 · 1 min · 38 words · -

java5

java5 可变参数, 变长参数 在 Java 5 中提供了变长参数,允许在调用方法时传入不定长度的参数。变长参数是 Java 的一个语法糖,本质上还是基于数组的实现: public class Varargs { public static void test(String... args) { for(String arg : args) { System.out.println(arg); } } public static void main(String[] args) { test();//0个参数 test("a");//1个参数 test("a","b");//多个参数 test(new String[] {"a", "b", "c"});//直接传递数组 } }

2012-03-28 · 1 min · 43 words · -

ts

ts 一个 调用 有道词典 在命令行里翻译单词的 linux shell 脚本 author: Hex Lee lihe757@gmail.com 1.添加此脚本到~/.bashrc的末尾 2.source ~/.bashrc ts hello 你好 #youdao ts(){ curl -s "http://fanyi.youdao.com/translate?smartresult=dict&smartresult=rule&smartresult=ugc&sessionFrom=dict.top" -d "type=AUTO& i=$1&doctype=json&xmlVersion=1.4&keyfrom=fanyi.web&ue=UTF-8&typoResult=true&flag=false" | sed -E -n 's/.\*tgt":"([^"]+)".\*entries":["","([^"]+)".*/1n 2/p'; return 0; } #sed -E -n 's/.\*tgt":"([^"]+)".*/1/p' ; #sed -E -n 's/.\*tgt":"([^"]+)".\*entries":["","([^"]+)".*/1n 2/p';

2012-03-27 · 1 min · 45 words · -

DBCP

DBCP DBCP(DataBase connection pool),数据库连接池。是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。单独使用dbcp需要3个包: common-dbcp.jar,common-pool.jar,common-collections.jar由于建立数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。 class JdbcUtil { private static BasicDataSource bds; static { if(bds==null) { bds= new BasicDatasource(); } //分别设置数据库的连接参数 bds.setDriverClass bds.url bds.user bds.root } public staitc Connection getConnection() { return bds.getConnection(); } 在spring中配置dbcp: beans.xml: <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="locations"> <value>classpath:jdbc.properties</value> </property> </bean> <bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="${jdbc.driverClassName}" /> <property name="url" value="${jdbc.url}" /> <property name="username" value="${jdbc.username}" /> <property name="password" value="${jdbc.password}" /> </bean> jdbc.properties: //放在classpath下 ...

2012-03-27 · 1 min · 76 words · -

JDBC

JDBC JDBC 是阻塞的、同步的 jdbc (java database connection) 就是java数据库链接的api,是java标准类库的扩展,用它可以应用sql访问数据库,完成对数据库的查找,更新。 与其它数据库编程环境相比,jdbc有java语言的特性,使用jdbc开发的程序可以跨平台运行,而且不受数据库供应商的限制。 为什么不受数据库供应商的限制呢? 就在于jdbc的设计。 一、sun公司为sql访问数据库提供一套"纯"java api; 二、同时提供一个驱动管理器,以允许第三方驱动程序可以链接到特定的数据库,这样数据库供应商就可以提供自己的驱动程序,并插入到驱动管理器中,关键是所有的驱动程序都必须满足驱动管理器api提出的要求。 三、需要一套简单的机制,以使得第三方驱动程序可以向驱动管理器注册。 jdbc的典型用法 在传统的客户服务器模式中, 通常在服务器端配置数据库,jdbc驱动程序部署在客户。发展到后来的三层 , 甚至更高层的应用模式时,客户端不直接调用数据库,而是调用服务器上的中间层,再由中间层完成数据库查询操作。这种三层模式的优点是: 它将可视化表示 (位于客户端) 从业务逻辑 (中间件层) 和原始数据 (位于数据库) 中分离出来。因此,我们就可以从不同的客户端,如java应用,applet或web表单,访问相通的数据库和相通的业务规则。 客户端和中间层之间的通信可以通过http (web浏览器用作客户端时) ,rmi (当使用应用或applet) 或其他机制来完成。jdbc负责在中间层和后台数据库之间进行通讯。 JDBC (Java Data Base Connectivity,java数据库连接) 是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC为工具/数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯 Java API 编写数据库应用程序,同时,JDBC也是个商标名。 有了JDBC,向各种关系数据发送SQL语句就是一件很容易的事。换言之,有了JDBC API,就不必为访问Sybase数据库专门写一个程序,为访问Oracle数据库又专门写一个程序,或为访问Informix数据库又编写另一个程序等等,程序员只需用JDBC API写一个程序就够了,它可向相应数据库发送SQL调用。同时,将Java语言和JDBC结合起来使程序员不必为不同的平台编写不同的应用程序,只须写一遍程序就可以让它在任何平台上运行,这也是Java语言"编写一次,处处运行"的优势。 Java数据库连接体系结构是用于Java应用程序连接数据库的标准方法。JDBC对Java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型。作为API,JDBC为程序开发提供标准的接口,并为数据库厂商及第三方中间件厂商实现与数据库的连接提供了标准方法。JDBC使用已有的SQL标准并支持与其它数据库连接标准,如ODBC之间的桥接。JDBC实现了所有这些面向标准的目标并且具有简单、严格类型定义且高性能实现的接口。 Java 具有坚固、安全、易于使用、易于理解和可从网络上自动下载等特性,是编写数据库应用程序的杰出语言。所需要的只是 Java应用程序与各种不同数据库之间进行对话的方法。而 JDBC 正是作为此种用途的机制。 JDBC 扩展了 Java 的功能。例如,用 Java 和 JDBC API 可以发布含有 applet 的网页,而该 applet 使用的信息可能来自远程数据库。企业也可以用 JDBC 通过 Intranet 将所有职员连到一个或多个内部数据库中 (即使这些职员所用的计算机有 Windows、 Macintosh 和UNIX 等各种不同的操作系统) 。随着越来越多的程序员开始使用Java 编程语言,对从 Java 中便捷地访问数据库的要求也在日益增加。 ...

2012-03-27 · 7 min · 1411 words · -

so, dll, 动态链接库

so, dll, 动态链接库 不同操作系统的动态链接库文件格式稍有不同,Linux称之为共享目标文件 (Shared Object),文件后缀为.so,Windows的动态链接库 (Dynamic Link Library)文件后缀为.dll。 https://zhuanlan.zhihu.com/p/235551437 ‘windows dll, Linux so’ http://blog.csdn.net/yang_lang/article/details/5926486 摘要: 动态链接库技术实现和设计程序常用的技术,在Windows和Linux系统中都有动态库的概念,采用动态库可以有效的减少程序大小,节省空间,提高效率,增加程序的可扩展性,便于模块化管理。 但不同操作系统的动态库由于格式 不同,在需要不同操作系统调用时需要进行动态库程序移植。本文分析和比较了两种操作系统动态库技术,并给出了将Visual C++编制的动态库移植到Linux上的方法和经验。 引言 动态库 (Dynamic Link Library abbr,DLL) 技术是程序设计中经常采用的技术。其目的减少程序的大小,节省空间,提高效率,具有很高的灵活性。 采用动态库技术对于升级软件版本更加容易。与静态库 (Static Link Library) 不同,动态库里面的函数不是执行程序本身的一部分,而是根据执行需要按需载入,其执行代码可以同时在多个程序中共享。 在 Windows和Linux操作系统中,都可采用这种方式进行软件设计,但他们的调用方式以及程序编制方式不尽相同。本文首先分析了在这两种操作系统中通 常采用的动态库调用方法以及程序编制方式,然后分析比较了这两种方式的不同之处,最后根据实际移植程序经验,介绍了将VC++编制的Windows动态库 移植到Linux下的方法。 动态库技术 2.1 Windows动态库技术 动态链接库是实现Windows应用程序共享资源、节省内存空间、提高使用效率的一个重要技术手段。常见的动态库包含外部函数和资源,也有一些动态库只包含 资源,如Windows字体资源文件,称之为资源动态链接库。通常动态库以.dll,.drv、.fon等作为后缀。 相应的windows静态库通常以.lib结尾,Windows自己就将一些主要的系统功能以动态库模块的形式实现。 Windows动态库在运行时被系统加载到进程的虚拟空间中,使用从调用进程的虚拟地址空间分配的内存,成为调用进程的一部分。DLL也只能被该进程的线程所访问。DLL的句柄可以被调用进程使用;调用进程的句柄可以被DLL使用。 DLL 模块中包含各种导出函数,用于向外界提供服务。DLL可以有自己的数据段,但没有自己的堆栈,使用与调用它的应用程序相同的堆栈模式;一个DLL在内存中 只有一个实例;DLL实现了代码封装性;DLL的编制与具体的编程语言及编译器无关,可以通过DLL来实现混合语言编程。DLL函数中的代码所创建的任何 对象 (包括变量) 都归调用它的线程或进程所有。 根据调用方式的不同,对动态库的调用可分为静态调用方式和动态调用方式。 (1) 静态调用,也称为隐式调用,由编译系统完成对DLL的加载和应用程序结束时DLL卸载的编码 (Windows系统负责对DLL调用次数的计数) ,调用方式 简单,能够满足通常的要求。通常采用的调用方式是把产生动态连接库时产生的.LIB文件加入到应用程序的工程中,想使用DLL中的函数时,只须在源文件中 声明一下。 LIB文件包含了每一个DLL导出函数的符号名和可选择的标识号以及DLL文件名,不含有实际的代码。Lib文件包含的信息进入到生成的应用程序中,被调用的DLL文件会在应用程序加载时同时加载在到内存中。 (2)动态调用,即显式调用方式,是由编程者用API函数加载和卸载DLL来达到调用DLL的目的,比较复杂,但能更加有效地使用内存,是编制大型应用程序时的重要方式。在Windows系统中,与动态库调用有关的函数包括: ①LoadLibrary (或MFC 的AfxLoadLibrary) ,装载动态库。 ②GetProcAddress,获取要引入的函数,将符号名或标识号转换为DLL内部地址。 ③FreeLibrary (或MFC的AfxFreeLibrary) ,释放动态链接库。 在 windows中创建动态库也非常方便和简单。在Visual C++中,可以创建不用MFC而直接用C语言写的DLL程序,也可以创建基于MFC类库的DLL程序。每一个DLL必须有一个入口点,在VC++ 中,DllMain是一个缺省的入口函数。DllMain负责初始化(Initialization)和结束(Termination)工作。 ...

2012-03-27 · 2 min · 243 words · -

FileDisk

FileDisk FileDisk原理分析! 2008-03-16 12:34 FileDisk作为开源代码,在网上广为流传,是卷,磁盘方面驱动的基础代码,对于刚刚接触驱动程序开发的朋友说来,是入门的捷径! 下面我将对FileDisk的基本工作原理做个简单的介绍: FileDisk是可以将文件虚拟为一个卷使用的驱动程序(其实不一定是文件,只要是存储介质都可以的)。Filedisk在加载的时候就会常见4个设备,当然你随便你创建几个。上层应用程序映射一个卷的时候,比如映射卷F: 那么F:就是FileDisk所创建的那4个设备其中一个的符号连接 (其中哪一个都是可以的) ,创建好这个符号连接以后,用户应用程序就可以发送IRP(IO请求)到这个设备了 (deviceFileDiskFileDisk0) ,那么怎样处理这些请求呢, (只有3种请求: READ WRITE IOCONTROL(包括自定义的iocode)) ,主要的任务就是处理读和写。针对每个设备都有一个处理IRP线程! (分发函数不直接处理IRP,而是加入队列,由处理线程处理) 。 其实原理就是这么一点东西,但是我们如果要是做其他的类似的驱动,无疑FileDisk是一个很好的教程!从FileDisk我们可以引申出很多东西!如果我们把FileDisk的文件,换成多个文件 (文件List) 那么就有点像磁盘整列的意思了! (不过显然FileDisk在其之上干活) 。 欢迎大家提问交流!!!!!!!!!!!!

2012-03-26 · 1 min · 25 words · -

CDI

http://www.infoq.com/cn/articles/cf-javaone-2011-cdi-google-dart CDI 对于依赖注入的概念,相信很多开发人员都不陌生。一个组件在运行过程中会依赖其他组件提供的功能。传统的做法是由组件本身负责查找所需的依赖对象。这种方式会造成组件之间的紧耦合,不利于组件的维护和更新。依赖注入的做法则是由组件以声明式的方式表明其依赖关系,由框架在运行时把所需的组件的Java对象注入到当前组件中。相对于Java SE来说,依赖注入的概念对于Java EE更加适用。Java EE中的很多资源和服务都是由容器来负责管理的。对于单个应用来说,查找由容器负责管理的组件并不是一件容易的事情。更好的做法是由应用来声明所需的资源和服务,由容器负责注入到应用中。通过这种方式,容器也可以更好的对资源和服务进行管理。以数据库连接为例,传统的做法需要由应用本身加载相关驱动并创建数据库连接,以及在适当的时候进行释放。而使用容器管理并注入依赖的做法,则减轻了应用开发人员的工作量。 Java EE 5中添加了对依赖注入的有限支持。通过注解可以往容器管理的对象中注入资源的对应对象。Java EE 6中把依赖注入的概念更进一步,即引入了JSR 299 (Contexts and Dependency Injection for the Java EE platform)规范,简称CDI。CDI规范吸收了来自Spring IoC容器、JBoss Seam和Google Guice的最佳实践,并与Java EE开发的实际需要相结合。正如CDI的字面含义一样,CDI中的两个核心功能是上下文信息 (context) 和依赖注入。这两个功能的结合点是Java中基本的组件模型bean。在CDI中,bean 定义了应用的状态和逻辑,并由容器来进行管理。每个被管理的bean都有定义好的绑定到特定上下文的作用域和生命周期。当需要注入或访问bean时,容器会从作用域对应的上下文中获取。当作用域失效时,对应上下文中所有的对象都会被删除。CDI中的每个bean都可以作为依赖注入时的目标。 CDI中预定义了一些常用的作用域。默认的作用域是Dependent,表示只对被注入的对象生效。作用域ApplicationScoped表示应用的全局作用域,用来创建全局唯一的对象。RequestScoped和SessionScoped则与HTTP相关,分别表示HTTP请求和HTTP会话。ConversationScoped是由应用自定义生命周期长短的作用域,可以用来实现跨多页面的工作流。如下面代码中的OrderProcessor类只存活在HTTP请求中,并且依赖OrderDao接口的实现。容器会在运行时查找到OrderDao接口的实现对象,并注入到OrderProcessor类的对象中。 @Named @RequestScoped public class OrderProcessor { @Inject private OrderDao orderDao; } 通常的依赖注入方式是在代码中只依赖接口,由容器在运行时选择合适的实现类的对象来进行注入。如果接口只有一个实现类,则不需要额外的声明。如果接口有不同的实现,则需要使用限定符 (qualifier) 来声明具体使用的实现,否则容器无法做出正确的选择。CDI的一个特点是限定符不是普通的字符串,而是类型安全的注解。 通过Qualifier元注解可以创建新的限定符注解。如下面的代码创建了一个新的限定符注解InMemory。 @Qualifier @Retention(RUNTIME) @Target({TYPE}) public @interface InMemory {} 该注解可以添加在OrderDao接口的实现上。 @InMemory public class InMemoryOrderDao implements OrderDao { } 如果在测试时,希望使用简单的基于内存的存储实现,可以使用InMemory注解来声明。这样容器在注入时会使用InMemoryOrderDao类的对象。 @Named @RequestScoped public class OrderProcessor { @Inject @InMemory private OrderDao orderDao; } ...

2012-03-26 · 2 min · 276 words · -

Spring的静态工厂方法

Spring的静态工厂方法 http://blog.csdn.net/chensugang/article/details/3357593 上一次写了一篇关于DI的三种方式,其中里面介绍了构造方法的方式,今天学习了一种替代构造器的方法,这就是静态工厂方法来返回对象,下面来看一下静态工厂方法的实现。 静态工厂方法: LoginAction类: package com.spring.test.di; public class LoginAction { private Logic logic; private LoginAction(Logic logic){ this.logic = logic; } public static LoginAction createInstance(Logic logic){ LoginAction loginAction = new LoginAction (logic); return loginAction; } public void execute() { String name = logic.getName(); System.out.print(“My Name Is " + name); } } 注意: 这里使用的构造方法是一个私有方法,createInstance这个就是我们的静态工厂方法 Logic接口: package com.spring.test.di; public interface Logic { public String getName(); } 这里只是做为一个简单的例子,所以我们在该接口中只有一个方法,并且在该接口的实现方法也超级简单 Logic接口实现: package com.spring.test.di; public class LogicImpl implements Logic{ public String getName(){ return “fengyun”; ...

2012-03-26 · 1 min · 133 words · -

static factory method

static factory method 创建类的实例的最常见的方式是用new语句调用类的构造方法。在这种情况下,程序可以创建类的任意多个实例,每执行一条new语句,都会导致Java虚拟机的堆区中产生一个新的对象。假如类需要进一步封装创建自身实例的细节,并且控制自身实例的数目,那么可以提供静态工厂方法。 例如Class实例是Java虚拟机在加载一个类时自动创建的,程序无法用new语句创建java.lang.Class类的实例,因为Class类没有提供public类型的构造方法。为了使程序能获得代表某个类的Class实例,在Class类中提供了静态工厂方法forName(String name),它的使用方式如下: Class c=Class.forName( “Sample “); //返回代表Sample类的实例 静态工厂方法与用new语句调用的构造方法相比,有以下区别。 (1) 构造方法的名字必须与类名相同。这一特性的优点是符合Java语言的规范,缺点是类的所有重载的构造方法的名字都相同,不能从名字上区分每个重载方法,容易引起混淆。 静态工厂方法的方法名可以是任意的,这一特性的优点是可以提高程序代码的可读性,在方法名中能体现与实例有关的信息。例如例程11-5的Gender类有两个静态工厂方法: getFemale()和getMale()。 例程11-5 Gender.java public class Gender{ private String description; private static final Gender female=new Gender( “女 “); private static final Gender male=new Gender( “男 “); private Gender(String description){this.description=description;} public static Gender getFemale(){ return female; } public static Gender getMale(){ return male; } public String getDescription(){return description;} } 这一特性的缺点是与其他的静态方法没有明显的区别,使用户难以识别类中到底哪些静态方法专门负责返回类的实例。为了减少这一缺点带来的负面影响,可以在为静态工厂方法命名时尽量遵守约定俗成的规范,当然这不是必需的。目前比较流行的规范是把静态工厂方法命名为valueOf或者getInstance。 l valueOf: 该方法返回的实例与它的参数具有同样的值,例如: Integer a=Integer.valueOf(100); //返回取值为100的Integer对象 从上面代码可以看出,valueOf()方法能执行类型转换操作,在本例中,把int类型的基本数据转换为Integer对象。 l getInstance: 返回的实例与参数匹配,例如: ...

2012-03-26 · 2 min · 265 words · -

tunctl

tunctl tunctl is used to set up and maintain persistent TUN/TAP network interfaces, enabling user applications to simulate network traffic. Such interfaces is useful for VPN software, virtualization, emulation, simulation, and a number of other applications. -t _interface _Specifies the desired interface name. **-b **Brief output, prints just the interface name -d _interfacename _Delete the specified interfacename (set it to non-persistent) -t _interface _Specifies the desired interface name. -u _user _Specifies the owner of the interface. This user is allowed to attach to the “network/wire” side. ...

2012-03-25 · 1 min · 96 words · -

virt-manager error

virt-manager error After I finished the install of the “kvm ,qemu-kvm ,libvirt-bin,virtinst,virt-manager”. I want to connect to my vms through the virt-manager .But I come to this error: Unable to open a connection to the libvirt management daemon. Libvirt URI is: qemu:///system Verify that: The ’libvirtd’ daemon has been started And more details: Unable to open connection to hypervisor URI ‘qemu:///system’: unable to connect to ‘/var/run/libvirt/libvirt-sock’, libvirtd may need to be started: Permission denied ...

2012-03-24 · 1 min · 146 words · -

LSM-Tree

LSM-Tree LSM-Tree, Log Structured Merge Tree LSM-Tree 能将离散的随机写请求都转换成批量的顺序写请求 (WAL + Compaction),以此提高写性能。 十多年前,谷歌发布了大名鼎鼎的"三驾马车"的论文,分别是 GFS(2003年),MapReduce (2004年),BigTable (2006年),为开源界在大数据领域带来了无数的灵感,其中在 “BigTable” 的论文中很多很酷的方面之一就是它所使用的文件组织方式,这个方法更一般的名字叫 Log Structured-Merge Tree。在面对亿级别之上的海量数据的存储和检索的场景下,我们选择的数据库通常都是各种强力的NoSQL,比如 Hbase, Cassandra, Leveldb, RocksDB 等等,这其中前两者是 Apache 下面的顶级开源项目数据库,后两者分别是 Google 和 Facebook 开源的数据库存储引擎。而这些强大的 NoSQL 数据库都有一个共性,就是其底层使用的数据结构,都是仿照 “BigTable” 中的文件组织方式来实现的,也就是我们今天要介绍的 LSM-Tree。 influxdb 使用的 TSM 存储引擎也是根据 LSM Tree 针对时间序列数据优化而来 什么是 LSM-Tree LSM-Tree全称是 Log Structured Merge Tree,是一种分层,有序,面向磁盘的数据结构,其核心思想是充分了利用了磁盘批量的顺序写要远比随机写性能高出很多的特性 围绕这一原理进行设计和优化,以此让写性能达到最优,正如我们普通的 Log 的写入方式,这种结构的写入,全部都是以 Append模式 追加,不存在删除和修改。当然有得就有舍,这种结构虽然大大提升了数据的写入能力,却是以牺牲部分读取性能为代价,故此这种结构通常适合于写多读少的场景。故 LSM 被设计来提供比传统的 B+树 更好的写操作吞吐量,通过消去随机的本地更新操作来达到这个目标。这里面最典型的例子就是 Kakfa 了,把磁盘顺序写发挥到了极致,故而在大数据领域成为了互联网公司标配的分布式消息中间件组件。 虽然这种结构的写非常简单高效,但其缺点是对读取特别是随机读很不友好,这也是为什么日志通常用在下面的两种简单的场景: 数据是被整体访问的,大多数数据库的 WAL (write ahead log) 也称 预写log,包括 mysql 的 Binlog 等 数据是通过文件的偏移量offset访问的,比如 Kafka。 想要支持更复杂和高效的读取,比如按key查询和按range查询,就得需要做一步的设计,这也是LSM-Tree结构,除了利用磁盘顺序写之外,还划分了 内存+磁盘 多层的合并结构的原因,正是基于这种结构再加上不同的优化实现,才造就了在这之上的各种独具特点的 NoSQL 数据库,如 Hbase,Cassandra,Leveldb,RocksDB,MongoDB, TiDB 等。 ...

2012-03-22 · 3 min · 450 words · -

undefined reference to ...

undefined reference to … https://zhuanlan.zhihu.com/p/81681440 /usr/bin/ld: cannot find -lxxx 的解决办法 在软件编译过程中,经常会碰到类似这样的编译错误: /usr/bin/ld: cannot find -lhdf5 这表示找不到库文件 libhdf5.so,若是其它库文件,则是 cannot find -lxxx 了,其中 xxx 是库文件的名字。 将库文件所在路径添加到gcc的搜索路径 使用以下命令查询gcc能否搜寻到指定的库文件: gcc -lgsasl –verbose 查询库文件 libhdf5.so 是否能在搜索路径中找到。 使用 /etc/ld.so.conf 配置文件 将库文件所在的路径加入到 /etc/ld.so.conf 尾部,并使之生效: $ sudo echo ‘/opt/biosoft/hdf5-1.8.15-patch1/lib/’ » /etc/ld.so.conf libhdf5.so 在路径 /opt/biosoft/hdf5-1.8.15-patch1/lib/ 下,将该路径加添加到配置文件中 $ sudo ldconfig 运行该命令,重新载入 /ext/ld.so.conf 中的路径,使修改生效。 ls -l /lib/x86_64-linux-gnu cat /etc/ld.so.conf include /etc/ld.so.conf.d/*.conf ls -l /lib/x86_64-linux-gnu

2012-03-22 · 1 min · 63 words · -

TLS, HTTPS

TLS, HTTPS 创建自签名TLS/SSL证书和私钥 https://www.ssldragon.com/zh/how-to/openssl/create-self-signed-certificate-openssl/ # 生成私钥 openssl genpkey -algorithm RSA -out private.key 自签名证书里的域名不能用 .dev 结尾, .dev 是 Google 持有的顶级域名, 不能用在自签名证书里 https://stackoverflow.com/questions/49503337/self-signed-dev-cert-untrusted-using-firefox-59-on-ubuntu https://blog.ideawand.com/2017/11/22/build-certificate-that-support-Subject-Alternative-Name-SAN/ https://www.mikesay.com/2018/12/30/create-self-signed-ssl/ 创建 CA 证书用的配置文件 ca.cnf https://www.mikesay.com/2018/12/30/create-self-signed-ssl/ sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout selfsigned-key.key -out selfsigned-certificate.crt openssl: 基本命令行工具,用来创建和管理OpenSSL证书,私钥和其它文件。 req: 子命令,主要是用来创建和处理PKCS#10格式的证书请求。它也能创建被用作根证书的自签名证书。 -x509: 这个选项告诉openssl创建一个自签名证书而不是一个证书请求。 -nodes: 这个选项告诉openssl不要加密私钥,否则当使用在Nginx上时,每次Nginx启动都要提示输入密码。 -days 365: 设置证书的有效期为1年(365天)。 -newkey rsa:2048: 这个选项告诉 openss l在生成证书的同时生成私钥。rsa:2048 说明创建一个 2048 比特长的 RSA 私钥。 -keyout: 告诉 openssl 生成的私钥的名字和路径。 -out: 告诉openssl生成的自签名证书和路径。 客户端安装自签名证书 # ubuntu # 将证书拷贝到目录 “/usr/local/share/ca-certificates” sudo cp selfsigned-certificate.crt /usr/local/share/ca-certificates # 更新CA存储 sudo update-ca-certificates # 删除sudo update-ca-certificates --fresh sudo rm /usr/local/share/ca-certificates/selfsigned-certificate.crt sudo update-ca-certificates --fresh SAN SAN, Subject Alternative Name(证书主体别名) 是 SSL 标准 x509 中定义的一个扩展。它允许一个证书支持多个不同的域名。通过使用 SAN 字段,可以在一个证书中指定多个 DNS 名称(域名)、 IP 地址或其他类型的标识符,这样证书就可以同时用于多个不同的服务或主机上。这种灵活性意味着企业不需要为每个域名单独购买和安装证书, 从而降低了成本和复杂性。 ...

2012-03-21 · 3 min · 517 words · -

content-type

content-type Content-Type 实体头部用于指示资源的 MIME 类型 media type Content-Type (内容类型),一般是指网页中存在的 Content-Type,用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件 Content-Type 标头告诉客户端实际返回的内容的内容类型。 语法格式: Content-Type: text/html; charset=utf-8 Content-Type: multipart/form-data; boundary=something charset 字符编码标准。 常见的媒体格式类型如下: text/html : HTML格式 text/plain :纯文本格式 text/xml : XML格式 image/gif :gif图片格式 image/jpeg :jpg图片格式 image/png:png图片格式 以application开头的媒体格式类型: application/xhtml+xml :XHTML格式 application/xml: XML数据格式 application/atom+xml :Atom XML聚合格式 application/json: JSON数据格式 application/pdf:pdf格式 application/msword : Word文档格式 application/octet-stream : 二进制流数据 (如常见的文件下载) application/x-www-form-urlencoded : <form encType=""> 中默认的encType,form 表单数据被编码为 key/value 格式发送到服务器 (表单默认的提交数据的格式) 另外一种常见的媒体格式是上传文件之时使用的: multipart/form-data : 需要在表单中进行文件上传时,就需要使用该格式 application/json: Official MIME type for json ...

2012-03-20 · 1 min · 84 words · -

git 团队协作, Github flow

git 团队协作, Github flow 团队协作中的 Github flow 工作流程 https://zhuanlan.zhihu.com/p/39148914 GitHub flow https://githubflow.github.io/ https://insights.thoughtworks.cn/real-agile-workflow-github-flow/

2012-03-20 · 1 min · 13 words · -