把网络共享怎么设置设置900ab共享以后。就这么wwW900abcom也登不上网占了

更多相关文档互联网笔记互联网笔记不定期更新互联网技术文章、产品研究、工具干货。关注专栏Java{&debug&:false,&apiRoot&:&&,&paySDK&:&https:\u002F\u002Fpay.zhihu.com\u002Fapi\u002Fjs&,&wechatConfigAPI&:&\u002Fapi\u002Fwechat\u002Fjssdkconfig&,&name&:&production&,&instance&:&column&,&tokens&:{&X-XSRF-TOKEN&:null,&X-UDID&:null,&Authorization&:&oauth c3cef7c66aa9e6a1e3160e20&}}{&database&:{&Post&:{&&:{&title&:&Java 面试题问与答:编译时与运行时&,&author&:&amin706&,&content&:&\u003Cblockquote\u003E\u003Cp\u003E英文:java-success\u003C\u002Fp\u003E\u003Cp\u003E译文:朱伟杰 \u003C\u002Fp\u003E\u003Cp\u003E链接:\u003Ca href=\&http:\u002F\u002Fwww.importnew.com\u002F1796.html\& data-editable=\&true\& data-title=\&Java 面试题问与答:编译时与运行时\&\u003EJava 面试题问与答:编译时与运行时\u003C\u002Fa\u003E\u003C\u002Fp\u003E\u003C\u002Fblockquote\u003E\u003Cbr\u003E\u003Cp\u003E在开发和设计的时候,我们需要考虑编译时,运行时以及构建时这三个概念。理解这几个概念可以更好地帮助你去了解一些基本的原理。下面是初学者晋级中级水平需要知道的一些问题。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003EQ.下面的代码片段中,行A和行B所标识的代码有什么区别呢?\u003C\u002Fp\u003E\u003Ccode lang=\&text\&\u003Epublic class ConstantFolding { \n
static final
int number1 = 5; \n
static final
int number2 = 6; \n
static int number3 = 5; \n
static int number4= 6; \n
public static void main(String[ ] args) { \n
int product1 = number1 * number2;
\u002F\u002Fline A\n\n
int product2 = number3 * number4;
\u002F\u002Fline B\n\n
}\n\n}\n\u003C\u002Fcode\u003E\u003Cp\u003EA.在行A的代码中,product的值是在编译期计算的,行B则是在运行时计算的。如果你使用Java反编译器(例如,jd-gui)来反编译ConstantFolding.class文件的话,那么你就会从下面的结果里得到答案。\u003Cbr\u003E\u003C\u002Fp\u003E\u003Ccode lang=\&text\&\u003Epublic class ConstantFolding\n{
static final int number1 = 5;
static final int number2 = 6;
static int number3 = 5;
static int number4 = 6; \n\n
public static void main(String[ ] args)\n
int product1 = 30;
int product2 = number3 * number4;\n
}\n}\n\u003C\u002Fcode\u003E\u003Cp\u003E常量折叠是一种Java编译器使用的优化技术。由于final变量的值不会改变,因此就可以对它们优化。Java反编译器和javap命令都是查看编译后的代码(例如,字节码)的利器。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003EQ.你能想出除了代码优化外,在什么情况下,查看编译过的代码是很有帮助的?\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003EA.Java里的泛型是在编译时构造的,可以通过查看编译后的class文件来理解泛型,也可以通过查看它来解决泛型相关的问题。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003EQ.下面哪些是发生在编译时,运行时,或者两者都有?\u003C\u002Fp\u003E\u003Cp\u003E方法重载:这个是发生在编译时的。方法重载也被称为编译时多态,因为编译器可以根据参数的类型来选择使用哪个方法。\u003Cbr\u003E\u003C\u002Fp\u003E\u003Ccode lang=\&text\&\u003Epublic class {\n
public static void evaluate(String param1);
\u002F\u002F method #1\n
public static void evaluate(int param1);
\u002F\u002F method #2}\n\u003C\u002Fcode\u003E\u003Cp\u003E如果编译器要编译下面的语句的话:\u003Cbr\u003E\u003C\u002Fp\u003E\u003Ccode lang=\&text\&\u003Eevaluate(“My Test Argument passed to param1”);\n\u003C\u002Fcode\u003E\u003Cp\u003E它会根据传入的参数是字符串常量,生成调用#1方法的字节码\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E方法覆盖:这个是在运行时发生的。方法重载被称为运行时多态,因为在编译期编译器不知道并且没法知道该去调用哪个方法。JVM会在代码运行的时候做出决定。\u003C\u002Fp\u003E\u003Ccode lang=\&text\&\u003Epublic class A {\n
public int compute(int input) {
\u002F\u002Fmethod #3\n
return 3 *\n
\n} \n\npublic class B extends A {\n
@Override\n
public int compute(int input) {
\u002F\u002Fmethod #4\n
return 4 *\n
\n}\n\u003C\u002Fcode\u003E\u003Cp\u003E子类B中的compute(..)方法重写了父类的compute(..)方法。如果编译器遇到下面的代码:\u003Cbr\u003E\u003C\u002Fp\u003E\u003Ccode lang=\&text\&\u003Epublic int evaluate(A reference, int arg2)
int result = reference.compute(arg2);\n}\n\u003C\u002Fcode\u003E\u003Cp\u003E编译器是没法知道传入的参数reference的类型是A还是B。因此,只能够在运行时,根据赋给输入变量“reference”的对象的类型(例如,A或者B的实例)来决定调用方法#3还是方法#4.\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E泛型(又称类型检验):这个是发生在编译期的。编译器负责检查程序中类型的正确性,然后把使用了泛型的代码翻译或者重写成可以执行在当前JVM上的非泛型代码。这个技术被称为“类型擦除“。换句话来说,编译器会擦除所有在尖括号里的类型信息,来保证和版本1.4.0或者更早版本的JRE的兼容性。\u003C\u002Fp\u003E\u003Ccode lang=\&text\&\u003EList&String& myList = new ArrayList&String&(10);\n\u003C\u002Fcode\u003E\u003Cp\u003E编译后成为了:\u003Cbr\u003E\u003C\u002Fp\u003E\u003Ccode lang=\&text\&\u003EList myList = new ArrayList(10);\n\u003C\u002Fcode\u003E\u003Cp\u003E注解(Annotation):你可以使用运行时或者编译时的注解。\u003Cbr\u003E\u003C\u002Fp\u003E\u003Ccode lang=\&text\&\u003Epublic class B extends A {\n
@Override\n
public int compute(int input){
\u002F\u002Fmethod #4\n
return 4 *\n
\n}\n\u003C\u002Fcode\u003E\u003Cp\u003E@Override是一个简单的编译时注解,它可以用来捕获类似于在子类中把toString()写成tostring()这样的错误。在Java 5中,用户自定义的注解可以用注解处理工具(Anotation Process Tool ——APT)在编译时进行处理。到了Java 6,这个功能已经是编译器的一部分了。\u003Cbr\u003E\u003C\u002Fp\u003E\u003Ccode lang=\&text\&\u003Epublic class MyTest{\n
public void testEmptyness( ){\n
org.junit.Assert.assertTrue(getList( ).isEmpty( ));\n
private List getList( ){\n
\u002F\u002Fimplemenation goes here\n
}\n}\n\u003C\u002Fcode\u003E\u003Cp\u003E@Test是JUnit框架用来在运行时通过反射来决定调用测试类的哪个(些)方法的注解。\u003Cbr\u003E\u003C\u002Fp\u003E\u003Ccode lang=\&text\&\u003E@Test (timeout=100)\npublic void testTimeout( ) {\n
while(true);
\u002F\u002Finfinite loop\n}\n\u003C\u002Fcode\u003E\u003Cp\u003E如果运行时间超过100ms的话,上面的测试用例就会失败。\u003Cbr\u003E\u003C\u002Fp\u003E\u003Ccode lang=\&text\&\u003E@Test (expected=IndexOutOfBoundsException.class)\npublic void testOutOfBounds( ) {\n
new ArrayList&Object&( ).get(1);\n}\n\u003C\u002Fcode\u003E\u003Cp\u003E如果上面的代码在运行时没有抛出IndexOutOfBoundsException或者抛出的是其他的异常的话,那么这个用例就会失败。用户自定义的注解可以在运行时通过Java反射API里新增的AnnotatedElement和”Annotation”元素接口来处理。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E异常(Exception):你可以使用运行时异常或者编译时异常。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E运行时异常(RuntimeException)也称作未检测的异常(unchecked exception),这表示这种异常不需要编译器来检测。RuntimeException是所有可以在运行时抛出的异常的父类。一个方法除要捕获异常外,如果它执行的时候可能会抛出RuntimeException的子类,那么它就不需要用throw语句来声明抛出的异常。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E例如:NullPointerException,ArrayIndexOutOfBoundsException,等等\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E受检查异常(checked exception)都是编译器在编译时进行校验的,通过throws语句或者try{}cathch{} 语句块来处理检测异常。编译器会分析哪些异常会在执行一个方法或者构造函数的时候抛出。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E面向切面的编程(Aspect Oriented Programming-AOP):切面可以在编译时,运行时或,加载时或者运行时织入。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E1.编译期:编译期织入是最简单的方式。如果你拥有应用的代码,你可以使用AOP编译器(例如,ajc – AspectJ编译器)对源码进行编译,然后输出织入完成的class文件。AOP编译的过程包含了waver的调用。切面的形式可以是源码的形式也可以是二进制的形式。如果切面需要针对受影响的类进行编译,那么你就需要在编译期织入了。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cbr\u003E\u003Cp\u003E2.编译后:这种方式有时候也被称为二进制织入,它被用来织入已有的class文件和jar文件。和编译时织入方式相同,用来织入的切面可以是源码也可以是二进制的形式,并且它们自己也可以被织入切面。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cbr\u003E\u003Cp\u003E3.装载期:这种织入是一种二进制织入,它被延迟到JVM加载class文件和定义类的时候。为了支持这种织入方式,需要显式地由运行时环境或者通过一种“织入代理(weaving agent)“来提供一个或者多个“织入类加载器(weaving class loader)”。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cbr\u003E\u003Cp\u003E4.运行时:对已经加载到JVM里的类进行织入\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E继承 – 发生在编译时,因为它是静态的\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E代理或者组合 – 发生在运行时,因为它更加具有动态性和灵活性。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003EQ.你有没有听说过“组合优于继承”这样的说法呢?如果听说过的话,那么你是怎么理解的呢?\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003EA.继承是一种多态工具,而不是一种代码复用工具。有些开发者喜欢用继承的方式来实现代码复用,即使是在没有多态关系的情况下。是否使用继承的规则是继承只能用在类之间有“父子”关系的情况下。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E1.不要仅仅为了代码复用而继承。当你使用组合来实现代码复用的时候,是不会产生继承关系的。过度使用继承(通过“extends”关键字)的话,如果修改了父类,会损坏所有的子类。这是因为子类和父类的紧耦合关系是在编译期产生的。\u003C\u002Fp\u003E\u003Cp\u003E2.不要仅仅为了多态而继承。如果你的类之间没有继承关系,并且你想要实现多态,那么你可以通过接口和组合的方式来实现,这样不仅可以实现代码重用,同时也可以实现运行时的灵活性。\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E这就是为什么(Gang of Four)的设计模式里更倾向于使用组合而不是继承的原因。面试者会在你的答案里着重关注这几个词语——“耦合”,“静态还是动态”,以及“发生在编译期还是运行时”。运行时的灵活性可以通过组合来实现,因为类可以在运行时动态地根据一个结果有条件或者无条件地进行组合。但是继承却是静态的。\u003C\u002Fp\u003E\u003Cp\u003EQ.你能够通过实例来区别编译期继承和运行时继承,以及指出Java支持哪种吗?\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003EA.“继承”表示动作和属性从一个对象传递到另外一个对象的场景。Java语言本身只支持编译期继承,它是通过“extends”关键字来产生子类的方式实现的,如下所示:\u003C\u002Fp\u003E\u003Cbr\u003E\u003Ccode lang=\&text\&\u003Epublic class Parent {\n
public String saySomething( ) {\n
return “Parent is called”;\n
}\n} \n\npublic class Child extends Parent {\n
@Override\n
public String saySomething( ) {\n
return super.saySomething( ) +
“, Child is called”;\n
}\n}\n\u003C\u002Fcode\u003E\u003Cp\u003E“Child”类的saySomething()方法的调用会返回“Parent is called,Child is Called”,因为,子类的调用继承了父类的“Parenet is called”。关键字“super”是用来调用“Parent”类的方法。运行时继承表示在运行时构建父\u002F子类关系。Java语言本身不支持运行时继承,但是有一种替代的方案叫做“代理”或者“组合”,它表示在运行时组件一个层次对象的子类。这样可以模拟运行时继承的实现。在Java里,代理的典型实现方式如下:\u003Cbr\u003E\u003C\u002Fp\u003E\u003Ccode lang=\&text\&\u003Epublic class Parent {\n
public String saySomething( ) {\n
return “Parent is called”;\n
}\n} \n\npublic class Child
public String saySomething( ) {\n
return new Parent( ).saySomething( ) +
“, Child is called”;\n
}\n}\n\u003C\u002Fcode\u003E\u003Cp\u003E子类代理了父类的调用。组合可以按照下面的方式来实现:\u003Cbr\u003E\u003C\u002Fp\u003E\u003Ccode lang=\&text\&\u003Epublic class Child
private Parent parent = \n\n
public Child( ){\n
this.parent = new Parent( );\n
public String saySomething( ) {\n
return this.parent.saySomething( ) +
“, Child is called”;\n
}\n}\n\u003C\u002Fcode\u003E\u003Cimg src=\&v2-18bbdf95c25bca.jpg\& data-rawwidth=\&900\& data-rawheight=\&500\&\u003E&,&updated&:new Date(&T12:44:53.000Z&),&canComment&:false,&commentPermission&:&anyone&,&commentCount&:11,&likeCount&:111,&state&:&published&,&isLiked&:false,&slug&:&&,&isTitleImageFullScreen&:false,&rating&:&none&,&sourceUrl&:&&,&publishedTime&:&T20:44:53+08:00&,&links&:{&comments&:&\u002Fapi\u002Fposts\u002F2Fcomments&},&url&:&\u002Fp\u002F&,&titleImage&:&https:\u002F\u002Fpic2.zhimg.com\u002Fv2-0ade82c52c776da48f4bec58_r.jpg&,&summary&:&&,&href&:&\u002Fapi\u002Fposts\u002F&,&meta&:{&previous&:null,&next&:null},&snapshotUrl&:&&,&commentsCount&:11,&likesCount&:111},&&:{&title&:&我的Java后端书架&,&author&:&amin706&,&content&:&\u003Cblockquote\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\u002Fcalvin1978.blogcn.com\u002Farticles\u002Fbookshelf16.html?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io\& data-title=\&原文链接\&\u003E原文链接\u003C\u002Fa\u003E\u003C\u002Fp\u003E\u003Cp\u003E作者:calvin\u003C\u002Fp\u003E\u003C\u002Fblockquote\u003E\u003Cp\u003E本书架主要针对Java后端开发与架构。\u003C\u002Fp\u003E\u003Cp\u003E更新记录:4.0版把第五部份-具体技术的书整块拿掉了。《TCP\u002FIP详解 卷1:协议》出到了第二版,增加《SRE:Google运维解密》,《Java8 实战》。\u003C\u002Fp\u003E\u003Cp\u003E更偏爱那些能用简短流畅的话,把少壮不努力的程序员所需的基础补回来的薄书,而有些教课书可能很著名,但干涩枯燥,喋喋不休的把你带回到大学课堂上昏昏欲睡,不录。\u003Cbr\u003E\u003C\u002Fp\u003E\u003Ch1\u003E\u003Cb\u003E1. 操作系统与网络的书\u003C\u002Fb\u003E\u003C\u002Fh1\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《Linux内核设计与实现 第3版》\&\u003E《Linux内核设计与实现 第3版》\u003C\u002Fa\u003E\u003Cbr\u003ERobert Love用最薄的篇幅,顺畅的文字将Linux内核主要的算法讲清楚了,\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《深入理解Linux内核》\&\u003E《深入理解Linux内核》\u003C\u002Fa\u003E,\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《深入Linux内核架构》\&\u003E《深入Linux内核架构》\u003C\u002Fa\u003E之类厚厚的全是代码,不是专门的内核程序员看这本足够了。\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《Linux系统编程 第2版》\&\u003E《Linux系统编程 第2版》\u003C\u002Fa\u003E\u003Cbr\u003E继续是Robert Love,比起APUE也是以薄见长,专门针对重要的系统调用讲解。\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《性能之巅》\&\u003E《性能之巅》\u003C\u002Fa\u003E\u003Cbr\u003E操作系统的性能调优、监控、工具和方法论,看这本就够了,已经足够厚,可能是书单里最厚的一本。\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《TCP\u002FIP详解 卷1:协议》\&\u003E《TCP\u002FIP详解 卷1:协议》\u003C\u002Fa\u003E\u003Cbr\u003E这么多年过去了,TCP的书好像主要还是只有这一本,有点旧了,看了也还是半懂不懂的。后人在2011年写了第二版。\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca href=\&https:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《WireShark网络分析就这么简单》\&\u003E《WireShark网络分析就这么简单》\u003C\u002Fa\u003E\u003Ca href=\&https:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《WireShark网络分析的艺术》\&\u003E《WireShark网络分析的艺术》\u003C\u002Fa\u003E\u003C\u002Fp\u003E多少人,是看了这两本轻松又实战的书,才真正理解TCP的细节。\u003Cimg src=\&v2-620a2babbe7da51c255d.png\& data-rawwidth=\&418\& data-rawheight=\&192\&\u003E\u003Cimg src=\&v2-388e2c4caa6efb3faa5ad5c.png\& data-rawwidth=\&296\& data-rawheight=\&212\&\u003E\u003Cbr\u003E\u003Cp\u003EPS:\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《UNIX环境高级编程》\&\u003E《UNIX环境高级编程》\u003C\u002Fa\u003E和\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《UNIX网络编程》\&\u003E《UNIX网络编程》\u003C\u002Fa\u003E,APUE和UNP更多作为一本超厚工具书存在。\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《Unix 编程艺术》\&\u003E《Unix 编程艺术》\u003C\u002Fa\u003E,扯的都是闲篇,厚厚的一本其实略读一下就行。 \u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《现代操作系统 第3版》\&\u003E《现代操作系统 第3版》\u003C\u002Fa\u003E如果看LKD未尽兴,可以回头看看这本基础概念,感觉比那本枯燥的\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《操作系统概念》\&\u003E《操作系统概念》\u003C\u002Fa\u003E(恐龙书)读起来舒服。\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\u002Ftcpipguide.com\u002Ffree\u002Ft_toc.htm\& data-editable=\&true\& data-title=\&《TCP\u002FIP指南》\&\u003E《TCP\u002FIP指南》\u003C\u002Fa\u003E 前面wireshark书作者的推荐,网上有英文免费版,然后有中文版的\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&卷1\&\u003E卷1\u003C\u002Fa\u003E和\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&卷2\&\u003E卷2\u003C\u002Fa\u003E,但可能那么多章节那么厚你只关心TCP和HTTP两部分。\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《HTTP权威指南》\&\u003E《HTTP权威指南》\u003C\u002Fa\u003E,同样是自己从厚厚的目录里挑选感兴趣的章节来看。\u003C\u002Fp\u003E\u003Cp\u003E另外,那些日本韩国人写的《图解XXX》感觉都不喜欢。\u003C\u002Fp\u003E\u003Ch1\u003E\u003Cb\u003E2. 算法的书\u003C\u002Fb\u003E\u003C\u002Fh1\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《数据结构与算法分析-Java语言描述 第3版》\&\u003E《数据结构与算法分析-Java语言描述 第3版》\u003C\u002Fa\u003E\u003Cbr\u003E够薄,数据结构与算法分析的点基本都涵盖了,而且喜欢它的示例代码是Java写的,新出了第3版。\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《算法 第4版》\&\u003E《算法 第4版》\u003C\u002Fa\u003E\u003Cbr\u003E可与上一本对比着读,厚一些,也多些图,但知识点没上面的全,也是Java的。\u003C\u002Fp\u003E\u003Cimg src=\&v2-c22c1e1d497e5e044bcbc.png\& data-rawwidth=\&342\& data-rawheight=\&176\&\u003E\u003Cbr\u003E\u003Cp\u003EPS: \u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《数学之美》\&\u003E《数学之美》\u003C\u002Fa\u003E、\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《编程珠玑》\&\u003E《编程珠玑》\u003C\u002Fa\u003E,都是专栏文章,讲得并不系统,可以当兴趣读物来看。\u003C\u002Fp\u003E\u003Cp\u003E数学系偏爱无比枯燥很多公式的\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F\& data-editable=\&true\& data-title=\&《算法导论》\&\u003E《算法导论》\u003C\u002Fa\u003E, 计算机系喜欢这本实用主义的\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《算法设计与分析基础 第3版》\&\u003E《算法设计与分析基础 第3版》\u003C\u002Fa\u003E。\u003C\u002Fp\u003E\u003Ch1\u003E\u003Cb\u003E3. 架构设计的书\u003C\u002Fb\u003E\u003C\u002Fh1\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《软件系统架构:使用视点和视角与利益相关者合作 第2版》\&\u003E《软件系统架构:使用视点和视角与利益相关者合作 第2版》\u003C\u002Fa\u003E\u003Cbr\u003E也是教科书,最难得的是,这本老书在十年后的去年升级了第二版,所以感觉鲜活了好多,也许是最鲜活的一本架构书。\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《恰如其分的软件架构 - 风险驱动的设计方法》\&\u003E《恰如其分的软件架构 - 风险驱动的设计方法》\u003C\u002Fa\u003E\u003Cbr\u003E由于人类与生俱来的惰性,计算机原本科学的、精准的设计方式,有了敏捷的借口之后就很难再维持了。本书就是在这种背景下,提出由风险来决定设计的度。除了开始的风险驱动部分,其余部分就是规规矩矩标标准准的架构师教科书。\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《SRE:Google运维解密》\&\u003E《SRE:Google运维解密》\u003C\u002Fa\u003E\u003Cbr\u003E广告词是 “地球上有这么一个团队,将运维推向极限高度”,稍嫌标题党,很多值得翻的东西。\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《发布!软件的设计与部署》\&\u003E《发布!软件的设计与部署》\u003C\u002Fa\u003E\u003Cbr\u003E关于高可靠性的软件,学校里不会教,出来社会却要面对的那部分,英文的原标题更清晰。\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《大型网站技术架构:核心原理与案例分析》\&\u003E《大型网站技术架构:核心原理与案例分析》\u003C\u002Fa\u003E\u003Cbr\u003E淘宝出品,大型互联网站的科普入门书。\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《高扩展性网站的50条原则》\&\u003E《高扩展性网站的50条原则》\u003C\u002Fa\u003E\u003Cbr\u003E同是入门级读物,如果还有个高可用50条原则,那就齐了。\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《微服务设计》\&\u003E《微服务设计》\u003C\u002Fa\u003E\u003Cbr\u003E那么多微服务的书,还是这本比较不像赚快钱的。\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《大数据日知录》\&\u003E《大数据日知录》\u003C\u002Fa\u003E\u003Cbr\u003E前几年参加各种技术会议,CAP,最终一致性,RWN,向量时钟,Paxos,一致性哈希,Gossip什么的能灌你一耳朵。而现在,你只要在家安安静静的看书就够了。不过这个领域发展太快,又一年过去了,期望它可以持续出新版。\u003C\u002Fp\u003E\u003Cimg src=\&v2-583dac34b80c023f7e552e1fd124883e.png\& data-rawwidth=\&310\& data-rawheight=\&239\&\u003E\u003Cimg src=\&v2-1fe6d031f64e27bc79b9.png\& data-rawwidth=\&303\& data-rawheight=\&212\&\u003E\u003Cimg src=\&v2-b02d94ea4aeadfc7c20a8e5.png\& data-rawwidth=\&302\& data-rawheight=\&222\&\u003E\u003Cimg src=\&v2-93e67add6a49ae284a1fa8.png\& data-rawwidth=\&310\& data-rawheight=\&221\&\u003E\u003Cbr\u003E\u003Cp\u003EPS: 关于设计模式,我以前曾经有过很多很多本,GOF23啦,企业应用架构模式啦,EIP啦, POSA 5卷本啦,反模式啦,JavaEE\u002FSOA\u002FRestful的模式啦。但现在觉得对新人来说,一本Java写的\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《Head First 设计模式》\&\u003E《Head First 设计模式》\u003C\u002Fa\u003E,知道什么叫设计模式就够了。\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《程序员必读之软件架构》\&\u003E《程序员必读之软件架构》\u003C\u002Fa\u003E作者维护着\u003Ca href=\&http:\u002F\u002Fcodingthearchitecture.com\u002F\& data-editable=\&true\& data-title=\&codingthearchitecture.com\&\u003Ecodingthearchitecture.com\u003C\u002Fa\u003E 。不过中文书名叫“必读”有点过。\u003C\u002Fp\u003E\u003Ch1\u003E\u003Cb\u003E4. Java语言的书\u003C\u002Fb\u003E\u003C\u002Fh1\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《Java并发编程实战》\&\u003E《Java并发编程实战》\u003C\u002Fa\u003E\u003Cbr\u003EJava并发经典,人手一本不用多说了。\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《实战Java高并发程序设计》\&\u003E《实战Java高并发程序设计》\u003C\u002Fa\u003E\u003Cbr\u003E国人新作,流畅易读,内容也比上面一本来得新。\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《Java8 实战》\&\u003E《Java8 实战》\u003C\u002Fa\u003E\u003Cbr\u003EJava8的新特性讲得最全最仔细的。\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《深入理解 Java 虚拟机 第2版》\&\u003E《深入理解 Java 虚拟机 第2版》\u003C\u002Fa\u003E\u003Cbr\u003E理解虚拟机并不是那么难,Java程序员来说,很多知识其实是必须的。另外还有几本类似主题的书,忽然一下子都出来了。\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《Java性能权威指南》\&\u003E《Java性能权威指南》\u003C\u002Fa\u003E\u003Cbr\u003E比起多年前那部调优圣经,讲得更加深入,也更加贴近现在的JDK。可以从里面挑些知识点来,做Java调优的面试题。\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《有效的单元测试》\&\u003E《有效的单元测试》\u003C\u002Fa\u003E\u003Cbr\u003E不同于那些动辄BDD的高深书籍,专注于如何写“好”的,可维护的单元测试,拿来给团队看,能省很多口水。\u003C\u002Fp\u003E\u003Cimg src=\&v2-f161c2c9f4d90f74ece8c5a29c5b4ea8.png\& data-rawwidth=\&632\& data-rawheight=\&207\&\u003E\u003Cimg src=\&v2-a814cc92af6d2d4be05d.png\& data-rawwidth=\&303\& data-rawheight=\&208\&\u003E\u003Cp\u003EPS:\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《Effective Java》\&\u003E《Effective Java》\u003C\u002Fa\u003E外界一致推崇,但有点太过誉了。另外\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《Thinking in Java》\&\u003E《Thinking in Java》\u003C\u002Fa\u003E有点旧了,而且作者思路随意,译者语言晦涩,新程序员还是建议同时再看两卷\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《Java核心技术 - Core Java》\&\u003E《Java核心技术 - Core Java》\u003C\u002Fa\u003E。\u003C\u002Fp\u003E\u003Ch1\u003E\u003Cb\u003E6. 程序员的自我修养\u003C\u002Fb\u003E\u003C\u002Fh1\u003E\u003Cp\u003EPS. 最近没买什么新书,随便说点旧书:\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《程序员修炼之道-从小工到专家》\&\u003E《程序员修炼之道-从小工到专家》\u003C\u002Fa\u003E,Pragmatic Programmer-注重实效的程序员开山之作,翻译的马达维文笔也和熊节一样好。\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《代码整洁之道》\&\u003E《代码整洁之道》\u003C\u002Fa\u003E和 \u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《程序员的职业素养》\&\u003E《程序员的职业素养》\u003C\u002Fa\u003E,英文名是很相近的《Clean Code》和 《Clean Coder》,应该接替\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《代码大全2》\&\u003E《代码大全2》\u003C\u002Fa\u003E成为必看的系列,因为后者太厚了,而且也有不少过时的东西,要自己去过滤。\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《重构》\&\u003E《重构》\u003C\u002Fa\u003E很厚,但最有价值就是前面几章的洗脑篇,具体实作不如薄薄的\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《重构手册》\&\u003E《重构手册》\u003C\u002Fa\u003E。\u003C\u002Fp\u003E\u003Cp\u003E关于敏捷的书,最开始的那本\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《解析极限编程--拥抱变化》\&\u003E《解析极限编程--拥抱变化》\u003C\u002Fa\u003E就很好,再随便找本Scrum的流程看看就够了,\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《敏捷开发的艺术》\&\u003E《敏捷开发的艺术》\u003C\u002Fa\u003E也不错。\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\u002Fbook.douban.com\u002Fsubject\u002F2F\& data-editable=\&true\& data-title=\&《布道之道》\&\u003E《布道之道》\u003C\u002Fa\u003E,经常在组织里推行新技术的同学可以看下,七种怀疑论者模式,脑海中一幅幅熟悉的面孔。\u003C\u002Fp\u003E\u003Cp\u003EPS. 温伯格的书网上很推崇,《成为技术领导者》之类的,但我觉得年代太远,读起来其实没多大意思,一两个鸡汤观点还要自己从书里慢慢淘,有那功夫不如看点别的。\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\u002Fcalvin1978.blogcn.com\u002Farticles\u002Fbookshelf16.html?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io\& data-editable=\&true\& data-title=\&阅读原文\&\u003E阅读原文\u003C\u002Fa\u003E\u003C\u002Fp\u003E\u003Cimg src=\&v2-18bbdf95c25bca.jpg\& data-rawwidth=\&900\& data-rawheight=\&500\&\u003E&,&updated&:new Date(&T13:44:33.000Z&),&canComment&:false,&commentPermission&:&anyone&,&commentCount&:33,&likeCount&:518,&state&:&published&,&isLiked&:false,&slug&:&&,&isTitleImageFullScreen&:true,&rating&:&none&,&sourceUrl&:&&,&publishedTime&:&T21:44:33+08:00&,&links&:{&comments&:&\u002Fapi\u002Fposts\u002F2Fcomments&},&url&:&\u002Fp\u002F&,&titleImage&:&https:\u002F\u002Fpic4.zhimg.com\u002Fv2-fad_r.jpg&,&summary&:&&,&href&:&\u002Fapi\u002Fposts\u002F&,&meta&:{&previous&:null,&next&:null},&snapshotUrl&:&&,&commentsCount&:33,&likesCount&:518},&&:{&title&:&Java 性能优化的五大技巧&,&author&:&amin706&,&content&:&\u003Cp\u003E英文:Dr. Michael J. Garbade\u003C\u002Fp\u003E\u003Cp\u003E译文:coyee\u003C\u002Fp\u003E\u003Cp\u003E链接:coyee.com\u002Farticle\u002F11118-5-great-java-performance-optimization-tricks\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E要对你的 java 代码进行优化,需要理解 java 不同要素之间的相互作用,以及它是如何与其运行时的操作系统进行交互的。使用下面这五个技巧和资源,开始学习如何分析和优化你的代码吧。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E在我们开始之前, 你也许会担心许可的问题. Java 为 Oracle 公司所有,遵循 Oracle 的 BCL 许可,该许可证不是一个免费\u002F开源许可证。即便如此, 仍然有许多开源项目由 Oracle 公司的 Java 开发。 OpenJDK 是 java 平台自由软件的实现,遵循 GPL v2 许可。 (更多信息请参见维基百科 Free Java implementations。)\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E\u003Cstrong\u003E让我们开始吧\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E性能优化取决于多个因素,包括垃圾收集、虚拟机和底层操作系统(OS)设置。有多个工具可供开发人员进行分析和优化时使用,你可以通过阅读 Java Tools for Source Code Optimization and Analysis 来学习和使用它们。如果你正苦苦挣扎于术语和 Java 的原理,可以先去查看 Livecoding Java category page,上面有直播,存档的视频,以及一些其他有用的信息。\u003C\u002Fp\u003E\u003Cimg src=\&v2-085b27e732fee2e6d2c47bb.jpg\& data-rawwidth=\&516\& data-rawheight=\&473\&\u003E\u003Cbr\u003E\u003Cp\u003E\u003Cstrong\u003E“视情况而定”\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E必须要明白的是,没有两个应用程序可以使用相同的优化方式,也没有完美的优化 java 应用程序的参考路径。使用最佳实践并且坚持采用适当的方式处理性能优化。想要达到真正最高的性能优化,你作为一个 Java 开发人员,需要对 Java 虚拟机(JVM)和底层操作系统有正确的理解:\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cul\u003E\u003Cli\u003E\u003Cp\u003EJVM 和底层操作系统:Java 虚拟机是任何 Java 程序的家。阅读 JVM internals guide 了解更多有关于 JVM 内部和操作系统差异的内容。\u003C\u002Fp\u003E\u003Cbr\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003EJVM 分布模型:Java 分布模型为您的应用程序处理多个JVM实例。分布模型提高了应用程序的性能,因为它获得更多的资源来工作。你可以用两种方法继续优化。第一种方法是在一个堆大小为2GB或8GB的单服务器运行多个 JVM。第二种方法是在多个服务器上运行单个 JVM。正确方法的选择取决于多个因素,包括可用性和响应性。\u003C\u002Fp\u003E\u003Cbr\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003EJVM 体系结构:选择正确的 JVM 体系结构对于性能来说是很重要的。你可以选择 64 位或者 32 位的 JVM 机器。 一般来说,32 位 JVM 的性能比它对应的 64 位 JVM 要好。 只有当你需要的堆大小大于 3 GB 时,才选择 64 位的 JVM。\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cbr\u003E\u003Cp\u003E清楚了性能优化和其要素,现在我们可以专注于那些可以优化你的Java应用的技巧.\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E\u003Cstrong\u003E1.
调整垃圾收集(GC)\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E由于垃圾收集的复杂性,很难发现你的应用的准确性能.不过,如果你真的想优化你的应用,你应该相应地处理垃圾收集.通用的准则是调整GC设置并同时执行性能分析.\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E一旦你对结果感到满意,你可以停止该过程并寻求其他优化方式.确保除了在平均事务处理时间之外,你还留心了异常值.这些异常值是造成Java应用缓慢的真正的罪魁祸首并且很难找到.\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E此外,你要明白应用运行期间性能下降的效应.在每单个cpu时钟内的缓慢操作是可以忽略的,但在每单个数据库事务中的缓慢操作则是非常昂贵的消耗.但是你应该根据性能短板选择你的优化策略,并应该根据工作负载来优化应用.\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E\u003Cstrong\u003E2. 正确地选择适合你的GC算法\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E让我们更深入地探讨GC优化.毕竟,GC优化是要处理的整个优化问题中最基本的.目前,Java中有四种供你选择的垃圾收集算法.每种算法满足不同的需求,因此你要选择(适合你的需求的).很多开发人员正是因为不了解GC算法而未能优化他们的应用.\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E这四个算法分别是串行回收器,并行\u002F吞吐量回收器,CMS回收器和G1回收器.想要了解更多关于每种垃圾收集器的信息及它们是如何工作的,请查看这篇来自Takipi博客的非常棒的文章Garbage Collectors—Serial vs. Parallel vs. CMS vs. G1.
这篇文章同时还讨论了Java8对GC算法的影响及其他细节上的改变.让我们再回到GC算法上,根据Understanding Java Garbage Collection这篇文章所述,并发标记和清除GC(即”CMS”)算法才是适合网络服务端应用的最佳算法.并行GC算法适合那些内部可预测的应用.\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003EG1和CMS是并发操作的理想选择,但仍然会引起(应用)频繁停顿.实际的选择取决于你如何取舍.举例来说,尽管选择并行算法会带来更长的GC停顿时间,但相较于其他GC算法,选择并行算法仍是一个好主意.\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E\u003Cstrong\u003E3.Java 堆\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003EJava内存堆在迎合内存需求方面担任了至关重要角色.通常更好的做法是初始时分配最小的堆,然后通过持续的测试不断增加它的大小.大多数时候优化问题都可以通过增加堆的大小解决,但如果存在大量的GC开销,则该解决方案不起作用.\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003EGC开销还会使吞吐量急剧下降,进而使得应用难以形容的慢.此外,及早调整GC可以帮助你避免堆大小分配的问题.开始的时候,你可以选择任何1GB到8GB的堆大小.当你选择正确的堆大小,老生代和新生代对象的概念也就不需要了.总而言之,堆大小应该取决于老生代和新生代对象的比率,之前的GC优化和对象集合(即所有对象占用的内存大小).\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E\u003Cstrong\u003E4. 关键应用优化\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E关键代码优化是优化你的Java应用最好的方式.如果你的应用对GC和堆优化没有反应,那么最好是做架构改进并关注于你的应用是如何处理信息的.使用聪明的算法并管理好对象就能解决大量的问题,包括内存碎片,堆大小问题和垃圾收集的问题.\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E\u003Cstrong\u003E5.使用最优的函数\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003EJava提供了多个函数来提升算法效率.如果你使用StringBuilder代替简单的String,你可以得到微乎其微的性能提升.不过,我们还有其他方式在代码层面进行优化.让我们看看下面这些优化方法.\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cul\u003E\u003Cli\u003E\u003Cp\u003E使用StringBuilder代替+操作符.\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E避免使用iterator().\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E多使用栈带来的好处.\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E避免使用正则表达式,使用Apache Commons Lang作为代替.\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003Cli\u003E\u003Cp\u003E远离递归.递归会占用大量资源!\u003C\u002Fp\u003E\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cbr\u003E\u003Cp\u003E.查看更多关于代码的优化Top 10 Easy Performance. Optimisations in Java.\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E\u003Cstrong\u003E结论\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003Ejava的性能优化可是一个大课题, 藉着这片文章抛砖引玉。如果您认为文章还需要添加补充,别忘了在下面的评论中分享您的观点。\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\u002Fmp.weixin.qq.com\u002Fs?__biz=MjM5NzMyMjAwMA==&mid=&idx=2&sn=caf5ebf7b7abcf1478e4&chksm=bd253b058a52bf4a1c2b8ed6b9fb13a08cb9f75ebabdfa6&mpshare=1&scene=23&srcid=1209zrzITlcpdoFAvzr9TGNG#rd\& data-editable=\&true\& data-title=\&阅读原文\&\u003E阅读原文\u003C\u002Fa\u003E\u003C\u002Fp\u003E\u003Cimg src=\&v2-cd61ec7c2ff09ddd21930.jpg\& data-rawwidth=\&900\& data-rawheight=\&500\&\u003E&,&updated&:new Date(&T14:22:52.000Z&),&canComment&:false,&commentPermission&:&anyone&,&commentCount&:8,&likeCount&:52,&state&:&published&,&isLiked&:false,&slug&:&&,&isTitleImageFullScreen&:false,&rating&:&none&,&sourceUrl&:&&,&publishedTime&:&T22:22:52+08:00&,&links&:{&comments&:&\u002Fapi\u002Fposts\u002F2Fcomments&},&url&:&\u002Fp\u002F&,&titleImage&:&https:\u002F\u002Fpic3.zhimg.com\u002Fv2-bcc63286a5deecd3a6e63bef_r.jpg&,&summary&:&&,&href&:&\u002Fapi\u002Fposts\u002F&,&meta&:{&previous&:null,&next&:null},&snapshotUrl&:&&,&commentsCount&:8,&likesCount&:52},&&:{&title&:&从零讲JAVA ,给你一条 清晰地学习道路!该学什么就学什么!!&,&author&:&amin706&,&content&:&\u003Cblockquote\u003E\u003Ca href=\&http:\u002F\u002Fmp.weixin.qq.com\u002Fs?__biz=MjM5MTM0NjQ2MQ==&mid=&idx=1&sn=8fb12d963a8aecbdb00186&chksm=beb7b4c005bf99e2fee8eff1dee117d775c6ae7e94cd3d8&mpshare=1&scene=23&srcid=02178SKDDGxWQRdXajiCBw85#rd\& class=\&\& data-title=\&从零讲JAVA ,给你一条 清晰地学习道路!该学什么就学什么!!\& data-editable=\&true\&\u003E从零讲JAVA ,给你一条 清晰地学习道路!该学什么就学什么!!\u003C\u002Fa\u003E\u003C\u002Fblockquote\u003E\u003Ch2\u003E1.计算机基础:\u003C\u002Fh2\u003E\u003Cbr\u003E\u003Ch3\u003E1.1数据机构基础:\u003C\u002Fh3\u003E\u003Cp\u003E主要学习:\u003Cbr\u003E1.向量,链表,栈,队列和堆,词典。熟悉\u003Cbr\u003E2.树,二叉搜索树。熟悉\u003Cbr\u003E3.图,有向图,无向图,基本概念\u003Cbr\u003E4.二叉搜索A,B,C类熟练,9大排序熟悉。\u003Cbr\u003E5.树的前中后,层次,之字,最短路。\u003Cbr\u003E6.KMP等字符串算法。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Ch3\u003E1.2操作系统:\u003C\u002Fh3\u003E\u003Cp\u003E主要学习:\u003Cbr\u003E1.进程,线程,进程线程区别。进程间通信\u003Cbr\u003E2.进程调度算法理解\u003Cbr\u003E3.存储,虚拟内存,分页分段,内存调度算法\u003Cbr\u003E4.文件系统,链式,索引\u003Cbr\u003E5.死锁:原因,避免,解除k\u003Cbr\u003E6.Linux基本操作命令,会一门脚本编程:shell,Python\u003C\u002Fp\u003E\u003Cbr\u003E\u003Ch3\u003E1.3计算机网络:\u003C\u002Fh3\u003E\u003Cp\u003E主要学习:\u003Cbr\u003E1.网络分层:五层,七层,四层等\u003Cbr\u003E2.网络层:IP分类,子网划分,超网。ARP协议,ICMP协议。理解内部网关和外部网关,vpn等\u003Cbr\u003E3.运输层:端口,UDP协议理解,TCP协议理解,三次握手,四次断开。\u003Cbr\u003E4.应用层:了解常用协议使用的端口和底层协议。\u003Cbr\u003E5.更加深入理解:TCP\u002FIP 对拥塞控制,滑动窗口,如何实现可靠等。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Ch3\u003E1.4基础算法:\u003C\u002Fh3\u003E\u003Cp\u003E主要学习:\u003Cbr\u003E1.理解大O等记号\u003Cbr\u003E2.动态规划如:几类背包问题最好有现成的代码用于笔试。最长公共子序列\u003Cbr\u003E3.贪心算法:理解赫夫曼编码(笔试常考概念)\u003Cbr\u003E4.B树B+树用于理解数据库索引\u003Cbr\u003E5.常用的图算法:广度优先,深度优先,最短路径算法(最好有现成的代码),最小生成树。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Ch2\u003E2.JAVA知识基础:\u003C\u002Fh2\u003E\u003Cbr\u003E\u003Ch3\u003E2.1JAVA基础\u003C\u002Fh3\u003E\u003Cp\u003E推荐书籍:编程思想\u003Cbr\u003E1.掌握java常用技术,io、多线程、反射、常用集合框架\u003Cbr\u003E2.对处理输入输出的IO进行熟悉,用于笔试\u003Cbr\u003E3.对Iterator,Iterable和Comparable,Comparator了解,以及常用集合的遍历和排序。\u003Cbr\u003E4.对NIO一定要熟悉,以及了解JMS和RPC\u003Cbr\u003E5.对JAVA基础概念要熟悉,比如抽象类和接口区别等,这些熟记。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Ch3\u003E2.2JAVA源码\u003C\u002Fh3\u003E\u003Cp\u003E1.hashmap,hashtable,concurrentHashMap源码以及区别\u003Cbr\u003E2.其他集合框架:linkedHashMap,LinkedHashSet,Copy-On-Write等\u003Cbr\u003E3.对Lock,Object,String等类的源码了解。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E2.3JAVA并发API\u003C\u002Fp\u003E\u003Cp\u003E推荐书籍:应付笔试面试:JAVA多线程编程与核心技术。真正神书:JAVA并发编程实战。\u003C\u002Fp\u003E\u003Cp\u003ESynchronize 和 Lock 的区别与用法\u003C\u002Fp\u003E\u003Cp\u003E2.wait()和await() notify()和signal(),wait()和sleep()区别与用法\u003C\u002Fp\u003E\u003Cp\u003E3.其他的API用法:yield,join等\u003C\u002Fp\u003E\u003Cp\u003E4.voliate深入理解,以及CAS理解\u003C\u002Fp\u003E\u003Cp\u003E5.JAVA锁底层实现:自旋锁,阻塞锁,可重入锁,偏向锁,等。\u003C\u002Fp\u003E\u003Cp\u003E6.线程池和阻塞队列\u003C\u002Fp\u003E\u003Cp\u003E7.以及一些常用的并发实现案例如生产者和消费者\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E2.4理解JVM\u003C\u002Fp\u003E\u003Cp\u003E推荐书籍:深入理解JAVA虚拟机\u003C\u002Fp\u003E\u003Cp\u003E1.JAVA内存模型,哪个区域存放哪些内容\u003C\u002Fp\u003E\u003Cp\u003E2.引用技术法和可达性分析法\u003C\u002Fp\u003E\u003Cp\u003E3.对象的强、软、弱和虚引用区别与作用\u003C\u002Fp\u003E\u003Cp\u003E4.jvm垃圾回收机制,以及回收算法\u003C\u002Fp\u003E\u003Cp\u003E5.常见的OOM和SOF的原因和解决方案,以及通过什么工具进行分析。\u003C\u002Fp\u003E\u003Cp\u003E6.常见的JVM输入参数熟悉\u003C\u002Fp\u003E\u003Cp\u003E7.了解GC停顿,逃逸分析,TLAB区,堆外内存等\u003C\u002Fp\u003E\u003Cp\u003E8.常用垃圾收集器:G1,CMS等\u003C\u002Fp\u003E\u003Cp\u003E9.了解常用性能监控工具:如visualvm jconsole等\u003C\u002Fp\u003E\u003Cp\u003E10.必须熟悉虚拟机类加载机制,包括原理步骤,以及双亲委派方式的原理。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E3.常规储备知识学习\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E3.1数据库:\u003C\u002Fp\u003E\u003Cp\u003E推荐书籍:sql入门:Mysql必知必会。深入理解:高性能Mysql\u003C\u002Fp\u003E\u003Cp\u003E1.常用关联查询语法,自己所动手写几个\u003C\u002Fp\u003E\u003Cp\u003E2.数据库索引深入认识和理解\u003C\u002Fp\u003E\u003Cp\u003E3.JDBC学习\u003C\u002Fp\u003E\u003Cp\u003E4.常用数据库调优手段:比如通过索引调优\u003C\u002Fp\u003E\u003Cp\u003E5.InnoDB和MyISAM 区别\u003C\u002Fp\u003E\u003Cp\u003E6.了解主键,外键,索引,唯一索引\u003C\u002Fp\u003E\u003Cp\u003E7.了解索引、视图、触发器、游标和存储过程\u003C\u002Fp\u003E\u003Cp\u003E8.常用关系型数据库和非关系型数据库:关系型了解:Mysql,Oracle 非关系型了解:redis,Hbase,monogodb等\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E3.2设计模式:\u003C\u002Fp\u003E\u003Cp\u003E推荐书籍:设计模式之禅\u003C\u002Fp\u003E\u003Cp\u003E1.单例模式的几种写法一定要会\u003C\u002Fp\u003E\u003Cp\u003E2.JDK中对应的设计模式:如IO中的装饰模式和设配器模式等\u003C\u002Fp\u003E\u003Cp\u003E3.框架中常用的设计模式:如Struts中的责任链模式,Spring中的工厂模式,动态代理模式等\u003C\u002Fp\u003E\u003Cp\u003E4.了解6大设计原则\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E3.3HTTP协议:\u003C\u002Fp\u003E\u003Cp\u003E推荐书籍:HTTP权威指南\u003C\u002Fp\u003E\u003Cp\u003E1.什么是HTTP,协议版本等\u003C\u002Fp\u003E\u003Cp\u003E2.学会使用浏览器查看HTTP请求与响应\u003C\u002Fp\u003E\u003Cp\u003E3.熟悉HTTP请求头和请求体\u003C\u002Fp\u003E\u003Cp\u003E4.熟悉HTTP响应头和响应体\u003C\u002Fp\u003E\u003Cp\u003E5.了解Rest风格\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E3.4神一般的Spring:\u003C\u002Fp\u003E\u003Cp\u003E推荐书籍:Spring实战和Spring技术内幕\u003C\u002Fp\u003E\u003Cp\u003E1.了解IOC原理和作用\u003C\u002Fp\u003E\u003Cp\u003E2.了解AOP原理和作用\u003C\u002Fp\u003E\u003Cp\u003E3.常用的XML配置\u003C\u002Fp\u003E\u003Cp\u003E4.Spring事务原理和使用\u003C\u002Fp\u003E\u003Cp\u003E5.SpringMVC\u003C\u002Fp\u003E\u003Cp\u003E6.了解Spring的webflow,远程服务,rest,消息,安全等\u003C\u002Fp\u003E\u003Cp\u003E7.新功能:Spring boot和cloud\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E4.后端学习之路\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E4.1WEB后端学习之路\u003C\u002Fp\u003E\u003Cp\u003E推荐书籍:可以选择一些SSH整合开发之类的\u003C\u002Fp\u003E\u003Cp\u003E1.JSP和Servlet学习\u003C\u002Fp\u003E\u003Cp\u003E2.XML和JSON解析学习\u003C\u002Fp\u003E\u003Cp\u003E3.前端知识:HTML、css,js\u003C\u002Fp\u003E\u003Cp\u003E4.JDBC学习,文件上传\\下载,JAVAMail等\u003C\u002Fp\u003E\u003Cp\u003E5.可以利用jsp和Servlet开发简单项目\u003C\u002Fp\u003E\u003Cp\u003E6.接着框架学习:Struts2,Hibernate,Spring以及相互整合开发\u003C\u002Fp\u003E\u003Cp\u003E7.接着可以了解:SpringMvc,Mybatis,Lucene,shiro等\u003C\u002Fp\u003E\u003Cp\u003E8.利用框架实现简单项目比如CMS。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E4.2服务架构学习之路(此部分笔试面试不一定学习)\u003C\u002Fp\u003E\u003Cp\u003E推荐书籍:分布式服务框架原理与实践和微服务设计\u003C\u002Fp\u003E\u003Cp\u003E1.了解SOA和微服务\u003C\u002Fp\u003E\u003Cp\u003E2.负载均衡:LVS,NGINX等\u003C\u002Fp\u003E\u003Cp\u003E3.RPC框架学习:RMI,Thrift等\u003C\u002Fp\u003E\u003Cp\u003E4.消息框架学习:ActiveMq等\u003C\u002Fp\u003E\u003Cp\u003E5.Netty通信框架学习\u003C\u002Fp\u003E\u003Cp\u003E6.服务框架:dubbo\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E4.3Hadoop学习之路(此部分笔试面试不一定学习)\u003C\u002Fp\u003E\u003Cp\u003E推荐书籍:Hadoop权威指南\u003C\u002Fp\u003E\u003Cp\u003E1.熟悉mapReduce和HDfS\u003C\u002Fp\u003E\u003Cp\u003E2.Hadoop集群搭建\u003C\u002Fp\u003E\u003Cp\u003E3.了解:zk,hive,hbase,pig,mahout等\u003C\u002Fp\u003E\u003Cp\u003E4.zk几个常用作用如做注册中心,放配置信息等。\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\u002Fmp.weixin.qq.com\u002Fs?__biz=MjM5MTM0NjQ2MQ==&mid=&idx=1&sn=8fb12d963a8aecbdb00186&chksm=beb7b4c005bf99e2fee8eff1dee117d775c6ae7e94cd3d8&mpshare=1&scene=23&srcid=02178SKDDGxWQRdXajiCBw85#rd\& data-editable=\&true\& data-title=\&阅读原文\&\u003E阅读原文\u003C\u002Fa\u003E\u003C\u002Fp\u003E\u003Cimg src=\&v2-25d18abcd533dddc4f85d110c3b16867.jpg\& data-rawwidth=\&900\& data-rawheight=\&500\&\u003E&,&updated&:new Date(&T14:55:05.000Z&),&canComment&:false,&commentPermission&:&anyone&,&commentCount&:95,&likeCount&:722,&state&:&published&,&isLiked&:false,&slug&:&&,&isTitleImageFullScreen&:false,&rating&:&none&,&sourceUrl&:&&,&publishedTime&:&T22:55:05+08:00&,&links&:{&comments&:&\u002Fapi\u002Fposts\u002F2Fcomments&},&url&:&\u002Fp\u002F&,&titleImage&:&https:\u002F\u002Fpic2.zhimg.com\u002Fv2-dedead7ef38_r.jpg&,&summary&:&&,&href&:&\u002Fapi\u002Fposts\u002F&,&meta&:{&previous&:null,&next&:null},&snapshotUrl&:&&,&commentsCount&:95,&likesCount&:722},&&:{&title&:&2016年总结 - Java程序员&,&author&:&amin706&,&content&:&\u003Cblockquote\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\u002Fblog.csdn.net\u002Fu\u002Farticle\u002Fdetails\u002F\& data-editable=\&true\& data-title=\&2016年总结-JAVA程序员 - 小宝鸽 - 博客频道 - CSDN.NET\& class=\&\&\u003E2016年总结-JAVA程序员 - 小宝鸽 - 博客频道 - CSDN.NET\u003C\u002Fa\u003E\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp\u003E作者:小宝鸽\u003Cbr\u003E\u003C\u002Fp\u003E\u003C\u002Fblockquote\u003E\u003Cbr\u003E\u003Ch2\u003E\u003Cstrong\u003E一、技术积累\u003C\u002Fstrong\u003E\u003C\u002Fh2\u003E\u003Cbr\u003E\u003Cp\u003E\u003Cstrong\u003E(1)代码规范\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E1.1.1、通常的模块分布:一般如果你要实现一个web应用,你从后台将数据展示到前端页面,在一个比较大的公司,你少不了跟其他项目有交集(你调用他的接口,他依赖你的接口),这样下来,整个公司有很多个模块,怎么做到很好的联系。回到刚刚的模块分布,你的一个web应用,应当需要分成三个模块:core模块、service模块、web模块。web模块就是展示到页面,后台代码而言主要就controller层了,其他逻辑基本都放在core了,service模块就是一些接口类和参数dto等等,接口的实现类在core模块。这样下来,web模块只需要依赖service模块,同样的其他系统依赖你的接口也仅仅是依赖service模块,然后利用远程调用方式消费你的接口服务。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E1.1.2、代码层级结构:针对后台服务项目,一般分为对外接口层、service层、Dao层。Dao层就是与数据库交接的接口层,service层主要调用Dao或者外部系统的接口,复杂的逻辑基本都放在service层;一些方法需要提供给其他模块调用的时候,就封装在对外接口层,只有对外接口层是暴露。这里说的只是层级结构,还有与层级结构无关的,也是需要归类的,比如对外部系统接口方法封装的我们放在一个目录下面,一些常量和工具类等我们放在common目录下面。当然还有其他考虑,尽量让整个模块有层次感,代码才不会太乱,更好的维护。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E1.1.3、总结上面两点:可能不少猿友觉得上面啰嗦又不像代码规范,其实这两点也是代码规范的一部分,主要引导大家往结构清晰好维护的思维方向走,多思考吧。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E1.1.4、对于一些需要异步处理的,不要直接new一个thread,应当使用线程池。使用线程池的时候应当对线程数量大小合理设置,一般最大不超过50个,当然还需要考虑你的IO和CPU,怎么分析网上搜搜吧。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E1.1.5、容器类变量,如果变化比较大且频繁,尽量定义的时候设置初始容量大小,减少扩容带来的消耗。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E1.1.6、分支判断if…else的时候,最常符合的条件处理放在前面。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E1.1.7、对象比较的时候常量放前面,养成好习惯,减少空指针的出现。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E1.1.8、减少synchronized中等待处理的代码,能放在外面就尽量放在外面。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E1.1.9、下面到数据库了,我觉得还是在这里说了好点,一般查询比较慢,很有可能是没有建索引或者索引没用到,多去检查一下。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E1.1.10、两个大表的关联查询,可以使用二次访问数据库替代,先查出A表的数据,利用关联字段再查B表的。不要一味想着一条sql搞定最好。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E1.1.11、坚决避免,查全表数据或者数量大的数据,返回list加载到内存中,一不小心查了100w数据,又查得比较频繁,内存的爆了。有这种风险的改成分页查询。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E1.1.12、不要select *,按需取列。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E1.1.13、多考虑避免事务里面有长连接或者长事务,如果大量这种情况出现占用数据连接,会影响性能。一些无必要的逻辑可以放到事务外执行。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E1.1.14、对字段的加减乘除处理放到sql,严格避免先get处理,然后运算在set到数据库里面,并发情况非常容易导致失真。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E1.1.15、方法里面代码不要太长,注意封装,命名语义化,代码整洁。常挂嘴边的,没放心上,一如既往的给自己埋坑,举个博主的例子,那会刚毕业也是没放心上,最近把我们组长不写代码,一到代码评审我就害怕,检视到有问题的代码,毕业生吧就说这代码以前就是这样写的,问题最终肯定都落我身上,现在感觉代码是自己的孩子,只能有空自己偷偷的优化一下,怕出问题还得非常仔细。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E\u003Cstrong\u003E(2)SQL规范与性能优化\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E1.2.1、先提前声明,博主工作用到是MySQL,可能有些场景只针对MySQL。说到SQL优化,一些概念必须要理解,不然死记硬背一两天就忘记了。特别是执行计划的概念。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E1.2.2、什么是执行计划:a.决定如何访问表数据,是否通过索引,是否排序等。b.多表关联是先访问哪个表。c.多表关联时,使用哪种连接方式,不过现在MySQL只有嵌套连接(嵌套循环,顾名思义就是将一个表为出发点,将该表全部记录逐条去遍历另外一张表的记录)。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E1.2.3、SQL执行顺序:a.检查语法是否正确。b.检查表是否存在、权限是否满足等。c.根据统计信息(如data length,rows,index length、索引唯一度),生成较优的执行计划。d.根据执行计划,进行数据检索、过滤、合并、排序等操作。访问数据时,内存中如存在表数据,则直接进行操作;否则,从磁带读取表数据,放入内存,再进行操作;如内存不足,则内存中较冷数据涮出内存,再从内存中读取数据。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E1.2.4、索引:查询的时候如果使用上了索引,可以提高效率,因为建立了索引后,可以理解为数据字典的结构存储,因此根据条件查询的时候更加高效。下面看一下MySQL常用的索引类型的概念。 \u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003Ea.普通索引:在创建普通索引时,不附加任何限制条件。这类索引可以创建在任何数据类型中,其值是否唯一和非空由字段本身的完整性约束条件决定。建立索引以后,查询时可以通过索引进行查询。例如,在student表的stu_id字段上建立一个普通索引。查询记录时,就可以根据该索引进行查询。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003Eb.唯一性索引:使用UNIQUE参数可以设置索引为唯一性索引。在创建唯一性索引时,限制该索引的值必须是唯一的。例如,在student表的stu_name字段中创建唯一性索引,那么stu_name字段的值就必需是唯一的。通过唯一性索引,可以更快速地确定某条记录。主键就是一种特殊唯一性索引。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003Ec.单列索引:在表中的单个字段上创建索引。单列索引只根据该字段进行索引。单列索引可以是普通索引,也可以是唯一性索引,还可以是全文索引。只要保证该索引只对应一个字段 即可。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003Ed.多列索引:多列索引是在表的多个字段上创建一个索引。该索引指向创建时对应的多个字段,可以通过这几个字段进行查询。但是,只有查询条件中使用了这些字段中第一个字段时,索引才会被使用。例如,在表中的id、name和sex字段上建立一个多列索引,那么,只有查询条件使用了id字段时该索引才会被使用。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003Ee . 全文索引:使用FULLTEXT参数可以设置索引为全文索引。全文索引只能创建在CHAR、VARCHAR或TEXT类型的字段上。查询数据量较大的字符串类型的字段时,使用全文索引可以提高查询速度。例如,student表的information字段是TEXT类型,该字段包含了很多的文字信息。在information字段上建立全文索引后,可以提高查询information字段的速度。MySQL数据库从3.23.23版开始支持全文索引,但只有MyISAM存储引擎支持全文检索。在默认情况下,全文索引的搜索执行方式不区分大小写。但索引的列使用二进制排序后,可以执行区分大小写的全文索引。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E还有空间索引,平时也比较少用。目前只有MyISAM存储引擎支持空间检索。目前博主也只接触过InnoDB存储引擎。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E1.2.5、一般一张表索引不要超过5个,而且避免重复索引,而且也不是建了索引,根据索引字段条件查询,索引就会起作用。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E1.2.6、一般哪些场景会导致索引失效:a.使用like关键字匹配字符串第一个为”%”的场景。b.条件中包含or、in、not in、&&关键字,默认不走索引的。c.访问表上的数据行超出表总记录数30%,变成全表扫描。d.查询条件使用函数在索引列上,或者对索引列进行运算。e.多列索引中,第一个索引列使用范围查询,只能用到部份或无法使用索引。f.多列索引中,第一个查询条件不是最左索引列,上面多列索引概念中也有提到。肯定还有更多的场景,但是博主现在能想到的场景就这些了。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E1.2.7、不能同时使用两个索引,一个过滤数据,一个用于排序(主键除外)。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E1.2.8、DML语句如果使用索引,会导致lock全表;如果使用了非唯一索引,可能只是锁住一定范围。对此,建议更新\u002F删除数据尽量用上索引,如果可以最好用上主键或唯一索引,另外事务要及时提交。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E1.2.9、最后一点,如何看执行计划,分析SQL的性能。这个吧,三言两语说不清楚,直接看其他博主的博文吧:\u003Ca href=\&http:\u002F\u002Fwww.cnblogs.com\u002Fxiaoboluo768\u002Fp\u002F5400990.html\& data-editable=\&true\& data-title=\&mysql explain执行计划详解\&\u003Emysql explain执行计划详解\u003C\u002Fa\u003E。一定要看!!!\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E\u003Cstrong\u003E(3)关于事务的一些建议\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E如果没有听过事务这么个概念,网上了解学习一下,先理解一下各个事务类型的含义吧:a.日志记录尽量放在独立事务里面,避免后面的异常发生导致日志丢失。b.上面已经几次提到,尽早提交事务,避免事务过长,因此写代码的时候,一些可以不放到事务的逻辑可以移到外面,长事务看能否拆成两个事务。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E\u003Cstrong\u003E(4)关于数据库连接池。\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E可能一些猿友都少去注意吧。先来看看一些参数,这里只罗列了博主比较关注的,更多的可以自行查看一下配置。 \u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003EinitialSize : 默认值是 0, 连接池创建连接的初始连接数目。 \u003Cbr\u003EminIdle : 默认是 0, 连接数中最小空闲连接数。 \u003Cbr\u003EmaxIdle : 默认是 8 ,连接池中最大空闲连接数。 \u003Cbr\u003EmaxActive : 默认值是 8, 连接池中同时可以分派的最大活跃连接数。 \u003Cbr\u003EmaxWait : 默认值是无限大,当连接池中连接已经用完了,等待建立一个新连接的最大毫秒数 ( 在抛异常之前 )。 \u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003EvalidationQuery : 一条 sql 语句,用来验证数据库连接是否正常。这条语句必须是一个查询模式,并至少返回一条数据。一般用“ select 1 ”。 \u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003EminEvictableIdleTimeMilis : 默认值是 1000 * 60 * 30(30 分钟 ) 单位也是毫秒,连接池中连接可空闲的时间。 \u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003EtimeBetweenEvictionRunsMilis : 默认值是 -1 ,每隔一段多少毫秒跑一次回收空闲线程的线程。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E对于minEvictableIdleTimeMilis、timeBetweenEvictionRunsMilis这两个参数,timeBetweenEvictionRunsMilis必须大于1且小于minEvictableIdleTimeMilis,建议是minEvictableIdleTimeMilis的五分之一或十分之一。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E\u003Cstrong\u003E(5)对于前端的几点建议。\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E1.7.1、一些图片压缩后再使用,性能方面提高不小吧(可以使用熊猫图片压缩)。虽然自己前端比较菜,但是估计也有不少猿友跟我一样偶尔需要兼顾前端吧。毕竟刚毕业不久。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E1.7.2、关于移动端页面重构兼容不同屏幕大小的问题,建议doc的fontSize,实时获取屏幕的宽度,然后除以320再乘以16,当然16可以根据自己情况去调。然后其他一些单位尽量用rem,这样无论什么大小的屏幕都等比例缩放。感觉比@media效果好很多。\u003C\u002Fp\u003E\u003Cp\u003E关于技术积累这一块,之前罗列的提纲还挺多的,写到后面感觉没什么精力了,有些三言两语似乎说不清楚啊。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Ch2\u003E\u003Cstrong\u003E二、工作心得\u003C\u002Fstrong\u003E\u003C\u002Fh2\u003E\u003Cbr\u003E\u003Cp\u003E\u003Cstrong\u003E(1)沟通协作第一:\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E工作中必然少不了团队协作,积极主动去沟通的人做事总是更加靠谱。道理大家都懂。但是我们需要把想法问题,简洁明确的表达给对方。另外总是以沟通的心态面对问题,而不是抱怨。如果觉得上级分配的任务难度太大了,你可以尝试跟他沟通,获取他有很好的建议或解决方案。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E\u003Cstrong\u003E(2)谨慎记录与排漏:\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E感觉现在挺经常是开一两个会,测试同时偶尔找你排查一下环境问题,一天下来其实写代\u003C\u002Fp\u003E\u003Cp\u003E码的时间并不多。一些关键点,非常建议提前记录下来,方便接回被打断的思路,同时避免一些逻辑或功能点的遗漏。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E\u003Cstrong\u003E(3)思路清晰与效率:\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E建议动手写代码之前,建议先理清思路,关键逻辑,需求细节,这样后面写代码的时候效率比较高,而且质量也比较好。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E\u003Cstrong\u003E(4)主动与多管闲事:\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E清楚自己的工作范围,自己心里有个界限,有些属于别人工作范围的事情,可以你提出的建议是好的,但是最好还是在合适的场景和时机提出。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E\u003Cstrong\u003E(5)心态与工作状态:\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E程序员,总会有被坑的时候,或者不顺心的时候,尽量尝试控制一下自己的心态。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E\u003Cstrong\u003E(6)可持续发展观看待技术与业务:\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E这点是我自己希望做到的。对于责任心而言,或者是说一个优秀的程序员。很多时候并不是完成产品提的需求就好了。多为它着想,代码可维护性和扩展性高不高。一些功能点也可以提出自己的想法,不要总是被动的接受产品的需求,业务功能拓展性好的话,可以减少产品改动需求。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Ch2\u003E\u003Cstrong\u003E三、学习方向与职业发展\u003C\u002Fstrong\u003E\u003C\u002Fh2\u003E\u003Cbr\u003E\u003Cp\u003E\u003Cstrong\u003E(1)先广后深还是先深后广:\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E对于博主而言,其实接触的技术点还算比较多的,但是了解的都不深入,个人性格而言,比较偏向于实用驱动,如果在实际使用场景有用到再去深入学习,这样边学边用才能比较集中注意力。像一些同事,他们喜欢把一样东西研究得很深。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E\u003Cstrong\u003E(2)业务经验也应当注重:\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E技术人员必然是技术优先,但是等你到了一定工作年限,其实业务经验也是非常重要了。之前领导找我年度工作谈话就有说过他们招高级工程师的时候对业务经验也非常看重,是否有自己独特的见解。相信道理大家都懂,但是平时有没有这样的意识,有没有去做又是另外一方面了。平时也可以多学习业务方面的知识。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E\u003Cstrong\u003E(3)相同的工作年限为什么当过项目经理的人更吃香:\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E因为他们对业务理解更加深入,代码质量问题落在他头上,项目的人员协调与时间安排规划,责任越大,思考的问题就越多,遇到的问题处理经验就越丰富。把控能力也比较强。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E\u003Cstrong\u003E(4)怎样能进入学习状态,并且坚持:\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E要想集中注意力学习技术,需要安静的环境,需要耐得住寂寞,因此你需要没有人打扰的环境,比如在一个集体居住环境,几个朋友一起住,一般多数回想着去哪玩,朋友在玩游戏,估计也是对你的一种诱惑吧。可以早点到办公室学习或下班学习一段时间再回去。或者选择自己一个人住。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E\u003Cstrong\u003E(5)如何把握住学习的时机:\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E学习最能集中注意力的情况是有着比较强的好奇心和求知欲。所以一般一些技术分享或者老员工讨论的问题,可能很多概念知识你都不懂,这时候你就可以去学习了解这些知识。或者你工作中遇到的问题,尽量刨根问底的去弄清楚是什么原因导致的,不要一些老司机帮忙解决了就一了了之。或者是其他同事遇到的问题,你都可以去了解一下。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E\u003Cstrong\u003E(6)你更适合走一条怎样的职业道路:\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E刚毕业不久的猿友,一般都是会比较心浮气躁的,对技术求知欲很强,特别是一些高大上的技术,什么大数据、云计算、架构等等,有些偏向于技术研究,有些偏向于业务。大部分程序员可能都会选择偏向于技术研究的,于是乎对偏向业务的不怎么感冒,因此觉得天天做这些东西没什么意思。这时候,静下来分析一下,你到底适合哪种方向。你能否静下心来对技术研究很深入,能否耐得住寂寞。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Ch2\u003E\u003Cstrong\u003E四、关于生活\u003C\u002Fstrong\u003E\u003C\u002Fh2\u003E\u003Cbr\u003E\u003Cp\u003E\u003Cstrong\u003E(1)良好与糟糕的生活状态的区别:\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E需要警惕一下自己是否进入了一种糟糕的生活状态,工作上不温不火,似乎现在的技术已经足够用了,完全没有目标没有计划,无法集中注意力学习,日子就这样一天天过去。\u003C\u002Fp\u003E\u003Cbr\u003E\u003Cp\u003E\u003Cstrong\u003E(2)17年自己的一些期望吧:\u003C\u002Fstrong\u003E\u003C\u002Fp\u003E\u003Cp\u003E\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp\u003E希望活得更坚定些,保持着一定的求知欲和规划,向成为自己希望成为的人努力吧,包括一些习惯、处事方式等等。\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\u002Fblog.csdn.net\u002Fu\u002Farticle\u002Fdetails\u002F\&\u003E阅读原文\u003C\u002Fa\u003E\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cimg src=\&v2-25d18abcd533dddc4f85d110c3b16867.jpg\& data-rawwidth=\&900\& data-rawheight=\&500\&\u003E&,&updated&:new Date(&T14:16:05.000Z&),&canComment&:false,&commentPermission&:&anyone&,&commentCount&:12,&likeCount&:170,&state&:&published&,&isLiked&:false,&slug&:&&,&isTitleImageFullScreen&:false,&rating&:&none&,&sourceUrl&:&&,&publishedTime&:&T22:16:05+08:00&,&links&:{&comments&:&\u002Fapi\u002Fposts\u002F2Fcomments&},&url&:&\u002Fp\u002F&,&titleImage&:&https:\u002F\u002Fpic2.zhimg.com\u002Fv2-2dae4a0da_r.jpg&,&summary&:&&,&href&:&\u002Fapi\u002Fposts\u002F&,&meta&:{&previous&:null,&next&:null},&snapshotUrl&:&&,&commentsCount&:12,&likesCount&:170},&&:{&title&:&在Java路上,我看过的一些书、源码和框架(持续更新)&,&author&:&amin706&,&content&:&\u003Cblockquote\u003E\u003Cp\u003E作者:\u003Ca href=\&http:\u002F\u002Fwww.jianshu.com\u002Fu\u002F90ab66c248e6\& data-editable=\&true\& data-title=\&占小狼\& class=\&\&\u003E占小狼\u003C\u002Fa\u003E\u003Cbr\u003E\u003C\u002Fp\u003E\u003Cp\u003E原文链接:\u003Ca href=\&http:\u002F\u002Fwww.jianshu.com\u002Fp\u002F4a41ee88bd82?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io\& class=\&\& data-editable=\&true\& data-title=\&在Java路上,我看过的一些书、源码和框架(持续更新)\&\u003E在Java路上,我看过的一些书、源码和框架(持续更新)\u003C\u002Fa\u003E\u003Cbr\u003E\u003C\u002Fp\u003E\u003C\u002Fblockquote\u003E\u003Cp\u003E物有本末,事有终始,知所先后,则近道矣\u003Cbr\u003E\u003C\u002Fp\u003E\u003Ch3\u003E面试经历\u003C\u002Fh3\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\u002Fwww.jianshu.com\u002Fp\u002F1b2f63a45476\& data-editable=\&true\& data-title=\&关于Java面试,你应该准备这些知识点\&\u003E关于Java面试,你应该准备这些知识点\u003C\u002Fa\u003E\u003Cbr\u003E\u003Ca href=\&http:\u002F\u002Fwww.jianshu.com\u002Fp\u002Ffa0085a0cdf9\& data-editable=\&true\& data-title=\&关于Java面试,你应该准备这些知识点(续)\&\u003E关于Java面试,你应该准备这些知识点(续)\u003C\u002Fa\u003E\u003Cbr\u003E前段时间抽空整理了上面两篇面试经历,收到不少的关注,很多同学私信我平时都是如何get到这些知识的,是否有一些相关的书单,Java的源码太多了,应该如何看,框架的代码应该如何阅读等等问题。\u003C\u002Fp\u003E\u003Cp\u003E现在想想,似乎以前也这样迷茫过,没有明确的方向,做过后端,做过前端,就因为啃完了一整本\u003Ca href=\&https:\u002F\u002Fitem.jd.com\u002F.html\& data-editable=\&true\& data-title=\&《JavaScript高级程序设计》\&\u003E《JavaScript高级程序设计》\u003C\u002Fa\u003E,在面试的时候信誓旦旦说只做前端,不写后端代码。直到后来,碰巧有机会让我重新捡起Java,很感激有这次机会,也慢慢的明确了自己的方向。\u003C\u002Fp\u003E\u003Cp\u003E我喜欢在拿到书的那一刻就写下当天的日期,方便以后可以知道这本书是何时买的,不知不觉中已经买了不少和Java相关的书,当然也从中收获了很多。\u003C\u002Fp\u003E\u003Ch3\u003E书单\u003C\u002Fh3\u003E\u003Ca href=\&https:\u002F\u002Fitem.jd.com\u002F.html\& data-editable=\&true\& data-title=\&《Java核心技术 卷I》\&\u003E《Java核心技术 卷I》\u003C\u002Fa\u003E\u003Cbr\u0}

我要回帖

更多关于 网络共享打印机设置 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信