java 代理模式

java 代理模式 http://blog.csdn.net/dyh8818/article/details/314668 代理模式 代理模式的作用是: 为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。 代理模式一般涉及到的角色有: 抽象角色: 声明真实对象和代理对象的共同接口; 代理角色: 代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。 真实角色: 代理角色所代表的真实对象,是我们最终要引用的对象。(参见文献1) 以下以《Java与模式》中的示例为例: 抽象角色: abstract public class Subject { abstract public void request(); } 真实角色: 实现了Subject的request()方法。 public class RealSubject extends Subject { public RealSubject() { } public void request() { System.out.println(“From real subject.”); } } 代理角色: public class ProxySubject extends Subject { private RealSubject realSubject; //以真实角色作为代理角色的属性 public ProxySubject() { } public void request() //该方法封装了真实对象的request方法 { preRequest(); if( realSubject == null ) { realSubject = new RealSubject(); } realSubject.request(); //此处执行真实对象的request方法 postRequest(); } private void preRequest() { //something you want to do before requesting ...

2011-09-13 · 2 min · 296 words · -

java classloader

java classloader 双亲委托模型 AppClassLoader ExtClassLoader Bootstrap Class Loader URLClassLoader JDK 17 AppClassLoader PlatformClassLoader, 模块加载器 BootClassLoader 不同的 JVM 的实现不同,本文所描述的内容均只限于 Hotspot Jvm. 本文将会从 JDK 默认的提供的 ClassLoader,双亲委托模型,如何自定义 ClassLoader 以及 Java 中打破双亲委托机制的场景四个方面入手去讨论和总结一下。 JDK 默认提供了如下几种 ClassLoader Bootstrap Class Loader, 引导类装载器 虚拟机的内置类加载器 (称为 “bootstrap class loader”) 本身没有父类加载器,但是可以将它用作 ClassLoader 实例的父类加载器。 Bootstrap Class Loader 加载器是由 c++ 实现的 不继承 java.lang.ClassLoader 类, 所以它不属于 “ClassLoader 实例”,也没有办法在 Java 代码中获取到它。 用来加载核心类库,如 java.lang.* 等. 它是在 Java 虚拟机启动后初始化的,它主要负责加载 %JAVA_HOME%/jre/lib, -Xbootclasspath 参数指定的路径以及 %JAVA_HOME%/jre/classes 中的类。 ExtClassLoader, 扩展类装载器 Bootstrp loader 加载 ExtClassLoader, 并且将 ExtClassLoader 的父加载器设置为 Bootstrp loader ExtClassLoader 是用Java写的,具体来说就是 sun.misc.Launcher$ExtClassLoader,ExtClassLoader 主要加载 %JAVA_HOME%/jre/lib/ext,此路径下的所有 classes 目录以及 java.ext.dirs 系统变量指定的路径中类库。 ...

2011-09-09 · 8 min · 1663 words · -

java 反射, reflect

java 反射, reflect http://www.iteye.com/topic/137944 什么是反射 反射的概念是由 Smith 在 1982 年首次提出的,主要是指程序可以访问、检测和修改它本身状态或行为的一种能力。这一概念的提出很快引发了计算机科学领域关于应用反射性的研究。它首先被程序语言的设计领域所采用, 并在 Lisp 和面向对象方面取得了成绩。其中 LEAD/LEAD++ 、OpenC++ 、MetaXa 和 OpenJava 等就是基于反射机制的语言。最近,反射机制也被应用到了视窗系统、操作系统和文件系统中。 反射本身并不是一个新概念,尽管计算机科学赋予了反射概念新的含义。在计算机科学领域,反射是指一类应用,它们能够自描述和自控制。也就是说,这类应用通过采用某种机制来实现对自己行为的描述 (self-representation) 和监测 (examination) ,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。 什么是Java中的类反射 Reflection 是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序对自身进行检查,或者说"自审",并能直接操作程序的内部属性和方法。Java 的这一能力在实际应用中用得不是很多,但是在其它的程序设计语言中根本就不存在这一特性。例如,Pascal、C 或者 C++ 中就没有办法在程序中获得函数定义相关的信息。 Reflection 是 Java 被视为动态 (或准动态) 语言的关键,允许程序于执行期 Reflection APIs 取得任何已知名称之 class 的內部信息,包括 package、type parameters、superclass、implemented interfaces、inner classes, outer class, fields、constructors、methods、modifiers,並可于执行期生成instances、变更 fields 內容或唤起 methods。 Java类反射中所必须的类 Java的类反射所需要的类并不多,它们分别是: Field、Constructor、Method、Class、Object,下面我将对这些类做一个简单的说明。 Field类: 提供有关类或接口的属性的信息,以及对它的动态访问权限。反射的字段可能是一个类 (静态) 属性或实例属性,简单的理解可以把它看成一个封装反射类的属性的类。 Constructor类: 提供关于类的单个构造方法的信息以及对它的访问权限。这个类和Field类不同,Field类封装了反射类的属性,而Constructor类则封装了反射类的构造方法。 Method类: 提供关于类或接口上单独某个方法的信息。所反映的方法可能是类方法或实例方法 (包括抽象方法) 。 这个类不难理解,它是用来封装反射类方法的一个类。 ...

2011-09-09 · 5 min · 953 words · -

动态语言

动态语言 动态语言,是指程序在运行时可以改变其结构: 新的函数可以被引进,已有的函数可以被删除等在结构上的变化。比如众所周知的ECMAScript(JavaScript)便是一个动态语言。除此之外如Ruby、Python等也都属于动态语言,而C、C++等语言则不属于动态语言。 Dynamic Programming Language (动态语言或动态编程语言) Dynamically Typed Language (动态类型语言) Statically Typed Language (静态类型语言) 所谓的动态类型语言,意思就是类型的检查是在运行时做的,比如如下代码是不是合法的要到运行时才判断 (注意是运行时的类型判断) : def sum(a, b): return a + b 而静态类型语言的类型判断是在运行前判断 (如编译阶段) ,比如C#就是一个静态类型语言,静态类型语言为了达到多态会采取一些类型鉴别手段, 如继承、接口,而动态类型语言却不需要,所以一般动态语言都会采用dynamic typing,常出现于脚本语言中。 这里我需要明确说明一点,那就是,是不是动态类型语言与这门语言是不是类型安全的完全不相干的,不要将它们联系在一起! 静态类型语言的主要优点在于其结构非常规范,便于调试,方便类型安全;缺点是为此需要写更多的类型相关代码,导致不便于阅读、不清晰明了。动态类型语言的优点在于方便阅读,不需要写非常多的类型相关的代码;缺点自然就是不方便调试,命名不规范时会造成读不懂,不利于理解等。顺便说一下,现在有这样一种趋势,那就是合并动态类型与静态类型在一种语言中,这样可以在必要的时候取长补短,Boo就是一个很好的试验性例子。^_^ 最后说一下Boo,Boo是一个静态类型语言,虽然用duck typing可以模拟dynamic typing,但是duck并不支持所有类型的操作替代,所以即使完全使用duck typing也不能达到dynamic typing。就像FantasySoft所述,Type Inference不是动态类型语言的特性,所以支持Type Inference不代表这门语言就是dynamically typed。 再特地为Ninputer这个VB的fans说一下VB.NET^_^,VB.NET是dynamically typed语言。

2011-09-09 · 1 min · 42 words · -

可扩展性, scalability

可扩展性, scalability 可扩展的本质是什么? 可扩展的意思是在面对变化时,用最少的代价去实现,平时我们听得最多的是面向抽象(接口)编程,如果只是把这里的抽象理解成接口,那么就有些狭隘了,抽象是通式通法,而接口只是其中一个,所以在谈可扩展实现之前一定要讲清楚可扩展的本质是什么,连本质都不知道,怎么提出系统性解决方案。 1.1 扩展的本质 扩展的本质就是占位符,明确告诉你这里被占了,具体谁占了不清楚。那么问题来了:占位符到底是什么?它是怎么表达的?又要如何实现的?如果可以把这三个问题理清楚,就可以想到很多可扩展性方案,而不再是单一的面向接口编程。 占位符到底是什么:占位符仅仅是一个标识,标志这里会有变化,一句话可以概括:凡是可以表达变化的就是占位符,然而具体的变化实现又没有给出,真正体现了做什么和怎么做的分离。 占位符怎么表达:要回答这个标识是用什么来表达,变量、接口、配置项…这些都可以表达占位符,变量能被赋值同一类型的数据;接口可以有不同的实现;配置项也可以被赋予不同的值…所以,实现可扩展的思路一下就打开了。 如何实现:再往深层次思考,实现一个接口,如何在执行时动态找到实现类?如果把这个问题想清楚,在实际中实现可扩展又会有一套系统性解决方案。整个过程就两点:识别和执行,识别的意思就是要找到对应目标,接下来就是执行。 综上,到这里可能已经有自己应对可扩展的方法,上面已经给了从不同角度看可扩展性的示例,接下来就是系统化提出应对可扩展的方法。 结论一:扩展的本质就是占位符,凡是可以表达变化的就是占位符。 1.2 应对可扩展的方法 先给出应对可扩展的方法:规范、识别、注册、使用,这 4 点都是从上面可推导出来的,下面一一进行详细说明。 规范:规范是从占位符推导出来的,既然是标志有变化,一定要遵循一定的规范表达,否则别人是不知道的,如接口,就是很直接地表达这里是有变化的,具体的实现还不知道;变量天然地表达这里是变化的数据。 识别:有了规范定义之后,接下来就是识别,之前为什么可扩展一直对我们来讲很虚,那是因为规范和识别都是系统帮我们做的,我们只是知道而没有真正实践。规范是定义,识别是找出有哪些实现了规范。 注册:识别出来之后,就要把信息存储起来,可以存储在本地,也可以存储在远程,如果存储在远程就是一个注册的过程,这里的注册就是存储的意思。简单理解就是识别出来之后要集中管理。 使用:使用就很简单,找到具体实现并执行逻辑处理。 上面四个单词看起来简单,除了使用是终极目标外,其它三个都是抽象的表达,比如规范如何定义、怎么识别、如何注册?通过上面的表述可以看到具体要怎么实践,这里再总结下: 规范如何去定义:凡是可以表达变化的就能用它来定义,常见的有配置项、变量、接口、注解等; 怎么去识别:这个要具体去看如何定义规范,如配置项的变化有一个监听变化;注解是要扫描类来识别 annotation; 如何去注册:如果系统的交互只是一个,那么存储在本地就行,如果系统的交互是多个,那么要注册到一个注册中心上去。 结论二:应对可扩展的方法:规范、识别、注册、使用。 https://www.infoq.cn/article/1w2mjzzx-0dm9j9vysam

2011-09-08 · 1 min · 28 words · -

java final

java final final 根据程序上下文环境,Java关键字final有"这是无法改变的"或者"终态的"含义,它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变: 设计或效率。 final类不能被继承,没有子类,final类中的方法默认是final的。 final方法不能被子类的方法覆盖,但可以被继承。 final 成员变量表示常量,只能被赋值一次,赋值后值不再改变。 final不能用于修饰构造方法。 注意: 父类的private成员方法是不能被子类方法覆盖的,因此private类型的方法默认是final类型的。 final类 final类不能被继承,因此final类的成员方法没有机会被覆盖,默认都是final的。在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会载被扩展,那么就设计为final类。 final方法 如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为final方法。 使用final方法的原因有二: 第一、把方法锁定,防止任何继承类修改它的意义和实现。 第二、高效。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。 final变量 (常量) 用final修饰的成员变量表示常量,值一旦给定就无法改变! final修饰的变量有三种: 静态变量、实例变量和局部变量,分别表示三种类型的常量。 另外,final变量定义的时候,可以先声明,而不给初值,这种变量也称为 final 空白,无论什么情况,编译器都确保空白final在使用之前必须被初始化。但是,final 空白在final关键字final的使用上提供了更大的灵活性,为此,一个类中的final数据成员就可以实现依对象而有所不同,却有保持其恒定不变的特征。 final参数 当函数参数为final类型时,你可以读取使用该参数,但是无法改变该参数的值。

2011-09-08 · 1 min · 30 words · -

java static

java static static表示"全局"或者"静态"的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。 被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。 用public修饰的static成员变量和成员方法本质是全局变量和全局方法,当声明它类的对象时,不生成static变量的副本,而是类的所有实例共享同一个static变量。 static变量前可以有private修饰,表示这个变量可以在类的静态代码块中,或者类的其他静态成员方法中使用 (当然也可以在非静态成员方法中使用) ,但是不能在其他类中通过类名来直接引用,这一点很重要。private是访问权限限定,static表示不要实例化就可以使用。static前面加上其它访问权限关键字的效果也以此类推。 static修饰的成员变量和成员方法习惯上称为静态变量和静态方法,可以直接通过类名来访问,访问语法为: 类名.静态方法名(参数列表…) 类名.静态变量名 用static修饰的代码块表示静态代码块,当Java虚拟机 (JVM) 加载类时,就会执行该代码块。 static变量 按照是否静态的对类成员变量进行分类可分两种: 一种是被static修饰的变量,叫静态变量或类变量;另一种是没有被static修饰的变量,叫实例变量。两者的区别是: 对于静态变量在内存中只有一个拷贝 (节省内存) ,JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问 (方便) ,当然也可以通过对象来访问 (但是这是不推荐的) 。 对于实例变量,每创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响 (灵活) 。 静态方法 静态方法可以直接通过类名调用,任何的实例也都可以调用,因此静态方法中不能用this和super关键字,不能直接访问所属类的实例变量和实例方法(就是不带static的成员变量和成员成员方法),只能访问所属类的静态成员变量和成员方法。因为实例成员与特定的对象关联! static代码块 static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。 static和final一块用表示什么 static final用来修饰成员变量和成员方法,可简单理解为"全局常量"! 对于变量,表示一旦给值就不可修改,并且通过类名可以访问。 对于方法,表示不可覆盖,并且可以通过类名直接访问。 因为static方法独立于任何实例,因此static方法必须被实现,而不能是抽象的abstract 定义一个类成员,使它的使用完全独立于该类的任何对象。通常情况下,类成员必须通过它的类的对象访问,但是可以创建这样一个成员,它能够被它自己使用,而不必引用特定的实例。在成员的声明前面加上关键字static(静态的)就能创建这样的成员。如果一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象。你可以将方法和变量都声明为static。static 成员的最常见的例子是main( ) 。因为在程序开始执行时必须调用main() ,所以它被声明为static。 当声明一个对象时,并不产生static变量的拷贝,而是该类所有的实例变量共用同一个static变量。声明为static的方法有以下几条限制: 仅能调用其他的static 方法。 只能访问static数据。 不能以任何方式引用this 或super 可以声明一个static块,Static 块仅在该类被加载时执行一次

2011-09-08 · 1 min · 50 words · -

java 数组 list set, 数组转set

java 数组 list set, 数组转set http://jerval.iteye.com/blog/1001643 //数组->Set String[] strs = {“AA”,“BB”}; Set set2 = new HashSet(Arrays.asList(strs)); System.out.println(set2); //Set->数组 Set set3 = new HashSet(Arrays.asList(“PP”,“OO”)); String[] strSet = new String[set3.size()]; set3.toArray(strSet); System.out.println(Arrays.toString(strSet)); List(interface): 次序是List最重要的特点;它确保维护元素特定的顺序。List为Collection添加了许多方法,使得能够向List中间插入与移除元素(只推荐LinkedList使用)。一个List可以生成ListIterator,使用它可以从两个方向遍历List,也可以从List中间插入和删除元素。 ArrayList: 由数组实现的List。它允许对元素进行快速随机访问,但是向List中间插入与移除元素的速度很慢。ListIterator只应该用来由后向前遍历ArrayList,而不是用来插入和删除元素,因为这比LinkedList开销要大很多。 LinkedList: 对顺序访问进行了优化,向List中间插入与删除得开销不大,随机访问则相对较慢(可用ArrayList代替)。它具有方法addFirst()、addLast()、getFirst()、getLast()、removeFirst()、removeLast(),这些方法(没有在任何接口或基类中定义过)使得LinkedList可以当作堆栈、队列和双向队列使用。 #################################### Set(interface): 存入Set的每个元素必须是唯一的,因为Set不保存重复元素。加入Set的Object必须定义equals()方法以确保对象的唯一性。Set与Collection有完全一样的接口。Set接口不保证维护元素的次序。 HashSet: 为快速查找而设计的Set。存入HashSet的对象必须定义hashCode()。采用散列函数对元素进行排序,这是专门为快速查询而设计的; TreeSet: 保持次序的Set,底层为树结构。使用它可以从Set中提取有序的序列。TreeSet采用红黑树的数据结构进行排序元素; LinkedHashSet: 具有HashSet的查询速度,且内部使用链表维护元素的顺序(插入的次序)。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示。LinkedHashSet内部使用散列以加快查询速度,同时使用链表维护元素的次序,使得看起来元素是以插入的顺序保存的。 需要注意的是,生成自己的类时,Set需要维护元素的存储顺序,因此要实现Comparable接口并定义compareTo()方法。

2011-09-08 · 1 min · 46 words · -

使用负边距创建自适应宽度的流体布局

使用负边距创建自适应宽度的流体布局 http://www.cnblogs.com/zzh/archive/2008/10/13/1309841.html <!DOCTYPE html> <html> <head> <title>CTS</title> <style type="text/css"> body,p,h1,h2,ul { margin:0;padding:0; } #header { background-color: #A8A754; } #footer { background-color: #A8A754; clear: both; } #mainer { width: 100%; margin-right: -250px; float: left; } #sideBar { float: right; width: 250px; color: #FFF; background-color: #36361A; } #main { margin-right: 250px; background-color: #616030; } </style> </head> <body> 顶部区域 使用负边距创建自适应宽度的流体布局 随着越来越大的浏览器的出现及普及,网站界面如何能满足不同分辨率浏览器使用者的浏览需求,逐渐成为前端开发工程师必须面对的问题。采 用百分比进行架构是个不错的主意。以往我们进行这类架构都是使用table表格。但,其实使用很小的技术就可以创建出符合WEB标准化的自适应布局。 最新文章 最新文章一 最新文章二 最新文章三 底部区域 </body> </html>

2011-09-07 · 1 min · 66 words · -

position,absolute、relative

‘position,absolute、relative’ position: absolute、relative CSS2.0 HandBook上的解释: 设置此属性值为 absolute 会将对象拖离出正常的文档流绝对定位而不考虑它周围内容的布局。假如其他具有不同 z-index 属性的对象已经占据了给定的位置,他们之间不会相互影响,而会在同一位置层叠。此时对象不具有外补丁( margin ),但仍有内补丁( padding )和边框( border )。 要激活对象的绝对(absolute)定位,必须指定 left , right , top , bottom 属性中的至少一个,并且设置此属性值为 absolute 。否则上述属性会使用他们的默认值 auto ,这将导致对象遵从正常的HTML布局规则,在前一个对象之后立即被呈递。 TRBL属性 (TOP、RIGHT、BOTTOM、LEFT) 只有当设定了position属性才有效。 当设定position:absolute 如果父级 (无限) 没有设定position属性,那么当前的absolute则结合TRBL属性以浏览器左上角为原始点进行定位 如果父级 (无限) 设定position属性,那么当前的absolute则结合TRBL属性以父级 (最近) 的左上角为原始点进行定位。 当设定position: relative 则参照父级 (最近) 的内容区的左上角为原始点结合TRBL属性进行定位 (或者说相对于被定位元素在父级内容区中的上一个元素进行偏移) ,无父级则以BODY的左上角为原始点。相对定位是不能层叠的。在使用相对定位时,无论元素是否进行移动,元素依然占据原来的空间。因此,移动元素会导致它覆盖其他框。 一般来讲,网页居中的话用Absolute就容易出错,因为网页一直是随着分辨率的大小自动适应的,而Absolute则会以浏览器的左上角为原始点,不会应为分辨率的变化而变化位置。有时还需要依靠z-index来设定容器的上下关系,数值越大越在最上面,数值范围是自然数。当然有一点要注意,父子关系是无法用z-index来设定上下关系的,一定是子级在上父级在下。 设置此属性值为 relative 会保持对象在正常的HTML流中,但是它的位置可以根据它的前一个对象进行偏移。在相对(relative)定位对象之后的文本或对象占有他们自己的空间而不会覆盖被定位对象的自然空间。与此不同的,在绝对(absolute)定位对象之后的文本或对象在被定位对象被拖离正常文档流之前会占有它的自然空间。放置绝对(absolute)定位对象在可视区域之外会导致滚动条出现。而放置相对(relative)定位对象在可视区域之外,滚动条不会出现。其实对于定位的主要问题是要记住每个定位的意义。相对定位是"相对于"元素在文档流中初始位置的,而绝对定位是"相对于"最近的已经定位的祖先元素

2011-09-07 · 1 min · 52 words · -

Resume, CV

Resume, CV 有的学校把简历叫做resume,另一些叫做Curriculum Vitae,这中间到底有什么差别呢?resume通常更接近求职简历,即把自己所有经历中与目标职位相关性最大的经历筛选出来,展示在自己的简历中;而CV呢,翻译成中文更确切的来讲叫做“个人履历”或“个人履历表”。单听这个名字我们就知道了,CV更多的是把自己过去所有的经历按照时间顺序逐条罗列,比较机械呆板,一般用于学术圈。但是,回到留学申请这个原本的话题上来,即便不同学校对于简历的称呼不同,我们也并不需要区别对待,也就是这个细微的差别,对于申请这件事来讲,可以忽略不计。简历要写什么内容?简历要有抬头,抬头要写姓名和联系方式,电话、邮箱、邮寄地址。简历主体部分要写教育背景、实习/科研/工作经历、项目经历、课外活动、奖项荣誉、专业技能、获得证书、语言能力等等。但并不是一份简历要把上面这些item都写全的。一是根据个人实际背景经历情况筛选,二是根据申请目标专业来具体分析。比方说我申请教育学,那么语言能力就显得尤为重要,但我申请计算机,显然更重要的是在专业技能这个item下展示自己掌握了哪些编程语言及计算机软件。 作者:杜建虎 链接:https://www.zhihu.com/question/20355548/answer/1883548833 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 CV是履历,Resume是简历。Resume,简述于求职相关的教育背景和工作经历,其目的在于说服用人单位雇用自己; CV,Curriculum Vitae CV是集中说明学术工作,不重视与文化程度和学习成绩无直接关系的资料。CV的完整形式是拉丁文Curriculum Vitae,在美国,CV主要是用于申请学术、教育、科研职位,或者申请奖学金等等,而在欧洲、中东、非洲和亚洲等地,CV则更常用于应征工作。CV的长度由其内容确定,有时可长达十页,年轻专业人的履历一般长度都在2—4页,而老资历的通常也在6—8页。应包括:姓名、地址、电话号码及电子邮件地址;文化程度;受何奖励和大学奖学金;教学经历相关经历;有何论著发表;语言或其它技能,课外活动及个人爱好。Resume,大多只需一页大小,而有两页的对具有广泛的工作经验的人才有典型性。应包括:姓名、地址、电子信箱 (可选)和电话号码 (当地和固定的);工作岗位 (可选) ;教育;获何荣誉奖励;有关功课 (可选);经历,列出组织、地址、日期、工作名称、成绩和职责简述。 作者:SongNannnnnn 链接:https://www.zhihu.com/question/20355548/answer/14871763 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 在99%的情况下,对方找你要CV和对方找你要Resume,他们想要的东西是一模一样的:你的简历。最好白纸黑字,最好一页纸,最好PDF。In 99% of the situations when someone says, “Can you send over your CV?" or “Can you send me your resume?” they mean the exact same thing. 作者:朱英楠David 链接:https://www.zhihu.com/question/20355548/answer/91783206 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2011-09-07 · 1 min · 53 words · -

Actor 模型, Actor model

Actor 模型, Actor model 使用actor就像租车——我们如果需要,可以快速便捷地租到一辆;如果车辆发生故障,也不需要自己修理,直接打电话给租车公司更换另外一辆即可。 摘录来自: [美] Paul Butcher. “七周七并发模型。” actor类似于面向对象 (OO)编程中的对象——其封装了状态,并通过消息与其他actor通信。 在面向对象中,我们使用方法调用的方式去传递信息,而在actor中,则使用发送消息去传递信息。 在actor模型中,actor是一个最小的计算单元。 虽然在actor中保留了可变状态,但是其并不和其他actor共享,actor的私有变量不会被其他actor直接更改。 actor模型中遵循以下几个原则: 所有的计算都是在actor中执行的 actor之间只能通过消息进行通信交流 为了响应消息,actor可以进行下列操作 更改状态或行为 发消息给其他actor 创建有限数量的子actor actor模型的好处 事件驱动模型 - actor使用异步消息的形式进行通信,在发消息后不会因等待回复而阻塞其他工作。 强隔离原则 - 和传统的java对象不同,actor不提供公共的api方法供外部调用。相反,其仅通过消息的形式对外提供服务。这样避免了actor之间的任何状态共享;获取一个actor状态的唯一做法就是发一个消息去询问他。 位置透明 - 系统使用工厂构建一个actor实例,并返回其引用。由于位置无关紧要,Actor实例可以启动,停止,移动和重启以进行扩容/缩容,或从意外故障中恢复。 轻量级 - 每个actor实例仅使用几百bytes,在单个应用程序中可以轻松创建百万个并发的actor。 任其崩溃 在传统的模型中,我们往往会尽可能的考虑到各种情况,对入参格式,类型做各种各样的校验,容错。这样混入了大量业务无关代码,使得代码流程变得复杂,而没有明显错误 actor模型中对异常的遵循为"任其崩溃"哲学。不做防御性逻辑,而是让actor的管理者去处理这些问题。 因为actor之间是相互独立的,所以一个actor的崩溃不太可能会影响到其他actor。 没有了防御性代码,使逻辑更加简洁且容易理解。 由actor管理者可以选择崩溃处理方案,也可以不处理,仅记录崩溃原因。 面对故障,actor管理者有四种不同的可选方案: 恢复 (Resume)子 Actor,保持其已有的内部状态,但是忽略掉导致故障的消息; 重启 (Restart)子 Actor,通过启动新的实例,清理其已有的状态; 永久停止 (Stop)子 Actor,将子 Actor 未来所有的消息发送至 Dead-Letter Office ; 将故障传递至更高的层级 (Escalate),这需要让监管者本身也发生故障。 作者:一缕阳光同志88274 链接:https://juejin.cn/post/6844904056649940999 来源:稀土掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 作者:一缕阳光同志88274 链接:https://juejin.cn/post/6844904056649940999 来源:稀土掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 作者:一缕阳光同志88274 链接:https://juejin.cn/post/6844904056649940999 来源:稀土掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 ...

2011-09-06 · 2 min · 361 words · -

zoom

zoom Zoom国际版 Zoom国际版,顾名思义,全球使用,支持15个数据中心相互通信。 Zoom国际版启动的数据中心在美国,中国用户无法安排 (发起)会议。 会议的发起者即便是在海外,没有选择中国数据中心 (非默认选项),那么国内的参会者将无法加入到会议中,一般显示错误代码1044,,或是102005、104101、104118、103011等。 国内客户只能使用vpn,否则将无法参会。 Zoom中国版 (国内版) 直联电信、移动、联通三大运营商的主干网,并由阿里云、百度云、华为云、腾讯云这四家云服务商提供数据加密和网关安全等服务。 非法的Zoom开发版 (第三方) http://www.zoom-chn.com/index.php/fuwuxiangmu/21.html

2011-09-06 · 1 min · 14 words · -

junit performance test

junit performance test http://databene.org/contiperf.html @Rule public ContiPerfRule i = new ContiPerfRule(); @Test @PerfTest(invocations = 5) @Required(max = 9000, average = 8000) invocation sequence: constructor() before() test1() test1() after() constructor() before() test2() test2() after()

2011-09-06 · 1 min · 33 words · -

java 日期/date time

java 日期/date time 日期计算 Calendar cal = Calendar.getInstance();//使用默认时区和语言环境获得一个日历。 cal.add(Calendar.DAY_OF_MONTH, -1);//取当前日期的前一天. cal.add(Calendar.DAY_OF_MONTH, +1);//取当前日期的后一天. //通过格式化输出日期 java.text.SimpleDateFormat format = new java.text.SimpleDateFormat(“yyyy-MM-dd”); System.out.println(“Today is:"+format.format(Calendar.getInstance().getTime())); System.out.println(“yesterday is:"+format.format(cal.getTime())); 得到2007-12-25日期: y 年 Year 1996; 96 M 年中的月份 Month July; Jul; 07 d 月份中的天数 Number 10 H 一天中的小时数 (0-23) Number 0 m 小时中的分钟数 Number 30 s 分钟中的秒数 Number 55 S 毫秒数 Number 978 java 8 日期/date time http://www.wiloon.com/?p=8834&embed=true#?secret=RA1Eqnm13T joda-time, ThreeTen Backport http://www.wiloon.com/?p=3269&embed=true#?secret=qXtE3cmQSt SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd hh:mm:ss.SSS”); ...

2011-09-06 · 2 min · 235 words · -

java zip

java zip package com.wiloon.et; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class ZipTest { static final int BUFFER = 2048; static String source = “D:/exported/”; static String destinationPath = “//x.x.x.x/share/xxx/”; static String fileName = “0000-0999.zip”; public static void main(String argv[]) { try { BufferedInputStream origin = null; FileOutputStream dest = new FileOutputStream(destinationPath fileName); ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream( dest)); byte data[] = new byte[BUFFER]; ...

2011-09-06 · 1 min · 141 words · -

loom

loom Oracle 已经停止了异步的JDBC (ADBA) 标准的相关工作。这传达了一个相当明确而又重要的信息: (在Java平台上)fiber 是未来的方向,而异步不是。Oracle 认为异步程序太难写难调,因此全力转向同步的方案 ( 注意这个帖子混用了 fiber 和 lightweight thread 这两个术语,后面的Ron用的术语是 lightweight virtual thread ) On Wednesday, September 18, at Oracle CodeOne Oracle announced that Oracle will stop work on ADBA (Asynchronous Database Access) The Java team’s position is that synchronous code is easier to write, test, debug, maintain, and understand than async code. The only reason to write async code is that threads are so expensive. Project Loom will add fibers, very lightweight threads, to Java. Fibers are so light weight that it is completely practical to spin up as many as you need. So just write first semester CS synchronous code and and execute it on a dedicated fiber. This is much easier than writing async code to do the same task. Synchronous code will use the same JDBC we all know and love. No need to learn a new API. Existing code can be made to work with few if any changes. ...

2011-09-04 · 1 min · 186 words · -

jdk中的jar包, rt.jar ,dt.jar ,tool.jar

jdk中的jar包, rt.jar ,dt.jar ,tool.jar 重点包 rt.jar : 运行时包 dt.jar: dt.jar是关于运行环境的类库 tools.jar: tools.jar是工具类库,编译和运行需要的都是toos.jar里面的类分别是sun.tools.java. ; sun.tols.javac.; charsets.jar: Java 字符集,这个类库中包含 Java 所有支持字符集的字符 cldrdata.jar: http://cldr.unicode.org/ CLDR - Unicode Common Locale Data Repository deploy.jar: deploy.jar是Java部署堆栈的一部分,用于applet和Webstart应用程序。 deploy.jar是Java安装目录的常见部分 - 该文件运行某些产品的安装。 正确设置Java路径后,用户可以执行此文件 (只需双击它或按文件上的Enter键) ,要部署的应用程序将运行其安装程序。 例如。 诺基亚OVI套件通常使用这种部署形式。 作为彼此的JAVA包,如果您将其重命名为ZIP并打开内容,则可以检查包中的类。 dnsns.jar:与 DNS 有关 jaccess.jar: Java Access Bridge is a technology that exposes the Java Accessibility API in a Microsoft Windows DLL, enabling Java applications and applets that implement the Java Accessibility API to be visible to assistive technologies on Microsoft Windows systems. Java Accessibility API is part of Java Accessibility Utilities, which is a set of utility classes that help assistive technologies provide access to GUI toolkits that implement the Java Accessibility API. Java Access Bridge是一种在Microsoft Windows DLL中公开Java Accessibility API的技术,使实现Java Accessibility API的Java应用程序和applet对Microsoft Windows系统上的辅助技术可见。 Java Accessibility API是Java Accessibility Utilities的一部分,它是一组实用程序类,可帮助辅助技术提供对实现Java Accessibility API的GUI工具包的访问。 ...

2011-08-30 · 3 min · 516 words · -

tar

tar tar tar [-cxtzjvfpPN] 文件与目录 …. 参数: -z : 是否同时具有 gzip 的属性?亦即是否需要用 gzip 压缩? -x : 解开一个压缩文件的参数指令! -v : 压缩的过程中显示文件!这个常用,但不建议用在背景执行过程! -f : 使用档名,请留意,在 f 之后要立即接档名喔!不要再加参数! 例如使用『 tar -zcvfP tfile sfile』就是错误的写法,要写成 『 tar -zcvPf tfile sfile』才对喔! -c : 建立一个压缩文件的参数指令(create 的意思); -t : 查看 tarfile 里面的文件! 特别注意,在参数的下达中, c/x/t 仅能存在一个!不可同时存在! 因为不可能同时压缩与解压缩。 -j : 是否同时具有 bzip2 的属性?亦即是否需要用 bzip2 压缩? -p : 使用原文件的原来属性 (属性不会依据使用者而变) -P : 可以使用绝对路径来压缩! -N : 比后面接的日期(yyyy/mm/dd)还要新的才会被打包进新建的文件中! -exclude FILE: 在压缩的过程中,不要将 FILE 打包! ...

2011-08-30 · 2 min · 273 words · -

加减乘除,大于,小于,等于,分数,小数和百分数英文表达

加减乘除,大于,小于,等于,分数,小数和百分数英文表达 add (+), subtract (-), multiply (*), and divide (/) 加减乘除: + - × ÷ 加+: plus 减-: minus 乘×: times 除÷: divided 不等号和等号: > ≥ < ≤ ≠ = 大于>: is greater than 大于等于 (不小于) ≥: is more than or equal to / is no less than 小于<: is less than 小于等于 (不大于) ≤: is less than or equal to / is no more than 不等于≠: is not equal to 等于=: equals 例句: 1、12+36=48: Twelve plus thirty-six is forty-eight. 2、10-4=6: Ten minus four is six. / Ten minus four equals four. 3、5×5=25: Five times five is twenty-five. 4、20÷4=5: Twenty divided by four is five. 5、5>1: Five is greater than one. ...

2011-08-29 · 1 min · 206 words · -