From e3019ad4047ef693321c3a3ae35558086aa19ae5 Mon Sep 17 00:00:00 2001 From: TANG ZhiXiong Date: Sat, 5 Nov 2016 15:05:48 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=8E=92=E7=89=88=E4=B9=9F=E6=98=AF?= =?UTF-8?q?=E5=8F=AF=E4=BB=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 316 ++++++++++++++++++++------------------ contents/java-operator.md | 30 ++-- md2html-v0.5.jar | Bin 0 -> 58143 bytes 3 files changed, 182 insertions(+), 164 deletions(-) create mode 100644 md2html-v0.5.jar diff --git a/README.md b/README.md index 624fcdb..5706de7 100644 --- a/README.md +++ b/README.md @@ -1,173 +1,187 @@ - stackoverflow-Java-top-qa -======================= - 对stackoverflow上Java相关、投票数TOP100的问答进行翻译,欢迎点star,我们会持续更新!!! +========================= - 为了让"翻译"更有意义,给阅读者带来更多、更有效的收获,我们会有一些加工: - 例如,对问题进行分类,整合多个答案、删除冗余内容、加上自己的验证结果、心得等等 - - 对于参与翻译的人,这也是很好的一个学习、理解过程,欢迎大家一起来翻译 +对 stackoverflow 上 Java 相关、投票数 TOP100 的问答进行翻译,欢迎点 star,我们 +会持续更新!!! -------------- -### 如何参与翻译(欢迎加入翻译组QQ群485011036) -####如何参与: -- 请从下文"待翻译问题链接"中寻找你感兴趣的问答进行翻译。翻译好的问答,放到contents目录下,无需更新readme.md文档。之后提一个PR,我负责合并PR并更新到readme中。 -- 另外,为了避免多人重复新翻译一个问题,你可以提issue,说明你计划翻译的问题及时间点,我可以先更新到下面的"未翻译问题"中,说明已有人领了这个问题。当然,也不一定要提issue,一般情况下,只要及时提pr,我及时审核,出现"撞车"的概率并不高。 +为了让"翻译"更有意义,给阅读者带来更多、更有效的收获,我们会有一些加工: +例如,对问题进行分类,整合多个答案、删除冗余内容、加上自己的验证结果、心得等等。 -####一些基本的约定: -- 文档的文件名,和stackoverflowhich-notnull-java-annotation-should-i-usew上的url保持一致。例如,http://stackoverflow.com/questions/8710619/java-operator 的文件名, 就是java-operator.md -- 在每篇翻译文档内容的最后,要附上stackoverflow的原文链接 +对于参与翻译的人,这也是很好的一个学习、理解过程,欢迎大家一起来翻译。 -####每个人可以做(但不限于): -- 找未翻译的问题进行翻译 -- 优化已翻译的问题 -- 输出问答精简汇总版(把所有的问答集中到一个md文件,然后尽量精简,让别人可以在一天内把这100个问题的精髓都看完) -- 输出gitbook版本(现在直接在github上查看,体验不好) +### 如何参与翻译 -####文档优化反馈: -请大家多多反馈,优化已翻译好的文章:可以到[吐槽区](https://github.com/giantray/stackoverflow-java-top-qa/issues/66)吐槽,也可以在已翻译文章基础上进行优化,提新的PR。文章质量的提升,需要大家一起努力! +#### 如何参与 +- 请从下文"待翻译问题链接"中寻找你感兴趣的问答进行翻译。翻译好的问答,放到 + contents 目录下,无需更新 readme.md 文档。之后提一个 PR,我负责合并 PR 并更 + 新到 readme 中。 +- 另外,为了避免多人重复新翻译一个问题,你可以提 issue,说明你计划翻译的问题 + 及时间点,我可以先更新到下面的"未翻译问题"中,说明已有人领了这个问题。当然, + 也不一定要提 issue,一般情况下,只要及时提 pr,我及时审核,出现"撞车"的概率 + 并不高。 -### 目录 -> 基础语法 - -* [Java += 操作符实质](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/java-operator.md) -* [将InputStream转换为String](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/read-convert-an-inputstream-to-a-string.md) -* [将数组转换为List](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/create-arraylist-from-array.md) -* [如何遍历map对象](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/iterate-through-a-hashmap.md) -* [public,protected,private,不加修饰符。有什么区别呢?](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/in-java-whats-the-difference-between-public-default-protected-and-private.md) -* [如何测试一个数组是否包含指定的值?](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/how-can-i-test-if-an-array-contains-a-certain-value.md) -* [重写(Override)equlas和hashCode方法时应考虑的问题](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/what-issues-should-be-considered-when-overriding-equals-and-hashcode-in-java.md) -* [从一个多层嵌套循环中直接跳出](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/breaking-out-of-nested-loops-in-java.md) -* [如何将String转换为Int](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/converting-string-to-int-in-java.md) -* [如何分割(split)string字符串](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/how-to-split-a-string-in-java.md) -* [在java中如何对比(compare)string](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/how-do-i-compare-strings-in-java.md) -* [`Map`基于Value值排序](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/how-to-sort-a-mapkey-value-on-the-values-in-java.md) -* [`HashMap和Hashtable的区别](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/differences-between-hashmap-and-hashtable.md) -* [如何便捷地将两个数组合到一起](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/how-to-concatenate-two-arrays-in-java.md) -* [Java 是否支持默认的参数值](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/does-java-support-default-parameter-values.md) -* [Java 产生指定范围的随机数](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/generating-random-integers-in-a-range-with-Java.md) -* [JavaBean 到底是什么](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/what-is-a-javabean-exactly.md) -* [wait()和sleep()的区别](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/difference-between-wait-and-sleep.md) -* [能否在一个构造器( `constructor` )中调用另一个构造器](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/how-do-i-call-one-constructor-from-another-in-java.md) -* [ `finally` 代码块总会被执行么](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/does-finally-always-execute-in-java.md) -* [如何将String转换为enum](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/convert-a-string-to-an-enum-in-java.md) -* [在Java中声明数组](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/declare-array-in-java.md) -* [反射是什么及其用途](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/what-is-reflection-and-why-is-it-useful.md) -* [为什么不能用string类型进行switch判断](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/why-cant-i-switch-on-a-string.md) -* [比较java枚举成员使用equal还是==](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/comparing-java-enum-members-or-equals.md) -* [用java怎么创建一个文件并向该文件写文本内容](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/how-to-create-a-file-and-write-to-a-file-in-java.md) -* [serialVersionUID 有什么作用?该如何使用?](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/what-is-a-serialversionuid-and-why-should-i-use-it.md) -* [为什么Java的```Vector```类被认为是过时的或者废弃的](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/why-is-java-vector-class-considered-obsolete-or-deprecated.md) -* [Java的foreach循环是如何工作的](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/how-does-the-java-for-each-loop-work.md) -* [为什么相减这两个时间(1927年)会得到奇怪的结果](/contents/why-is-subtracting-these-two-times-in-1927-giving-a-strange-result.md) -* [Java 中如何将 String 转换为 enum](/contents/lookup-enum-by-string-value.md) -* [该什么时候使用 ThreadLocal变量,它是如何工作的](/contents/when-and-how-should-i-use-a-threadlocal-variable.md) -* [servlets的运行原理](/contents/how-do-servlets-work-instantiation-shared-variables-and-multithreading.md) -* [如何计算MD5值](/contents/how-can-i-generate-an-md5-hash.md) -* [Java中软引用和弱引用的区别](/contents/what-is-the-difference-between-a-soft-reference-and-a-weak-reference-in-java.md) -* [JSF, Servlet 和 JSP (三种技术)有什么区别](/contents/what-is-the-difference-between-jsf-servlet-and-jsp.md) -* [Java内部类和嵌套静态类](/contents/java-inner-class-and-static-nested-class.md) -* [@Component, @Repository, @Service的区别](/contents/whats-the-difference-between-component-repository-service-annotations-in.md) -* [如何创建泛型java数组](/contents/how-to-create-a-generic-array-in-java.md) - -> 编程技巧 - -* [去掉烦人的"!=null"(判空语句](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/avoiding-null-statements-in-java.md) -* [获取完整的堆栈信息](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/get-current-stack-trace-in-java.md) -* [如何用一行代码初始化一个ArrayList](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/initialization-of-an-arraylist-in-one-line.md) -* [初始化静态map](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/how-can-i-initialize-a-static-map.md) -* [给3个布尔变量,当其中有2个或者2个以上为true才返回true](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/check-if-at-least-two-out-of-three-booleans-are-true.md) -* [输出 Java 数组最简单的方式](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/whats-the-simplest-way-to-print-a-java-array.md) -* [为什么以下用随机生成的文字会得出 "hello world"?](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/why-does-this-code-using-random-strings-print-hello-world.md) -* [什么在java中存放密码更倾向于char[]而不是String](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/why-is-char-preferred-over-string-for-passwords-in-java.md) -* [如何避免在JSP文件中使用Java代码](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/how-to-avoid-java-code-in-jsp-files.md) -* [Java 源码里的设计模式](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/examples-of-gof-design-patterns-in-javas-core-libraries.md) -* [如何产生一个随机的字母数字串作为 session 的唯一标识符](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/how-to-generate-a-random-alpha-numeric-string.md) -* [如何创建单例](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/what-is-an-efficient-way-to-implement-a-singleton-in-java.md) -* [实现Runnable接口 VS. 继承Thread类](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/implements-runnable-vs-extends-thread.md) -* [我应该用哪一个@NotNull注解](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/which-notnull-java-annotation-should-i-use.md) -* [怎样将堆栈追踪信息转换为字符串](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/how-can-i-convert-a-stack-trace-to-a-string.md) -* [如何处理 java.lang.outOfMemoryError PermGen space error](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/dealing-with-java-lang-outofmemoryerror-permgen-space-error.md) -* [如何在整数左填充0](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/how-can-i-pad-an-integers-with-zeros-on-the-left.md) -* [在调用 instanceof 前需要进行null检查吗](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/is-null-check-needed-before-calling-instanceof.md) -* [如何从文件里读取字符串](/contents/how-do-i-create-a-java-string-from-the-contents-of-a-file.md) -* [遍历集合时移除元素,怎样避免ConcurrentModificationException异常抛出](/contents/iterating-through-a-collection-avoiding-concurrentmodificationexception-when-reiterating-through-a-collection-avoiding-concurrentmodificationexception-when-re.md) -* [如何让IntelliJ编辑器永久性显示代码行数](/contents/how-can-i-permanently-have-line-numbers-in-intellij.md) -* [如何使用maven把项目及其依赖打包为可运行jar包](/contents/how-can-i-create-an-executable-jar-with-dependencies-using-maven.md) - -> 网络 - -* [如何使用java.net.URLConnection接收及发送HTTP请求](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/using-java-net-urlconnection-to-fire-and-handle-http-requests.md) - -> 性能 - -* [LinkedList、ArrayList各自的使用场景,如何确认应该用哪一个呢?](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/when-to-use-linkedlist-over-arraylist.md) -* [StringBuilder和StringBuffer有哪些区别呢](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/stringbuilder-and-stringbuffer.md) -* [为什么处理排序的数组要比非排序的快](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/why-is-processing-a-sorted-array-faster-than-an-unsorted-array.md) -* [如何使用Java创建一个内存泄漏的程序](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/creating-a-memory-leak-with-java.md) -* [为什么打印"B"会明显的比打印"#"慢](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/why-is-printing-b-dramatically-slower-than-printing.md) - -> 测试 - -* [如何测试 private 方法,变量或者内部类](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/how-to-test-a-class-that-has-private-methods-fields-or-inner-classes.md) -* [JUnit4如何断言确定异常的抛出](/contents/how-do-you-assert-that-a-certain-exception-is-thrown-in-junit-4-tests.md) - -> Android - -* [在Android里面下载文件,并在ProgressDialog显示进度](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/download-a-file-with-android-and-showing-the-progress-in-a-progressdialog.md) -* [如何获取Android设备唯一ID](https://github.com/giantray/stackoverflow-java-top-qa/blob/master/contents/is-there-a-unique-android-device-id.md) -* [安装Android SDK的时候找不到JDK](contents/android-sdk-installation-doesnt-find-jdk.md) - -### 待翻译问题链接(还剩x问题) -- [Proper use cases for Android UserManager.isUserAGoat()?](http://stackoverflow.com/questions/13375357/proper-use-cases-for-android-usermanager-isuseragoat) -- [Why is executing Java code in comments with certain Unicode characters allowed?](http://stackoverflow.com/questions/30727515/why-is-executing-java-code-in-comments-with-certain-unicode-characters-allowed) -- [Convert a String to an enum in Java](http://stackoverflow.com/questions/604424/convert-a-string-to-an-enum-in-java) -- ['Must Override a Superclass Method' Errors after importing a project into Eclipse](http://stackoverflow.com/questions/1678122/must-override-a-superclass-method-errors-after-importing-a-project-into-eclips) -- [Fastest way to determine if an integer's square root is an integer](http://stackoverflow.com/questions/295579/fastest-way-to-determine-if-an-integers-square-root-is-an-integer) -- [How to fix: Unsupported major.minor version 51.0 error?](http://stackoverflow.com/questions/10382929/how-to-fix-unsupported-major-minor-version-51-0-error) -- [How to generate a random alpha-numeric string?](http://stackoverflow.com/questions/41107/how-to-generate-a-random-alpha-numeric-string) -- [Failed to load the JNI shared Library (JDK)](http://stackoverflow.com/questions/7352493/failed-to-load-the-jni-shared-library-jdk) -- [What exactly is Apache Camel?](http://stackoverflow.com/questions/8845186/what-exactly-is-apache-camel) -- [Access restriction on class due to restriction on required library rt.jar?](http://stackoverflow.com/questions/860187/access-restriction-on-class-due-to-restriction-on-required-library-rt-jar) -- [How do I discover memory usage of my application in Android?](http://stackoverflow.com/questions/2298208/how-do-i-discover-memory-usage-of-my-application-in-android) -- [Uncatchable ChuckNorrisException](http://stackoverflow.com/questions/13883166/uncatchable-chucknorrisexception) -- [Can I add jars to maven 2 build classpath without installing them?](http://stackoverflow.com/questions/364114/can-i-add-jars-to-maven-2-build-classpath-without-installing-them) -- [Update Eclipse with Android development tools v. 23](http://stackoverflow.com/questions/24437564/update-eclipse-with-android-development-tools-v-23) -- [Setting multiple jars in java classpath](http://stackoverflow.com/questions/219585/setting-multiple-jars-in-java-classpath) -- [What is the Java equivalent for LINQ?](http://stackoverflow.com/questions/1217228/what-is-the-java-equivalent-for-linq) -- [Hibernate hbm2ddl.auto possible values and what they do?](http://stackoverflow.com/questions/438146/hibernate-hbm2ddl-auto-possible-values-and-what-they-do) -- [How can I pad an integers with zeros on the left?](http://stackoverflow.com/questions/473282/how-can-i-pad-an-integers-with-zeros-on-the-left) -- [Sort ArrayList of custom Objects by property](http://stackoverflow.com/questions/2784514/sort-arraylist-of-custom-objects-by-property) -- [Efficiency of Java "Double Brace Initialization"?](http://stackoverflow.com/questions/924285/efficiency-of-java-double-brace-initialization) -- [Why does this go into an infinite loop?](http://stackoverflow.com/questions/3831341/why-does-this-go-into-an-infinite-loop) -- [decompiling DEX into Java sourcecode](http://stackoverflow.com/questions/1249973/decompiling-dex-into-java-sourcecode) -- [Why does Math.round(0.49999999999999994) return 1](http://stackoverflow.com/questions/9902968/why-does-math-round0-49999999999999994-return-1) -- [Eclipse: Set maximum line length for auto formatting?](http://stackoverflow.com/questions/3697287/eclipse-set-maximum-line-length-for-auto-formatting) -- [What is the equivalent of the C++ Pair in Java?](http://stackoverflow.com/questions/156275/what-is-the-equivalent-of-the-c-pairl-r-in-java) -- [How do I "decompile" Java class files?](http://stackoverflow.com/questions/272535/how-do-i-decompile-java-class-files) -- [Useful Eclipse Java Code Templates [closed]](http://stackoverflow.com/questions/1028858/useful-eclipse-java-code-templates) -- [How to call SOAP web service in Android](http://stackoverflow.com/questions/297586/how-to-call-soap-web-service-in-android) +#### 一些基本的约定 -### contributors +- 文档的文件名,和 `stackoverflowhich-notnull-java-annotation-should-i-usew` 上 + 的 url 保持一致。例如, + `http://stackoverflow.com/questions/8710619/java-operator` 的文件名, 就是 + `java-operator.md` +- 在每篇翻译文档内容的最后,要附上 stackoverflow 的原文链接 + +#### 每个人可以做(但不限于) + +- 找未翻译的问题进行翻译 +- 优化已翻译的问题 +- 输出问答精简汇总版(把所有的问答集中到一个 md 文件,然后尽量精简,让别人可 + 以在一天内把这 100 个问题的精髓都看完) +- 输出 gitbook 版本(现在直接在 github 上查看,体验不好) -thx a lot:) +#### 文档优化反馈 -- [giantray](https://github.com/giantray) +请大家多多反馈,优化已翻译好的文章:可以到 [吐槽区](https://github.com/giantray/stackoverflow-java-top-qa/issues/66) 吐槽, +也可以在已翻译文章基础上进行优化,提新的 PR。文章质量的提升,需要大家一起努力! + +### 目录 + +> 基础语法 + +- [Java += 操作符实质](contents/java-operator.md) +- [将 InputStream 转换为 String](contents/read-convert-an-inputstream-to-a-string.md) +- [将数组转换为 List](contents/create-arraylist-from-array.md) +- [如何遍历 map 对象](contents/iterate-through-a-hashmap.md) +- [public,protected,private,不加修饰符。有什么区别呢?](contents/in-java-whats-the-difference-between-public-default-protected-and-private.md) +- [如何测试一个数组是否包含指定的值?](contents/how-can-i-test-if-an-array-contains-a-certain-value.md) +- [重写(Override)equlas 和 hashCode 方法时应考虑的问题](contents/what-issues-should-be-considered-when-overriding-equals-and-hashcode-in-java.md) +- [从一个多层嵌套循环中直接跳出](contents/breaking-out-of-nested-loops-in-java.md) +- [如何将 String 转换为 Int](contents/converting-string-to-int-in-java.md) +- [如何分割(split)string 字符串](contents/how-to-split-a-string-in-java.md) +- [在 java 中如何对比(compare)string](contents/how-do-i-compare-strings-in-java.md) +- [`Map`基于 Value 值排序](contents/how-to-sort-a-mapkey-value-on-the-values-in-java.md) +- [HashMap 和 Hashtable 的区别](contents/differences-between-hashmap-and-hashtable.md) +- [如何便捷地将两个数组合到一起](contents/how-to-concatenate-two-arrays-in-java.md) +- [Java 是否支持默认的参数值](contents/does-java-support-default-parameter-values.md) +- [Java 产生指定范围的随机数](contents/generating-random-integers-in-a-range-with-Java.md) +- [JavaBean 到底是什么](contents/what-is-a-javabean-exactly.md) +- [wait() 和 sleep() 的区别](contents/difference-between-wait-and-sleep.md) +- [能否在一个构造器中调用另一个构造器](contents/how-do-i-call-one-constructor-from-another-in-java.md) +- [`finally` 代码块总会被执行么](contents/does-finally-always-execute-in-java.md) +- [如何将 String 转换为 enum](contents/convert-a-string-to-an-enum-in-java.md) +- [在 Java 中声明数组](contents/declare-array-in-java.md) +- [反射是什么及其用途](contents/what-is-reflection-and-why-is-it-useful.md) +- [为什么不能用 string 类型进行 switch 判断](contents/why-cant-i-switch-on-a-string.md) +- [比较 java 枚举成员使用 equal 还是 ==](contents/comparing-java-enum-members-or-equals.md) +- [用 java 怎么创建一个文件并向该文件写文本内容](contents/how-to-create-a-file-and-write-to-a-file-in-java.md) +- [serialVersionUID 有什么作用?该如何使用?](contents/what-is-a-serialversionuid-and-why-should-i-use-it.md) +- [为什么 Java 的 `Vector` 类被认为是过时的或者废弃的](contents/why-is-java-vector-class-considered-obsolete-or-deprecated.md) +- [Java 的 foreach 循环是如何工作的](contents/how-does-the-java-for-each-loop-work.md) +- [为什么相减这两个时间(1927 年)会得到奇怪的结果](/why-is-subtracting-these-two-times-in-1927-giving-a-strange-result.md) +- [Java 中如何将 String 转换为 enum](contents/lookup-enum-by-string-value.md) +- [该什么时候使用 ThreadLocal 变量,它是如何工作的](contents/when-and-how-should-i-use-a-threadlocal-variable.md) +- [servlets 的运行原理](contents/how-do-servlets-work-instantiation-shared-variables-and-multithreading.md) +- [如何计算 MD5 值](contents/how-can-i-generate-an-md5-hash.md) +- [Java 中软引用和弱引用的区别](contents/what-is-the-difference-between-a-soft-reference-and-a-weak-reference-in-java.md) +- [JSF, Servlet 和 JSP](contents/what-is-the-difference-between-jsf-servlet-and-jsp.md) +- [Java 内部类和嵌套静态类](contents/java-inner-class-and-static-nested-class.md) +- [`@Component`, `@Repository`, `@Service` 的区别](contents/whats-the-difference-between-component-repository-service-annotations-in.md) +- [如何创建泛型 java 数组](contents/how-to-create-a-generic-array-in-java.md) + +> 编程技巧 + +- [去掉烦人的 `!=null`(判空语句)](contents/avoiding-null-statements-in-java.md) +- [获取完整的堆栈信息](contents/get-current-stack-trace-in-java.md) +- [如何用一行代码初始化一个 ArrayList](contents/initialization-of-an-arraylist-in-one-line.md) +- [初始化静态 map](contents/how-can-i-initialize-a-static-map.md) +- [给 3 个布尔变量,当其中有 2 个或者 2 个以上为 true 才返回 true](contents/check-if-at-least-two-out-of-three-booleans-are-true.md) +- [输出 Java 数组最简单的方式](contents/whats-the-simplest-way-to-print-a-java-array.md) +- [为什么以下用随机生成的文字会得出 "hello world"?](contents/why-does-this-code-using-random-strings-print-hello-world.md) +- [什么在 java 中存放密码更倾向于 char[] 而不是 String](contents/why-is-char-preferred-over-string-for-passwords-in-java.md) +- [如何避免在 JSP 文件中使用 Java 代码](contents/how-to-avoid-java-code-in-jsp-files.md) +- [Java 源码里的设计模式](contents/examples-of-gof-design-patterns-in-javas-core-libraries.md) +- [如何产生一个随机的字母数字串作为 session 的唯一标识符](contents/how-to-generate-a-random-alpha-numeric-string.md) +- [如何创建单例](contents/what-is-an-efficient-way-to-implement-a-singleton-in-java.md) +- [实现 Runnable 接口 VS. 继承 Thread 类](contents/implements-runnable-vs-extends-thread.md) +- [我应该用哪一个 `@NotNull` 注解](contents/which-notnull-java-annotation-should-i-use.md) +- [怎样将堆栈追踪信息转换为字符串](contents/how-can-i-convert-a-stack-trace-to-a-string.md) +- [如何处理 java.lang.outOfMemoryError PermGen space error](contents/dealing-with-java-lang-outofmemoryerror-permgen-space-error.md) +- [如何在整数左填充 0](contents/how-can-i-pad-an-integers-with-zeros-on-the-left.md) +- [在调用 instanceof 前需要进行 null 检查吗](contents/is-null-check-needed-before-calling-instanceof.md) +- [如何从文件里读取字符串](contents/how-do-i-create-a-java-string-from-the-contents-of-a-file.md) +- [遍历集合时移除元素,怎样避免 ConcurrentModificationException 异常抛出](contents/iterating-through-a-collection-avoiding-concurrentmodificationexception-when-reiterating-through-a-collection-avoiding-concurrentmodificationexception-when-re.md) +- [如何让 IntelliJ 编辑器永久性显示代码行数](contents/how-can-i-permanently-have-line-numbers-in-intellij.md) +- [如何使用 maven 把项目及其依赖打包为可运行 jar 包](contents/how-can-i-create-an-executable-jar-with-dependencies-using-maven.md) + +> 网络 + +- [如何使用 java.net.URLConnection 接收及发送 HTTP 请求](contents/using-java-net-urlconnection-to-fire-and-handle-http-requests.md) + +> 性能 + +- [LinkedList、ArrayList 各自的使用场景,如何确认应该用哪一个呢?](contents/when-to-use-linkedlist-over-arraylist.md) +- [StringBuilder 和 StringBuffer 有哪些区别呢](contents/stringbuilder-and-stringbuffer.md) +- [为什么处理排序的数组要比非排序的快](contents/why-is-processing-a-sorted-array-faster-than-an-unsorted-array.md) +- [如何使用 Java 创建一个内存泄漏的程序](contents/creating-a-memory-leak-with-java.md) +- [为什么打印"B"会明显的比打印"#"慢](contents/why-is-printing-b-dramatically-slower-than-printing.md) + +> 测试 + +- [如何测试 private 方法,变量或者内部类](contents/how-to-test-a-class-that-has-private-methods-fields-or-inner-classes.md) +- [JUnit4 如何断言确定异常的抛出](contents/how-do-you-assert-that-a-certain-exception-is-thrown-in-junit-4-tests.md) + +> Android + +- [在 Android 里面下载文件,并在 ProgressDialog 显示进度](contents/download-a-file-with-android-and-showing-the-progress-in-a-progressdialog.md) +- [如何获取 Android 设备唯一 ID](contents/is-there-a-unique-android-device-id.md) +- [安装 Android SDK 的时候找不到 JDK](contents/android-sdk-installation-doesnt-find-jdk.md) + +### 待翻译问题链接 (还剩 x 问题) + +- [Proper use cases for Android UserManager.isUserAGoat()?](http://stackoverflow.com/questions/13375357/proper-use-cases-for-android-usermanager-isuseragoat) +- [Why is executing Java code in comments with certain Unicode characters allowed?](http://stackoverflow.com/questions/30727515/why-is-executing-java-code-in-comments-with-certain-unicode-characters-allowed) +- [Convert a String to an enum in Java](http://stackoverflow.com/questions/604424/convert-a-string-to-an-enum-in-java) +- ['Must Override a Superclass Method' Errors after importing a project into Eclipse](http://stackoverflow.com/questions/1678122/must-override-a-superclass-method-errors-after-importing-a-project-into-eclips) +- [Fastest way to determine if an integer's square root is an integer](http://stackoverflow.com/questions/295579/fastest-way-to-determine-if-an-integers-square-root-is-an-integer) +- [How to fix: Unsupported major.minor version 51.0 error?](http://stackoverflow.com/questions/10382929/how-to-fix-unsupported-major-minor-version-51-0-error) +- [How to generate a random alpha-numeric string?](http://stackoverflow.com/questions/41107/how-to-generate-a-random-alpha-numeric-string) +- [Failed to load the JNI shared Library (JDK)](http://stackoverflow.com/questions/7352493/failed-to-load-the-jni-shared-library-jdk) +- [What exactly is Apache Camel?](http://stackoverflow.com/questions/8845186/what-exactly-is-apache-camel) +- [Access restriction on class due to restriction on required library rt.jar?](http://stackoverflow.com/questions/860187/access-restriction-on-class-due-to-restriction-on-required-library-rt-jar) +- [How do I discover memory usage of my application in Android?](http://stackoverflow.com/questions/2298208/how-do-i-discover-memory-usage-of-my-application-in-android) +- [Uncatchable ChuckNorrisException](http://stackoverflow.com/questions/13883166/uncatchable-chucknorrisexception) +- [Can I add jars to maven 2 build classpath without installing them?](http://stackoverflow.com/questions/364114/can-i-add-jars-to-maven-2-build-classpath-without-installing-them) +- [Update Eclipse with Android development tools v. 23](http://stackoverflow.com/questions/24437564/update-eclipse-with-android-development-tools-v-23) +- [Setting multiple jars in java classpath](http://stackoverflow.com/questions/219585/setting-multiple-jars-in-java-classpath) +- [What is the Java equivalent for LINQ?](http://stackoverflow.com/questions/1217228/what-is-the-java-equivalent-for-linq) +- [Hibernate hbm2ddl.auto possible values and what they do?](http://stackoverflow.com/questions/438146/hibernate-hbm2ddl-auto-possible-values-and-what-they-do) +- [How can I pad an integers with zeros on the left?](http://stackoverflow.com/questions/473282/how-can-i-pad-an-integers-with-zeros-on-the-left) +- [Sort ArrayList of custom Objects by property](http://stackoverflow.com/questions/2784514/sort-arraylist-of-custom-objects-by-property) +- [Efficiency of Java "Double Brace Initialization"?](http://stackoverflow.com/questions/924285/efficiency-of-java-double-brace-initialization) +- [Why does this go into an infinite loop?](http://stackoverflow.com/questions/3831341/why-does-this-go-into-an-infinite-loop) +- [decompiling DEX into Java sourcecode](http://stackoverflow.com/questions/1249973/decompiling-dex-into-java-sourcecode) +- [Why does Math.round(0.49999999999999994) return 1](http://stackoverflow.com/questions/9902968/why-does-math-round0-49999999999999994-return-1) +- [Eclipse: Set maximum line length for auto formatting?](http://stackoverflow.com/questions/3697287/eclipse-set-maximum-line-length-for-auto-formatting) +- [What is the equivalent of the C++ Pair in Java?](http://stackoverflow.com/questions/156275/what-is-the-equivalent-of-the-c-pairl-r-in-java) +- [How do I "decompile" Java class files?](http://stackoverflow.com/questions/272535/how-do-i-decompile-java-class-files) +- [Useful Eclipse Java Code Templates [closed]](http://stackoverflow.com/questions/1028858/useful-eclipse-java-code-templates) +- [How to call SOAP web service in Android](http://stackoverflow.com/questions/297586/how-to-call-soap-web-service-in-android) + +### contributors -- [wklken](https://github.com/wklken) +Thanks a lot :) +- [giantray](https://github.com/giantray) +- [wklken](https://github.com/wklken) -more [link](https://github.com/giantray/stackoverflow-java-top-qa/graphs/contributors) +see [full list of contrbutors](https://github.com/giantray/stackoverflow-java-top-qa/graphs/contributors). ------- +--- -To Be Continue ... +To Be Continue... giantray -Email: lizeyang@foxmail.com +Email: -Blog: http://blog.csdn.net/lizeyang +Blog: 2015年08月18日 于珠海 diff --git a/contents/java-operator.md b/contents/java-operator.md index cee3e03..230100e 100644 --- a/contents/java-operator.md +++ b/contents/java-operator.md @@ -1,36 +1,40 @@ -##Java += 操作符实质 +## Java `+=` 操作符实质 + +### 问题 + +我之前以为:`i += j` 等同于 `i = i + j`; -###问题 -我之前以为: -i += j 等同于 i = i + j; 但假设有: + ```java int i = 5; long j = 8; ``` -这时 i = i + j 不能编译,但 i += j 却可以编译。这说明两者还是有差别的 -这是否意味着,i += j,实际是等同于 i= (type of i) (i + j)呢? -###回答 -这个问题,其实官方文档中已经解答了。 请看这里 [§15.26.2 Compound Assignment Operators](http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.26.2) +这时 `i = i + j` 不能编译,但 `i += j` 却可以编译。这说明两者还是有差别的。 +这是否意味着,`i += j`,实际是等同于 `i= (type of i) (i + j)` 呢? -再照搬下官方文档的说明 +### 回答 + +这个问题,其实官方文档中已经解答了。 请看这里 [§15.26.2 Compound Assignment Operators](http://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.26.2) +再照搬下官方文档的说明 -对复合赋值表达式来说,E1 op= E2 (诸如 i += j; i -= j 等等),其实是等同于 E1 = (T)((E1) op (E2)),其中,T是E1这个元素的类型。 +对复合赋值表达式来说,`E1 op= E2`(诸如 `i += j`,`i -= j` 等等),其实是等同于 `E1 = (T)((E1) op (E2))`,其中,`T` 是 `E1` 这个元素的类型。 举例来说,如下的代码 + ```java short x = 3; x += 4.6; ``` + 等同于 + ```java short x = 3; x = (short)(x + 4.6); ``` - -stackoverflow链接 -http://stackoverflow.com/questions/8710619/java-operator +stackoverflow 链接: diff --git a/md2html-v0.5.jar b/md2html-v0.5.jar new file mode 100644 index 0000000000000000000000000000000000000000..ca2ded1500089ddf01bd81faab08717a503a0e7a GIT binary patch literal 58143 zcmaf)W0WYtmZi(aE!(zj+qP}nwr$(?E!);D+jiC5*YB;F?w)=#xia%loLG5Q#18B) zGv%d#L689;ARqvmT}&hZ{?maB00JN*qAWloAuCEJBOogwDx#!JD>uRt-=ozB(yMEwuz( zv3sw3cDXon$qq(z#K~uX}WYGWbdn~m(8kZ>(+A5{Z}l{LFW)MA(R*8 z-p2ERm7isv5_38vNT`Rh~ret0F_V@p{8GP8@Dxk49ejIh8S zK@r_T0cthMR4#Kem>s@zAte&6xBL5emq|8-)((dYGHBM=qJXW0Dh5*K;k&g(<&h(! z+KcJP3$Xf(F%GXas`0ドルDJj@V+tzr4_1yML)rGeL(AM}hhaq0`JXWa+jW6fK}2Gv3F zN`@;*D6aftTt##>pT%aLcmc%^yB`l@glfRfldP0+xCM!e{7G3&y?Q$h|~ z!n)BTBTm)1X`>^~%vjvfLyc2_3ドル^2rRN@q*hMn-1;|P4!s*L;+3yO2Ah{#+=S6?`U z63HXh-|fly%T_oJ7FBj=UgDLr7w*l$Lwc*$}G55=&z{)tCX7ux@V%~FgqqR;?{~wT<`wp9_|l@i5HdG%-!_#02UaAMg)R zNkA%Ru8cbv-tBK}e@s;gMlOHuSC#^roF+f}*n!oM(^(B?r`WNgn%3Bhj2(fXX2CBK z2HV4EItZJ)mYy#?a@;u%F^hy(LyeZ~_FycGb5dKAd)8~?m9DiRmIZFXv?d@*Kfr&e zRYz;8e)X?f-T$T5|5+%6{~w|JQzkKLkorl>I6pn4(`m(e7Ld)X@&pshUFsb9Nm{2zpyuqfd==+W?!21ik_T?b=@9NXtZNM3`r zeHLO`UX!8oM$EF?CHl>_+cEN-_8%O-1G8SWkfXWoL?{ka$$E)THnZDxX7o}A)h2FL zw)RF4q}v%HxKO;OV>FA2uV~p;4s1I(D|d0(W(EjAm27c+>p)`1_jozHb@s2-Ze`GV zL%@%22Fr+94ドル?kv|7wXd|wN=ukc-6X7}Ts*(C!_t|7WS0Z*e z?!3rylR`fQ__xs`PVZ{#Q^ijq0mTS$FIo42a{p{^@Yb+Yi-c-@nQn!{)Df^G)6-OT z>M;co`SSG6LYxD&SR98V*x)b@cwX@1rfecZ*&L__cvy@STLf#dnMWk>(uj6W+QEo1 zGhvjKLz_A|PpO))mMY~oiQ!p6OMKCCmm~|~u$>u|#j7B!BF!6fmoNVDwMouQaT6he zREkR9Y_V4yC@N@0aAM|W#r#95qecLzgclRSqSQuTTMbitaz%YC&obE{!XySl`5;oP z;3TBrbezvTGjAXa)1>rURjp6w_a78kg}g{zqQVz4G4Q8XRvY^2Np#U5P4_NTHsWl7 zjcJ6Scj|LkQ86uxncIGZ1Al}P)l}b$!~}VDuxS~(kj41lk)1zeV2T(5*OlCgvjO?I zOcZ&9HqmkX(-lAoo8l8A({ETPJOfD7WH(a{)oj!}J|1CDWP^J&3PgtIcY#hBen2w< zGzDVS@~M&@$|f`81J(^+1ev+Cfz3_ZXW4SVC0 zsyEZnw&xYf{iVAd`zkf+>s~{wcHxdmjF_NMQ zEUsC*1^TNfV~xc7AyMiKGzrRn6$Ve2i1$H2- zlB2+>kPlQqrP)^%N|#5Hqp>%MKRsU>3D9gC3#)Uxa!?q?Qc?<+p##b0inue?$w5t< zpcs)>4r6Ga8jNp&s@tf(_y-t5tz1)2wDFYa z(FTn{;dZ(fZ7I6N^P>UW3X^ zLXDbZZ;S#tHLZNc@>sb|K@eK@E7t%EHna$G=8qt2ドルB(FV$=F(a*AoE^M(Nx}HBr>9 zVn?RZd^$dYkKf*2l<7fAYX+s^W#U3Gt}#)AeJhf@GCEUz@F9u1_}C zf7*HR>)X@!m}<;qy=zj+otj=$c83aw0!n<=g8q~uwxwvoq;uo=i*1&^`;iczzuycb zV=}y=i{n`x91+xahCj$<42r≶cm4$l49n@m=5?(j%t_ehdtd4xz}(jyktqkbxs* zMAjO*qEVeO63yrItfoUQ@qQh;Tqeos;HoRx@3}EBjb;04Pt%2#WyNUgRno3yU#T@x ziZu)O`SPdg3}s?_`|suoGtZ1`spYSmmnJoozbRSM`mqN7(7v_r zPLS-NtxSC+H>v%J`_&$Ofd~R|GZy5A*qi+cq^4dUcAMg1&6ドルfEaqB%`J)8R3KgH2M zh23b%+Opo8D4xK8=3Ob zt%#BAcPi5EU2%!Dp>8avT_`7?R1KwQ&5Yt~I{&l~`GGrf_rc9bATp|Kp(%E4Zz=K& zx8THJy_070z&_+FyX+n{6n9sh1(Xz!^ZWvGDr~&RTa0_?V&q3daUTZ>O;v%;(?TuS zWUc6r0`vOZOv$Vj8FU{F@PU2XX3sOSDk68;HZPo+*V*eMLfw}E`$(DH)5fM$PsvM- zE%J@BdSHO9fzt_XbAkVp47i8rI&Z%AuI=y|&H zS6!PS)cI&B5vOjP5Ki|Q zU?NT!2z8BHC%yYnkCqCM5rh>6kR}iYb=N5L_V=}GO1~h}wQG(j1BoR)1gV}IerqT5 zp?%aW<3ry8jgp7_h6p-uv0a$nc-b>8b4|T_& z!{(~Ze^7?9QMh|m9I$&s)n=47T|(8i^sbV-g9it?ak7%TuR2Jy%X+|?WCydy`X=i2 z?^|pbPTCkOY`qg(=oGt@%?%2k*%-&LZV60hJ3pd7 zNtJ14E$a;qiDsBGkZ$N!7e}!zjuXL5<2v3hagcmi1ux-6ok|lwwmb#f{v$s;7qdol zfkUhts+;Qsz_$B!I1NS=^9DeG5v|ECtKS<4ubhcr?qvq?xjj<{cmwy+8|jjln-;py zTN3DF26bVvO_HRZto25zQyu6(tu#%#zrG8f?8*8Ld};sfzwgn*xBF;)4^D}bs~a0x z7FV>mc#}6|y513T1Q+KLjD6DNr&a(4T|Od4ZNeK#gIW{3Ow1>{#I%TK-~J8#kDan! z2OGe~U#oV6{GTa8mh*qLRR4abEM#YEYGL*-LzSQ>ha`YJJUh4GIw|-g57?II)X~Sp*D&j@Iow2<3owd+k$cv>lj8qMEbc^d*HtSC6T-?cTQGsJg^g|7(WV=Txz>)9J0;XBv zhPIUGNcNCisXIx=*p)Kp*rP%H87T+a8V-@`%7gKZbDqg&oOa*8u&VVIpYge@FRjGXNpJ)|w1 zoGonsC6O3;9=SpKUp}ke^YZ2v0Xd+c@nZvEhJXwr^vEs-j)KXZl7{0h3VV7C1Pr&p zuL|K!0ziPksorugyw}uyy*zyY>;tAS@K^|;2%^Ea!mSJ0h~36^g156vHWH_1jWl#< zGP>th39C~uOe*1?gw4%gWM^3w*+_}i@-mjfT0GK6ij}RBX8W?mCyHqy3h%s0PDGpM z=}0m0GzMH9(2m9~9zD00|e1W5Z0nx}=`@vbi`vu9zf^FeX`^&frU2w-|v zwf7iNYXV_Eqq%TnvIm%sX^eMqf+c(*MZb^5n7 z;_8E)gS}3$fBwUyzO!yuL;P*wroY$!0eG_i4I@(h+ZL9vHL`Yb`U_Cx4IB+@oc`rj zl{Ms6ドルp+7V(Kg_Mk_+*ppeVcKMYJihREjlIizNl!J7I*l=%usHlKp4D5q)koAO(fL z07t;vPLm@22GO6k8W4>oq?ul_old;X-exj--`_4t{Bfnp%lYMgp$S6l7jn~r+G_;h z@hr3>{2ドル*~EWuQo3-bjffB|73KZ*~u3ZHaa1#TC(&3Mli3MW1pP7Kc+kQ7sjwNXFQ z71ZFiI>IsFNE)C%6@WqdY)zP{|0xh@;8s<~&xyo{evGD|PhjOYh}S zDux84klr?I!_kGDoL}smwk6O=#md^9j?e%*4o))AmtE^Tvj5EF`yFVMK3{A=bJ|2i zm?v=-8(bFMOp+ZqeLEBMY3OxvVP-8cRS#2^_t4rZzjNN02}IcX{Vv3&O4p?&_I9h)>!?hVZqPf9uZgvjUp10!eP1#+ zfEp_*Nz(L*#cE#!-k8Fj43$;VZ6nxHTV2owQ7()7_Tp+UV0_Z zM-1L~ppafdX|3`iJM%E?ZY*#d_Cdz*nJa8~43Z|e&@MgvW~d`bWV@lH`=^!AF1-AL z=MKJg1lu)!ioWt~Ve?8O9Lsaw)A_m@@pUEa4gNREfkwDGEitB_7=K+NaXWcgI|Z4W z_ShHmV)#?Tt}tFhf8Guk6^Cn1(?V#4+Ooh7_KSPx*t}odeDVT28H9puo5ycE|5)2% zk@dPD{t}?WzgY7B46y&cw&DNV0VZQ$Vf)Wfb)?~;ucWf_lat1L!{Xx{fh-RFE?jIP zQ6+*fSXk1mXag;z0n!FJZiOYDlvxbAXQNJCKj^~rx`_V%S2m#z!>|{YsVCu z*HmHN=k!Nv0X1;&Yewko_A8KHrvpdt#HijK8?0W{YZn&Dt7zs=!m$?0kA0Ey z*tgQ3pTy%G!7skXV=ma8s@MLQtJnFMidP9CJ~|?CA=_v&k~}OiUici!Ba6eth6!l# zB;8(7TMx9c=-LH(w#wU57$_FXeLxf`B}IPR4WZ0E$`niHK(?ZUM*HMlPtY>yB1ez7 z)C>m9D~g*QsImN>3>D0(d0s~Hq%((w%c^;I0)@R&$xL~EqzYlrBoHsgi*RpD6$|C* zg#};CE4p?TQ05T0_&))GTq-3&Tk6!#FoNQanGDRGi%T`OjMGFR*GpiJeM8m9{gGFU9S*(@{=ehUndPV!@ z%mbXYSTxJ3ドルD0O(%p*j_B;6`RCz&}VJH@P=qpiKFnMWlaq+)ZlNDK?Nmt%T{MM zTDAjd;7KCx1B*yd;Dq4-clD7o3A09`Z2V|js1eSpqyX~|NSwXpJ@w`uPmz2w`E6_n zu`(uAvOY*6$~eo$Qle<}?ab(~qn_y{ihhkqaiz`lel7?c+g6b&{l-olyf(yz5cj?x zf!p_GfhMZ)EC%VgtO#{CZu1#gDH2`1c|Yst)l z{%B6l0l^hfn9<4*o1yb^9@at%6it3*uj|k{68irg;7?-hhFm9POFR$A^R70$fEY zaEmLOQ$t;br*j3SV4^?}43ドル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ドルn49C{s7dr|$}JMTmM#z^k@FC&Ey*m ztnZ+x>y7m7Q-aqI)%xc6-s=ee4Eebv%~(L<41&7oc?pc<{>EK8 zDNHPISfA2z9Z34Yt(i5XNXl9ドルGfU_$V|-m27zdTG0n&+RdXM78ドルFK*Ao-O|b>Y6p# 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ドルyjvJ>Q^=0#Aivt})G zONlNT^)feT)euzbOSp+^eALpVj^_ns>Z=lq__4EJZR6l)FuxdxPASkZGBB7G(@md7 zkm-T03$uZhbsYRn-R91Ix`-tUq3yPT^sMt`%^6?F2LwwKBuk-4NZf&m++bf0%{f)(;IoC$%~RPii+F{O@6bJQ zWxgP``qbtqaU1Qy+Q3vI*(H&+O<`x)%y7ドルix;h7rh4! z>hFA^x?8D_af&MHjb7Vs$#cdAcWf_b7%jifg-WWWqcJ+eg80zRef+t3Ex^_^<<6qie4s^`v?{j5zwzl{1z zA5#Igo)a*dwc{Ruc|X)`x-Q6zNdEohRax0?Tqq#kfRif8s}fe6oqs?NH)J`v{OJw0 z1vtyD@oQF3Y}VuozM2`>@%>Ng>Y$JDN)Lcc@%xf?-v%^HIi9l!$Pcmou`0IjF+dh5CWk=?R^L4D9h)VV1C@dCqbGC}(5nZ-ioj`RKqKRx`_A*+B4F*7YMN8e9(HsCtQ^SlrmS+<5iu6u zY`$_^?z?OikFq`3c2ドルNv9az0Nl=)yj%s$M%p7?uZ!=K&hy&-+WT%_G@Qm$G+6LgkX zHd7Xnrc_0mNK3G&Zo6%6pTU_kt_m z6ryj-NOZ!tKI)oVfivIhvcG-+deG(L4owKzkH!JK6osp~4a!~z=xjn8-J?G`;Gxa= z;!1+MGxPM5%?t3R%TcBlnS%DG|zlv|vffRd6bZojv=-fXBRs zx)7waQ7-k3AJDWvHFw3GO`nR=We#xp*E$P5JP2%$W)I@J-&S?R!m{oe)9stBP4eCY z_(AP}`Gz^IBW_k5msr;euU`a2VZH@?$iX4}~Z^aDSw#?kfTg2Lbq1r#Y;(o?@e;7B6-4PWiH;k)7T zKHP1FsNudY%aTamh~k%wy&P?Zr#|tT&-HB@{5*1xT-qt60!O}wU45TL@NRm=qyG@O z`_+9OO|pK~O1LW#vz;e8{&>GORS4OsY)*zr#+H;0F57rO+~^b}flY7}exdOID$ikg z?lU#l{o>I8Mjx9_f;Wu5yc+*9e^I(S_A#3ドル*ryRO{}CNV%ME)5r1U-K`Hfai_DA#Y zM;hnj4E8*ash-abY7Bhc3p>?BFQYn(T&MGreo?sFCnKk|l77l@wln>wp^|>makY>7 z&K@OwDsi;*^c$*Yd}?upq@oFue%f)Y$PlNQl752lX($kv1CoA<@mb6ww@z?ks-82{ zyTkRB3wFXkNr%m;`-C-#8W0R78E8{3kART1VdxA6g#{9Y2BJE4Y*|dTToyE=S){?^;sH zAAKu38|RKc!(TNr6fb%UI~%u-KP6u^9i2$=EQnF~daU@`9gmbZ#jCHZ?uf{DbPkQTz_{R|4Hj=ePMc%igX;7rHXNSi0lt&H=rKE$KRj?GTGf3LOiCn^4aQ3P z?Efz=&M8P29%{2~yHA^^ZQHhOpSEq=e%rQf+qP}nJ>SgS%>0$xTx3_JQc2ccPo(4T zKM8KzeB9N+8jC~&~Act2Y96MP@Sj<~u}g@)_<)v@iivbrjdovv@x@-@hffnatp zSt7xcB;0j@jzl^^k0F>l&ZHhTVy->YsS=W}0UOP)&P?er!(VC-!s-*jrU=+`p0$YV zwyfHqRh2(5e9f&1xzx_yvvu&NmqZZ*9@?D#Ik3=oMtpSHMIYm1ykht#LbHn4(VMiG zh!vqkaS9&@~=tuoOtpB$bGAiU(`#p+_c)!+lorRK0ns& z#ss1rFi7b3H>fq~)ot(DU?id2C1B}>^L(ulpS;>v{8Nn%trfnan}^9IY3x$x5fYg|8}_E0y;FwmkxMDkgR7T4HvNATlJ@M{NMqtGp3g zqYoMFXm&zpQ3(=SL%QW()wz9+Q4+Bhf_hs6>;AIH>u5^8y(vd8<)uf-qybT9(?I9FZ}`%aX?U-oy0nnA_41-rld6ndxTf=FQAM3%vX$u zOWqTaK@$Doj$P6d!S7x5d}B38v|Wif!JAk;F=-IZ0Q|D&cxrElbEjfOAmPVI|PKs>Mba}jCZ=&yX~&@+f&*vq}DrP++&}u3CK5{ zyOtQlM^}5m9tHc{SC=sLbmN>yQ3n^|s}in9@Si~Vs@PysK^=r1_6a}A zK%BCY<_g=2c!dLw!CG5Vg6;i(n4MGDg6@cclf;N{PYBSSw1({=biu=eq5 z^kpL@ldm})Xu8}oU!i8A7j4mp$c0qvJ#!|e(djhJL+XL-q5_EDrk$*pMb;{k-b_Zx z=$s;R#5_VSfmC0qTpmR00`w;-T(CPdij6I^pX@jMH?4Aw;(Vq^e5NR07%${>Ps3zG z*m8+Nq9ebXj2I!eNw1v;^*o!hYbaY;vDF6V&#o7oSg>E_dU0BsvgOKP+;xo5l$%{C z*;L+NIaDDt;KsW3A>K77ドルAg`&y_j^H)}Y~hD6mo_C0lfBRq;xSfnN=&Y8IM9*4M7k zoiNVx7O%=90ulFRX7clZ&-StAf(%Nwgpcghl$Lhi@=kF};F~Z&F&r>VmH| zC8j;0bSG8`7=B4TgS#NP>~p-{#NYmQ1sHFpo*|nKJJlS=Os@S*$^A?!cW&*8c893% z2(-A5_iv?&g)7qIex*FDqG$>E>N4=sg{enBdZ zNlFjn7O;?R98OM?D`SODL?0>ZBb!3wx0r6EY$Ek@a;}bJn z=Kn6PByzBk#<+phh_`w^9b(xv@uaexkhaejb)1o&gdt*j4gz!7ea)rssqo&fz)n~p z4fQ$ACUhI_tv6kBaYd|a;Z2#xSWCGwFUfd&b5188%W_P;}dTnT` zc~YvN79{~dnG7~C25n?Q5UTv%;+u2XSTY=1Ixx1)D(fKSXOzy5E}%{HZ%$$U0eLNyW{mzW+Uo{yaH#~*p`_14!4z|m76(M6%98bLh%KS1&TCqwK+Kyf+G z^t~{Bphvx-83*IT0O(Wj*Y>LaAdCZ zQexag6{x)`yj;D^{i9)DN4!EJcbyfPmU~ z{$KL{KjWsL|0Dk)Wq0KLUvqKV5zJ&*CMzUP%g|)k2j4Uk2jWT&jQ^9B<^0da-rculuy90f>>>kF5Ai+1$b%vE zz9|M>_=>2tU?3Wr#3pD~JbMnC93Hoo{KsH~+aA0J%2knev8tgc(J*t)J6~Kc*1xZ- z?bGwGO~7kW--JvK9~OaHJXH+|-yw{`2v`;87P}|y*^(w$ly^^MKw{S;nCO~ODwG%r zeG#I6K|i>ksN@U9GVKjq7U`7m8%BRBd*W$L1?dI%qPP`OUaCM`o|+ornbu&5E56q{ zPIVm;%nBFe4%ci%3wARL&(VT^8`mfa4o%kWJq6y}C2lR9eB}+0bln~)z9H2!(fA5z zo){=<2?j>>uoWU~Hy*=^8`k^xBZi?tiXMa7Bx#c(+YHxR&ZK!K5q@;u-w0e7fA@PL zC8&umr?Mt9YklDc>hkNl6g*>oxy|^<3kdecmq%#`ro28kcqzsiflhdn6ugomcektw z`o`{TtOz8AOwm`e(1|;;$htXc#<1g2>#LW~r$O(R2zqSeSULJ*E!WezagNI>6=}Cu zj@or!gHboR>u|NBybG7Da4j4xp{*p};;oT~=NvYEF?w zC-e-8phklS79QJ0U>IYBVuq*38s?K(cmVYI=7qGl(LjBvc;Y~ z?P0+yLsOk+*X7riK24%nzh&OOF8c3R$Q|IvH#={$yIGQH6w@x%+4*INF;Bj2fp50$ z-aP|YH(NByL56c#y$_x6>z;VHA=9tgIX;;NM%xv`2hA#FQ*^m_LNWMe+rCc})4qC} z7PKjh$_-oHyzErZ?e%o|zLT_DT3@}%)s)?0|yMM1O^v~(FvZc&_ zf6w{od8gSq@wGoITsL3T%@mEm2Y(sV7M&EV^aR|fW!e{>ygN2zhVnLR`!uW%-Ab1= zrNsT~0VZMr(z<{-%bbi&kcpy}f2uhemo?m0@a<6grarg_tkc5u+n=vbv!hzqazwro zCfb#8q}y=ex`w2p%g+i;>qS)v#|%#jnmBacSQ?eZuxk^lILJf4?e>PRZREzGD&!p zrb^mno2qQ2p^D*h7#+PNgc`L zT)RDjsP*lNk0G6I#xFeR5j@(JbS{Vl_m%Y{KL{>o+d2ubV34Sf%=fuj8Md<+gv{nv z+?zE|EMK_Wt{9u~>|oak&cWVGPli3^UpU8Dd`G!>oVwVy znEsBs1O)H$&?^kTa1RXM4ywr?b9_@V=%XOvW)SgXnLvSKu3TT4$TUsK(pNOtq+olQKn`HtV{ z%v-fpRKJ=Dau+3=ruC=Q8MBFjUzas&4oy`oQ-iop;lWL3i=LoTcA*v`p#>75w)3Ns zV>M$Yc+5IIm*R%Ddnd95x?!P0pX#9ドルRKA(=mSMF4XJ@BT&o|%Yu`hV0ドルQ|+7C5-MM zq3cqz98+&3Hy(PPjYP)jLkEn*erxkES?&#Q^o&=qn@3fYS$;o^S?ZV?ES?4Tgjt6k zHW!K(`z~et>`guBHMa}ALGx5US=Qi~Q@1VFTjr^ac>sfurc%+-^Ge*@1?;%6hkhE~(7=Ine8 z^J7zOm1%OcxU@J3Ce`JZ&^rlAA7u52MJECbN#yMI`W2EMiA%)scXlPIaBL$!6Yxp#yg1#E(zh!6(`f^-(s3-uCotZdVLQ z2GQox;K#0~KSdidm{l3{5RPlKuO4J&puGMRi^nk-m4tT7hk$W?X3XX@8#c~N>15rv za0v6y^h}cH@>e}G5}nrCt{E4^a8xpL^;T9g;%q#QUXtM19mT}nX(&9{y&fyBTkhYX zygk71O&lcJR}&PaDD$Ef$jI5!m|ZeG8AXfqUY{SX;P;T4lc?vp&eCJ?q|bYWVrnzU+8w|>$PoM!r{Ss9ドルn5y(W*OaeZQq@gVM$q#IM+cIw>pLuo{&r-d( zEE<*_e|&3)|1pox(ke?^^fd;gt|hqvuc8`ouqrzhkyv!djs+hcp7w#jk5c`6uy@_- z&H2CHKk`?(OBWpM{y6hIs~+j0pUV5+JgM5hXBIf>nS?_+-&J)5sB?-Qf z_f|ccef?Pc;X(Xq>V3JOui@=#e|hQHF{rg_?M@%i1Y*@W?RMqtvl;i37xemzf@=*4X2BqEY{XVK)Zhf%i_vRb8l;73ドルrmJfHM3cS9 zobB~{m;DBJd129ドル^V7VPIb+sg{_TYf>(#0ドルd2@@++}o1>>%UPua@wbkt@HGCbZc%^ z)eya6we}YX@2ドル&P%A;-zfK;h}=HZhZIm7srJTzn)#LJ|f`0#vPEWyQ^R3 zCu!q%7bbwfLi_W~`(3=eidaVXOw)n6P)4^zk9K!3E#^fVH9J~3D*b#4>gHVsP@Eq* zlmnGJU@E9Kue3pfq7tUl%|)xp8mQ@@9)+&qYq!GsF8K zg2K_))75=>A@F%Rp!ZV)bYl=SHGYfx{p^7Ui%a6_DgdCrd39oI34UJPn||ND1yJSr zXE9lS$h$keM1Kw6hSEy!p~nyVK=Fs`rC7e7x7~SWx)@Rihi}Utr3b2mi@6-wm+?M> z%bb0x=CrBTpXq;PL}$Zu4-X(yhUw~?k$lNFhJA^D|H&cR6FZafnGTaZNdec0BT2_g z9SxD_o8l+nc20ke_F67n|9c9Vv%Kx-8oV23Q&{c<2*2(~u%&bznq620kpyr(8(%ex z7mC-gdzVYYS2(>&vExv0TMH!{5_h6yS;hwV2KF4ID{=WDLP|@>8ig_x zC>7N(B2x*KR0-tx2TF8Qe*Ww6&_p2~C#*k&{sqzE2ZchRGz>pW9W-e@+a(1)_v!q` zcyB+_7REFw%M%^yx-C4AGXC^I>47bKYS`ABdqb1H0$AeJF&!zbN{h_&cDxJc1Rew3 zGsd0_P9g)|rGr~ETn=W#OR|o*Y4?AhzAvW;79nlLO}9b%7+VlS2Gfw$Nuude)*GJe zHWgGmyNOfn#Crb&BU~&5J(%gQ5F-t`48)pRM;`I(%X!ZDBlZh+<1(td02ドルh7;8i zkcp^vzKyKfD24eoN?sPPuF@hdmq~`vG3*8Xt+p1LcAcHxlT}Ss;I)*3(HkNTyD}-r zxlM$r=BXNBaX&FtljPii_(Buyw`f@N{6U##BM;xuj0-~vsk(S0K-R0EuUrJg} z)ekwk2Sdj(S~q%gzeIZwvo-|ezLDS73HZW#k@=A7L#`wrpfFkRLa9wY%E*xZhRfl(9bU@X5LyaO1#yd~p^CMWTCA3~t3D+F+ zzkig~(%i;3Tm}bnXPcPZ0!({(t(k3+WURmKuYHB3ssiKC3Jtb0m-nJwQz!2XcqhaI zdH-x4rEG$+jfL7M_nA{Kv7;$oBb?-~Yi`&qey}g59*4S(k2D1ZEC{zH%l$Z_cm9lL zDNxmEUEC?30@RRL+TfteH}&YY(5PG#TQcdlrEl zR)hlYb?pnfm&;$A!%iI%XZznDHIH%cX!dk%(0^|_S4i{QinOiu)h0USp|S<9_paqe z#ioGAII0i&&VM(q{r2Zb5j_65pd9x|sggZHCuqT0qyno2^0P*asLo|0ouM>|9qyZe zeZh^zX!(W`=%8-<|e|+*tfbwbzwq1b;l%v~it6n|g(?tt02}_od>wu%t?l7S^{-oF zts%H@F!+bl5#lRJ;d}p5Nnd#iUI~T1W!b~r%p##}Ac2G!s|~xWd7l@Lk_SyT1ChPd z$$STx4~|X#_Z^}oUR~cyQXp^n;FLT*dcW=cDx9zjiIjPxX5|SRNp?G;`NGM_-bo*I zO;>6QA4|}GXVepUPB>|_+yOU$s}Wwu0uTzBq0KIvY~Uzbh;Dd;S{G|XHL%-ga^(|!rT6@B+OjK^BgX3>NRBYk8L)){~1wo(c6 zL>O6%AG!1UlHoNy0yn(s^7Kx+08(x)Hsyb?S%q)%B1pfh(H!~sCF8?nuopjx59nJS z-cdc-2hKc}h?hJX9OpoqgzaCz;zCI<8}twc0us31q?s|wvx}z`y!8fd3dc8d&bhf| zelnAemg;I|RmNqK9|gC7W4_V-f*UDb-F(pd<=&fveyyaeu_l2hk)6?dtm`x&kl=fa z*V4*3`h&_i(F0{ZzObfOd9x^5x@;CSD zZo}q|-1E(ZVe28uu>*G`gt!7FIyla2R%tjKYF1v#%8grD)nYJDqzApVsI_YqUC|f) zgy`OKHqX^B-LjA;_}%1M?B3|#zG;^ncJGaE;Z{&!tX$US;~1+;&g~=Pj2UL>?C)_M zRgAX#?y8-TM(=M_?}+#!!QL4ikfR9JKeC{R%OO1^WoY^bV5&Ql%9H-DiYs6^U&Rt4 z)i42;9>7`+7KRU`hz97^&=DTZH#4pz-%>Tf9TeC|nb1Lrw^wQ~7Up>N` z5&ePC_dXt~DedC>Q!$;sEqnD{ZXb_I)_hcHqcEbDYvJY9Wl39`!}{o0&!ict&m#$u zaN;J#wX3sLtDGoqLpRZ1IOD7f#aAMEo>}ug*gBd~PsaT1n(GV^E6h=CGA69Im?F~S zRM~ZD`(CjtUN)Co1X@9xgG8n%TegOW9dY2WXR^=e(ZpPkR?9b$;B1tR>uEEw>a*I9 zTbUA0|FsbD$l5FhJtS&uGVm?C93=g2@x7;BFI<8ドル(@3*;wr?8o!|mkdt2uvos72@t z#U%DC^43>o2FI#Ae-N42WnV3NP;)*{;CBT@o0pYE9OpxP8{eBUaPWdlBI#93vYF~u z5$K=nfj-E{RA=xXgf;+=v=*6G!Y>TE#VhtGI{;Cqh)9u^N-4h54QBRR{f6>!j3Pdl zWB9Jk+&%wW1j)`=TiR$zo*a3KbK;H&y@!Gz8J7qiU~!}tJVsuZQ|@)#iq7N;k8@K0 zs32wkW{LbPb{`JNm3+0O1gZN|oOq(7+?s6K9fq~ErJTm`-^(5va*1Sz(iio@=yvY7 zyuAm`uopRaGKgqL?Xc4n9A@(T?^Ysz9Wp(C{o12BW5(W`#G-L(iT1~L%tHY`ZztG! zLF^q9vKtMsToqVayrmVf2DzcobPDt$YHHF%XoCc^VFCI?g|P^%0_&QD71RVI`l5zp zIy%Nl|6zVsz6k9Bhz{!|w4`?X^NP~J1kcF|XS=qKoz`gR^+v&ee)1-^fhV2pTmBQyomLjY;&xIn@U2{iRY9=z z%VOhp77t^6y2f|WDm$z3eU3MOxm3^W6`sz}V5J7c+3w9zy5Q)=k$+S|$f)pr8Hf@C zeo!7TeaHOx1F!2F3yVnHSws6U`~`jxU}$yfJjGL}o)Il-!>`AZc*_Yfk7?bME&TP; zGx(q&I-E?o7j5iBhx%hk`&KT)_Wrpd3?uMOqgA~J5UVw3w%+lLo@26(^J9Tq497sR^GsB-?-^|V3(R&f zCxHqi_k|JXX|LzA;B(kiqwvcCJ3Zmr3pvl<(c=t*7l$o7otoP!&S@EjIXd(Lg&LNv%^||+JY0*|uxzaT#4B`y& z5Ekx5(F}yhN=*eJKMhU2VF!4*8|N$ z?twGf88Y2HA~1B2BSPd!FV1xl9MSfCYwn^v^`Eh{8l*zxzjk?__p}jdEqI;upqf(& zDrS7p>w>wqW^aMav-gEqOQSAPZ+H4^-#WpTl$^|vu5RDYbR%KI2G$r`8)wxt{gWIT z3pwvVxrjJ=HP}1mu> z@ETh@;_`h*lhVRP;A5HJQj2`Hv&u3I0slt5YM++t@)?o;`ZSOR>kMihk*CE6y|lKr z%jkC~(JJvW-hSDIgK$IfbbNm~ex}h@L5~f;UPBGY%)}wfr_`76%-rygdEgG_T>XMq zI#+FP=^84-UEK!zwJ(^{{+KG+OeQ4@GEglc@s`zdBVY+~XkR8oECFDGr&@2wSbBh+ zXxjHr>GlKJqE)M)$_K9JEhmx5b?Z5J4gV>VWp$Pz$x*94Wv5w(FgY>bFi^iR~O4UKVAK;@uBGJ$JerNNv#-fXusAWnI z`xlRD33J=x?u0s2M=4*j$p}))6{l|uXGZ$FeP$`~l`6X3u^8Lt1@r{g}dfU?XK9_6jo?yu>#>n)eFm4h!StjPCK(5pOaQ%UUGe#LKs6hN`3vj*NL~r4gSwh~=q5XL_HCK8-=Q&t%EJRj z`Y$EA0GtMH@}k9UyujaD%EqxEFm{r@xU2qivrq4>E+RXeex%Dx`=w1tiIKQBBBCkH zKci#(FCYdxLSS{4@ncy69Li!Vt&kGyX#j`X{2JAz07ikAnZ@?VEK~^^|Gdil-Qx+7 z@j4d*wv7y8X{N)>c|JYVxQ0)O|bWb%Xy`baH%-GWskL%>76Yz&}48~ zpN1j}pE2Ykf%;%&u>_(HD{wAKnAKK|nx|AXU(app@rjUgXdOISibfhqS#x6gc;j;J zvg5@fNUm^7Q3$dwFqeE%q(c%HWM)AMBEnxXYcJ6uz9ドル{bT<=>JD4B9gR{cTNfMO z*SqkB(c_#D>(&MMLj7f-)%M0<&ohrg&~>XhB!i znT*6AMbaT)6m%z`S@KS5P_#tg#0#}&{71lYL=3epKjvJdy@onYB(X}FjBV*#FlQw~XE>vQLGtEEN`A~|_ZJ=A`JY}~zZNL^TRU!CR0(f~fCj8OI^v8MVm$%;6gI9xDVt-L9+nu19ドル`G8VcE}g8Rd|9*leO~D{FOn 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ドル$*r1$Ab0WmY!0??Tr0MX9A#hrAFIv4El#oIZ50rK#9;uT-rk_B~H za0<)o42=fyh^7#jgtvn+ox@84kjtn&t#br!to>m;FBTQ6$djmh+9LShkrrSvZZN?z z(0|~Hl^Q2>GD^W!E@ef090l<-okcpys=yqd3@m1lp!bqm*nv7u*q82c3c}4_d$)%u zT{zBl^!iDHx!+ubA(i1By&cbLo|F3F|47JD4;3*PQcZu_63<5%^>8SicD4=^>2F_u z;VgX*{ea()MZ_igug%o9ZAFz%{Bs@())zj$ zxFPjKYpR1?_FPXEe-VQ_x7F2-rPN_T|HVel!I65^iE}QIJLc{=@46L=sgp z#0JmL5hwnX4UJafzHo+50v$l%mtv5|@nF~moPR=LDX{xh5@=%ZXr&TGeil9^Tx-I`GHXG*|ILac_hLm)Uq?vh9o)*4tPY6XO0)MHT1I*&G z2L&E=P_aW&_3zRqxSWfhe8cL%R{!MLJWN2=eb~cW;6ny1o0;1{sxm_GWFn^#cPAB5 zD@{XHFw>ox%j~Q+o?Fd_H35{#p2n$Xe<3nlcr&uu#waa^f@9gljhifeb9g3?f4g&7 zw=3)D^Ohlq6B*hI`nkcZ^X#_Q3y;Cb*L9vh#GL5VT@sl9Y2YOV%z7TM{psFFf@8ドル` zyG+$iH*gOAOhm@pU~@jz0@m6cjM;Y0mP2@fK#V6r<*xbt*5^ows=2iv2ko6p5lw4m zVj+}S_n>sY%0Dtp*QK(!%#(zH_LAn>NxOU={DDAc4*A}tlvQZk>>2dvbjpmL>9ou+ z*~E@phX-8cb?sXGrE1svD-I78mWdqoluS2T7-bTFjQooiABr%d2W#{7kXhS=aRR91 z5bo-`^{>I1lu|jowKfLR#E;fQN?0-GCFS=8?JIG@8fNXi=m`*Y;jP2l?v-S(eD_x1 zq;%%yP{%1?%02sV5L~od2e-4dq)h^uLgI#BIjO_2Pb3vV0LAAyi8m4GU<`pehu^vp z4(<+be_-gxygbsa?1-elg(#-s4iuvkf239xJ@SJ zw8TqdO_yJ5OdH|LZ=7LJac5FJNiinNMLe))W8j4z02!av1OX)$d2X@DRYjXbK^*V4 zbHQzPf-c_;`q@7kO>|PL!n0p~@0o0WM)<x6ko+@d1zmY(&a^#OpMImNz2#J%$ ze%LRuasr^xG84sDk-by_#se*dCc1K-Hx-qjG#q6Tq|633to@}cc*Z! zbl949$>C8{Jx!yEKr1l>^@SCatdG%uu8T7q;zK3vX-+E2<}dot)?=m`);2|sovauj zosE<0`qr>$Tp%GxZuU~l6J{Iw8L&bmMM1m*ekD#g25m{RQGN z>5zLVV!PJ%!$TUpCeM8KP!Y{ty-<9hx-eys3b~e@qn4yl{`5alpx*bh6ruc3b&$rw z?1MN2pvm%hv1N^ba^g};EyhcgYW;=A?;prh1kP5fT@}~8INkO95=76%t|~tio}aRE zAUwT$K&j<-ztpe0df6m5ドル^wm)eynxjgc3;ey|na2lmh=ahz53o8jztb9ihxfk?^?< z6;@Qp@|vPvt8YB}#9|VZ#JcC4PU(u~?K1aU8TsmnXK=Sl%=QQpB7Q-DR&Z8I|0!g0r`F_Dp zBR)XJc|jbWh_)&0G1D*CyPm-(J2wQ9e`HcnNrkbi%#L|Q2XI~m_WfZhOWC?6k~?#s zs~2GRczU#9*@L*5i~B5w04XMlU+`;`;Hn?Y2Uc8{ZWc}mm}375di5a0ypnEpR*qOgRtKdx}q)FnXs`vk;5kOS-V83*PgM?QX5BT6dB0b#i{}8v(Ax? z=~kjt!hvcE>P^!uG*)CoY&m$#rMI}i5hg~HzSNOg&RBmOU9q>zPjh@Q5p+x=tB1`D zesyt{w2LV?k49v|d``}z0$()5Sqnw)zoR0}B5kc$PCPNYG`2iLP4eS?;4BG;#@TyZ zH3nLxk5ruD*MW<{$|^p4dd2{{ssbiogtx9~qzbc;lb)hgrd%af3yu#hyfwqk(kzks z&D#@{O)YWe(fu)w{BoXw5($xgjSM(TdP}#WiwZiiFfebsIV+>1&d)dJuXE0%d>k52 zqXkZu9)~8B>*)OFyySgR0tkqFc^gPoG>KAxTNX@q?1CFy@M7Y6#z)N;P5l6loVF() zwtvG!j=tM#zspK~rs2-D}rMa9!{8IJX@rEODIoFw8Y*F^V}C#`2c!?%Y!(S;yG3?$x_L z45qY)mWml@YfRdBDTln*=k)m%@|Tht*~vOhS8-uIvhule5xn^6Cke$pT_orhJQtwj z=_WaWvD>xT3uR>{Wl|TcQE^;?44e^qPf%wKhxWN z8qHgF57n@?pJbOPUp}RW`mhJ1mM(pd$}^+PW!~b+Lq9zi)3Me`0@*%{oj(iaR!oe? z8pu*p`y(WmcdlN`upwfRb`Wj<lPl+=4_nQh;~xZp6{PP$r>_@(_-sb6G;XrrY$VJ24LOu3qoZ$=`2`#YvUI6Ip++UJt%x?Vt}VQ$(`Zr%==NZRE+J5)Cf!oQ8r4lhL*1 zq8>z`*DqOU0?Bv06=!3mRcPA5UPh3tzWXyH(+iyB>`E&?Lv_WJC&|GUQx}P>7CbJQ z6pCxek~|hYj{i=&;&)Dr29S--*VR@x&-=I65F|#}{;NySf6Q-Bu|s?zNgEk3$ix)& ziq#t0;Rf%n@B~uD_2p{%y9}4hzp1aUfY$h?+cmo=ifg?nTfZ}ZiL)Vwaz}%!M>T75 zr@1xlHtd-r?#HC=7wBb}-U;c8<&izmekdtj`%idjw9jfsq%bev@;pqm(wb`ygv^zk zTJBvp=)08iP^_Jd{gbEnbhs^sv8%)C{TTJX075{$zxLA$hdsoq^t{obe?y33z2lxl za!nIKbJFFn@n|<*t#-idj?86}3-wu+0)h{(+pi)m)%>KtKdIy3M1npE8$!FQv8H;W zpFu-1ULAzKmJ=>%?$b)KL{-sI0_L8HWn%1hU~{=&iiTe3is= zD5O00))g2ドル)ZYaGu9p3!81Eyt%#!e}gl8NFjcNemY0Shd)YysQG9HEFz$RN>#v&l1;*XPvgCSJ% zRn`4}v*I1_>@@O=SPt$ngoy&H!Eto>f&gwf9l>w3Yk*r#9531ehwG+0-7V(dZgS(m z5OfM0vp4j*H*&(ROd$I(!H4_h04J4v>XT^hn*UDRz@BtYh#WwNzc3?&zbAX4A~nOj z_5~Kh5E9X1xYSV~GB&Z%27_awvtWD3COIYuftlu6;!l>cyfInj}n9i=lWZOZCfrz;?-IaGHZ-Ia;z zTh=u=HoajnF0`Z|nwxZx#9wt+V}uZfHB6J?-ho){3Dk)b{^5{ee81rzIs%|kK9*`A zvgVFCckM%v(`2z7wtg2q$^nMtCw14LO4NP#m@-lC)vb{(20A`{+MRMvm5tb|(`1d! z6E=%6PWddIJK>A9hFKEwWHaZcBN3N;ZW^{^8qpdzX zli_R>=m_!aXbKO`Rpd|U?33Db=#Q?6{Sl}o8ドルtBF<5&stox7zAM(PV zhzy|pPia7e&}oL#JY4CxCS8aa==k#&bo?(dKl%z}(ZY`Iv(+5|bx+N4Lfoy}ZGBPt z^RLtd9{sIL1a7X|V8GVr$Sz|^Uj$Smy}&%<*hm{cs2c;|24jfxbae_gi^0npak_nx z>8Ku66>93^hDHCp9I`nvO0a*8isRq6OG~X=yIt9{G$Lm|L4N=504?%O{7>LEczgsJ!ItGU5j?TjF^J_>Yp(OEfg#kS|nO%W1=lOFsIoj`A<#ue> z114iQs<_|o;o6|cpi)2rfg$@hxa@zw^=dd47d2(rn~vre6gsuago##~q}2(byhhzf z0A&fIH{rc_um&DWoXkaFmei^#mK^{GgDL@XzpkP7ドル%FXPPZ~KBp!7H>vPQT~4$!)> zaq+;0M8-}EJAsAE+IOd>zksOHm#rW{3ruV5DL52_KhlE5I*i)4T6_zRB!c|zvY&oj zZ;AQI0={ha4c$mQ5ewcN3SV>q1P<#>{!)*axFq-1@eEF6or1@y?VrXxTep;&fgCsN z0py*-6#N04ui)ZOWMe$x0Q+xtE25n^0R6xm!l4%ih%6z(M{)Wu*ga22P?1+UlV@Qwc@pm83T=GAer8dm zc4B)3WQ0YzBH6(%?)2lNxi~jwzeuzN#S~626DF7766gzXR?HF0y3~#~akPAa=mpK~5A;+Na>f;RltInr)i8hDSxk4T_ z6L4ZC2)Mx+ODu*ieGZ@06$ z+j-Dv(~f+iCC`ZJAv5IKCA_5ATH@o1q*cyME!WZA;Zn8!SOInu@9PL|H4al=%x8X* z6TZmrma;f53awHB27AXEm4b+`fFqkDR-SaFb(X@|@2E|X*e=m?WV_sGagGL?4AHgS zTKBlB%FrniP7#tW~@Hfg~N_J2xe~eo~$tpO{kJ03f{KB~mXvGeIMy!1~22N6-o^`~FkRyYe#jpQM0S*3XX zoraIc^;FYGq?NSYG)w?{Qoue6nzqrxbgA zZqK+WT${4Dt2<88fhw7otz{42yssl+iwlqsv&nov1wgeasnmw0bma4hu$h~f`>x3E z@k^LJ-gvsb&1cw-bbTX*=*K+K>5lA`bZA~s<3e*`+{|h`rncl0@{*rw@$~d=x#4pn z9ZNTPzWk}Y~mr~8W})Cyc&6{iCD_z5m48pbz&-Xpxq5ドルW+DdV zC7~!g7xsJCxO`Kq>067ドルQY`)bApDU2z6cRll|K|HF!EObNMON&CHdHao6zHHIyyF< z;>&p+zst>II#|sl>f-uNKF~M%6Z49X`r2tzv!geDp;cygP9DIftJDEZv=ncQ-3X7Yi;7Wf3Q`W57kWCZ5vqnv{B`zTG@C9jg#VBr|0DsM(RYIyk7` zPzE^)4nI~qHI06BI#oD&mxG!H>POv2j(1?E;;*%A949gomI(wA@~C!%B?guwn@Tb) zgNUa(wIH@1-?K>0RbofgIO2{`;1`aqX%ZRD=5Pd4Z({&kn!XTGQ@XP*qs93p(q+S} zd|Qo#a?6T~?S8*N*s>$d?JaUwJ39Y%`&T{UTkE4Qgkhu{lh*Lkm9bR>*wCnRTk>97MLWYwS46-7R{_IoeAz71s?2F$j<=nig+p z$AX(9cSUIf@{)nY-NJdn(0oKhv44yQJzSbdDr!KwN@Mn0fkzp$N|a#ea6X0AO-%WlP4)t0Ja zbbX^{oK&g1-N5VMmz;`xznPa0zr zj*7jmlMX3%{qkH3s^-9jW`Z7QfW}kch_=e8xFRn!xn6CCD8YyC(|<4m}x%nyx2v`kfym z4J7S@ST<{oxihga98s~ct2)eq-`cak)f07fdiskksxu6s4c5n@d}>r*+qMP~@fUH8 zS*i?AlSQ@WFB_iyrT)m!Z=czT?N?3gViCX->+}Cb*9h_Co86}@ItI?F#BfDNMXLO7 z_mf+85qRxEyCz*)M5Kx)Z57cvf__d=f z=G*~b#VgjZRgSUY@Nj&vOfcxyWf<#va#fos!$igbgnrglh^d&0lon=u-?_&hshtmq zo0tgI?l|66owJXU*BhRtGzx7Df&oF|dqZV|#<_`y)-ppn$})o{c(!%bx98;&ub0%& za20wSsf?rA&Eq9YWXW7(R_v9i=lJ^{5)ESp&B-2THQ8x=q=|=W>`)_#Esgb`fOX5g z)BwC+8d2-b{c-PjWW39?&!X;&wo%vFHx3+7vy{BasNSwZPp&+JxbR3{ddl5gp(hx_ zJpF|Cv&Y-oGZTPF*`6~Q4Fb4YkmtDKEG1cgI1mmvgfeO`0w7*Rll}x`CMPo-JC3!o zAwYN$H#(dUL?t8GJR7^jOr;X8y|O!#aO zRbM^}FW2-LG47}d*Spm^y!>OIbB%=`_5Mg8;o652ELDx;r#kAih)t>kD~N82yvsj& zVqCgfBU8eQwYaNyr8975C9v>5G>^GuWdH z^ew^t5h(CN_Vk+lCoQ5RjH5?b&0c>_a~z)kh5mCEyQiVyoL7A908gB7tk2w&J!Y4> zaKbgL)Z@B%$mb?uUc=#^AleJjBCCft45;7b^WsEwXcWy6XO?RGs$A0(CC9+YQrA}& zhE9~79FRxJchW3;6`x}BcwX(+g&62d=9^NsYv+w?Y&lpA3CVr5c^11WWd>2iS zQeM|#o@MSgxpKZjdw5?yoDt+{a2ptCAEl+4!`mk+Cz1+Dsc!5}fb| zkiGj2`+2}eb8GFaHia*L8@;>bKsN8q($Nw=;ZVI^Kf3^CR{w}uONWFTR!_boqmK-?)S+{ZWf5=|N(Tl(nbYxtiCmkDUAnnBLNevA#&ALy=1dBjlVESvIO5V{>{th;>LI_mk;bz7NAIjuj|krSd4j-xNN z{KhNK`bsDUi(@?qVaF^3lJl5V+27^qZfjHIFdpHzpW;xVugX$BsH;HruAtD=&P5Eg zS)}nM+!K0N&RbobL}kFo276^z6rJ_+2$|1U-J`<*f;}xp90ga9mi5c`)qeb2i0|fw zW^?QqxC1h6f-?5P>Hu6F2_emr1hRQtVUrU=sNyO{Vk|b(q#cjd(}gYDr-O@mmtL5% z8I=w15I)AsV!@^nuL+g#1zW9(f#3XYQQi{AGyg_+1Gn@1;jf3ドルy}5ofB}VIp?@A;@ zcf|1KU)Z}~#hAYBmS@|8 z5z6~{lh#<&zap|unezs3*urvx|4`f8}2HjBw2 zHJsb&sI;a{2Lx^&t+7WaapIUa_&L1GI7AU`6oSw}9u|lY=#Q;eoD+_YUD|SkFH;2l zlYDoG3~+=K{vV9>i1wk{tAf~;TS!D z%Xuh)#4Vpa^n}bNNg#3H^}YiTauk$xmFv+s>0q_ad8QxBZ^GW8 zVb-6nxC2-eJw>^|u2zs$LyriU-{3Kv z8V|QKM5;(fM8ApZD5siZM9o3{P$KR3^!NM)|Mr|XO$YTiD>pQ#q3jy4QuIAk1XZ<3 z9T%Mzg4TFDj0AM1PLpiH$QnNlf#baN`^&FH5QUKXlhLRIHN+9)Gs6sJY^V|^^sO6& zDTPMK!0CbQtd3(UR#O1}RH3Sksb79iFG_PN;_mQ!LHnyaQ z6qU&($B`P>PQtW23F!>F+Z+pBWt3}y8rxk9W3k4HViu&;Tkbcu`{nzC+T1ndK_Fc7 z8;!XW(9Q0I_R}dKS2QJ&nX{oYmm{OisDJo8Ry}pu{7$Rrq*kL1q51XAte%&%A3RSw zVDWe;wT?`b1YKB86#Z^cEvf@bWAn;v$a6NYK&Wg;P+6)u zNJ1!Ux3vxu?t0)^we=r8K}7G9U9WZ0p`Y~EBMt&xqRz%qFll}tTBKAN3cu@c$~*Q7 zsZ4%%%NYRP5)x>5%xCIjeay9iU=#9#ibY6M2aPc~W0^-VI&rfd2hH<6&b#ax-h*;$ zf|0Ih#h&x!x37bX7miu`iKhQkEnxjo@TpaPZ(i zP4G)PC;tg`8oPOvb)-o(Bqtx~S}GiiWnUsf7=3_8FV2%7jrast`Ot__?U~86EkPq`SkB1-IIS{f`4kPE(?{+*jUn4>__qyk1@p zug5|O*e40%N^!iF5{I%2d2&P(RKihd;=SNR1cs!?omz+`_!1<<$}p{ju14|=rxosk z5Cn1sh;RrX1`RFst%m;P_{B;#`h<2mzem1l@+lyc%83({sghnc?9}ob;;drg#k5a4 z9ku96syG*Xnx2&(ou8{RqA_&pjNBD^Y@x&!X=nJ>cB($a6s3#>BZ0@sY@W`IW@2 zl>NjE8poLN*8@mtb2|BD0{J_+hS&0b-@0|2x^7{i1gTH4yvzG*WKdlqWaDkSeapmW zNr@3#10`D25Hw#ERBiq7lA4~^quhga@4_KrJf|afxU$!(y!^?z{wIP-pffhsqpbFf zjTJ4lluRBw;MZBdGCm~|e9ZI8K_`%0y-)+%1cZ=->esu@e{=`YGB2=qISF3&SC$JF3VPTkT- zNVCD_IdQ*T;*k7ObTf4l{vk;F3|WY2K`yTdtcyV!`qN50Zxk7^&oojyPi<6f2`msj zruceWNoY--CI-cM*6OK8Z5jGGQ;Ue`C3ItW#F`$EmB#o;YQ1fdZ^Ohs{6@H+FjaQW zLOZKwqQcb9nUbjp5!*pRC*s~s>S;A>nkA<}&%k7hw^;ynt&d)lan@igu?gKI9k2MpB18&Atzx0AI4ドル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ドルAh@lzmtlav^U+7+*-a#ixM>jhDr@qLgC=|7Le(m=7 z%qkthNBMyXVHd-7-@D^k4a!Mb|MJ3T2Sa-HyBCJ~d@d-_Hp6N2>KD%W4Q+`%)#p*2@vR;#Jegm4*W- zw`y)Fk@D6{OYkZ`FX?V6AktJ&OQO0yc)_?^I7>Mp`Jm-)drJxwQs*?FW0 zC;qAIMdwGKvO0ドルFGy>~3b=9yR38tGD0LU~Ea#J~+=v+WSpIQ!f$+TKS%2^62RE`HT4UsrsDkMU|6Npmi+n7kS=sUkIoWsE8rU?>FkM8su*nXx@G!;+OGwCP|4ZKH?(*nlx2e?`@(GgNT9?88~n2w~h8SfZd8L0(5F?3wg z18+8(mgA+s+Xn^v{s)?BszDQ}G*L|S58zzR;5;;E=8=OGK|=BXbc5z<6l=3=sf&er zP}|ES-T3ZExDWuaKtom;cEoxzW{j1q(BI%M3oHWos(uOp_>68`2rlbVNA z(&QVX+~eY`1}bpS=~U5*keaq%`lc*Au;*`Zd|5S?6|{!zdfkv!LNqyNMocXhN-KjI zaGZ{W0Z}Op$$YcW>|}( zAy2wr7b^t1YvcGHiq6+n)67D=S2)dNus&H$So?Zz#mi0*hkKBC0q#t(&_*eUf@x}2 zWw&68y?hCYS4db;jXg_rQ1q~s>w+rVh=^kFp-CUi$jqg{>4kMnr1za_#X-LV!P`MQ3DZg$s-P#SG0 z57a~<~gl3z6vy>Dm5ddlMJl+@mKVHB3>E>po zu`!K5lnCR=yqq^>_BdeI3QwOs`5@r`Rg`=+^-v$YcvD`OESjIrV#1K+$R|@PZPAo7zezeYg}jnfB!4Vt%VNDvUG_eG zWY%q1a8E6F^6FwBFLZ7ドルKojMmvp+d0nNY!B1U`SunKXz0{K!8vkNC#_Mz zgB3&93hm2k35hWk>Y@zDSdp`eBP&C6%$Vq?G|@5Jw^(f4Oa+w!Kio>dnU4KkSojBl z-6)t_sV@jfCi35avutG+QbY?UoMb^A1;U2|`J-ylng4L=-UKoV-P+m5GR{-fxzc z;iMdCS}257rO_HRy7mfw)nX5}2#xl9@SN{4Nn)r&<~rhtb4p-+u)z=t8|jqxdsduo z|B@vi^El5=c2APs6ドルWLgz5NJ!W0gjg7EFk!X=UUT?Wilim7?Iy)Q^}%^rAn7^A%vn z1#4dvo%;f9urz8F`I>pH$YN!m3mLy~?=;(uuf`;g=ogOS8y0A#W^6J4vHXAekFHJT z4-(>lf2ZUHMuLolV-W`&D7eAz2lLrb(hFb0N+!sF0$-S;rg;gy7W`Pgu(XpgXyn5{9P zDcGxUN;08u*|GNsVvkW!^CYu+*n8UkZ6Dbdc#Lz_pmr`vVj8_v$C{Kp_;Bj0##CY_ zL){4a2$P0&0-TVK;|bGPlWgq5Y*;eeT@kewP#`q6q3T**+_GVR22KKA@{a5HD8}vt zJ>Z=7crmxX#pe9(+cWv|6Ono*;M9@^8r$Bpc?8RKxsE3P!86i!&M!4b@Z2ドルk(+pk9 zRS8r(S*kT2A+)b+HsHDUZ;qdXa5V%zWw9Bt^Hvt|46UxU$a=~)l%y3+sYOUHz8CQ( zN2!BPTquC7ドルtJQ%Y(C-ekF_}7FV%!M#l%L~BUChTkbK==jMkG;jOu)n%rFudaXRSB zhWf%JBlM>{Hv|r*h~3)II2LA8<^q z#RJYji?srv+2F2-CWTfhNgCk^U`OjtG1ZRJ@i52bI-K3%X4Qnbw=>yL7Y4rZP^f5g z^l8OHuGOSPDF@Ca$Ge@Ur^G0AsftUEQKI=6mN(`EWXdt_RDmDkF5*SfU%*3HFD zzU0Wk;quJ!>tf#Vd5~KBcJmm=x}`B+wjOM($r`n4&C|z+*hyHZ@u2{kgh1R2dkTm& z7*jdBJ`UKggp`0Pd5G2$D&rz82IY{7m!8_h3~&8U07Pe@ZLJ4Sk?Jf%#5lTj)}M zG)leVK%OaqHm-0WpFoew2CVns84cX9cZ~yBWi9!L5D)7x8q0QP%Q2|@BbS1ドルb!d{( zSlb=Q61^4XB&Ng5S6e z0ZXn~4g=SJYR4*Z%02*o+j{kZkm{R7Ifg4&3mbiJ=>L=bM{D8?&z-eF3}ov7g3N&r zJ~R+~w_6qa(D|_qwgU7CeB-4i=D^fb~IHM4WXuS#@EPs z69A0zaSnghDRlW6H;yU81`v!ZN_f3bN2DWJ234aS^YIXtLf;kNj*0`$~)PFhP zG6(%#(dn4K)zj}6cS5)dn3KegcERgm)B-ZYT?JI71mvw81>h}~j?HdkLi7Gjb#S@1 z-)Q;B2JmHUKk5~RZ<9jdb#mmi!h~ugxcb819c|d07|u66_jfv1&bckrkf=xyu}@zs zm@pRQXA}A_)rZj`r_Ig59wYSTIB#PYgp#tZzq@EM>sgu)k*Kv6FC z4P!V4O+nP|vIVtm9Hf$oDJEoT6XJU{4pOFooJ3O~Ou5Drv*Ntn_3 zau5MQ``f4+ush|3sWAKk9FhndG_laO}#$fh+%rHHHHlN0&x7mJ~N zT?JHJ$$=`(Zc>+0&R>U*nhcYDQCsWwS{4~vh4*u<&(20rpybf7es??1t55=uwc^5&yu z|3SOk{q9B?&_qP#mwaa^cZg(=?)NSQy7!R_hW0BUMt(&S+C}37!sGG2kzN^SrE zNEHTp+%FtFE&v%B8Svl7v0^}vW3@H*_Of*_Hv896tQFew4s*Pi?F8Ea)ox#tS(#^; z-7(Z=3g(b>3+(V?+vyxK*OGIsyEmn{oLy~9`=l0C2O)Ts^4y#o` zDj!`kNj`Z&n|ylG-b}5j92Xb8ZNZF%-poM%39`xKZ_)M&ul z*B-rGPDFzy7jGndB)~(boJ&qtAYaVTMRbW;Sot#)(#rWE_O5NbXrVX{7UlZWdbD?S zMzoF`VU5B8_OjhG*P0y)l+6j|v2)Nj+2_gp7_gsqgaht#y43AGu(a?~yk5hzcDQcs zhJ)8?>`N>(3n)>?YG84YpmFBqY_{@uTa>yoN_h=l!PjjA^ln*Xr||9`PfsO4ah!gV z^+HIqR`BpK9(-)&8>^?11OO2R@=pFo9=iWy*mqV_D2T z=Vj1^dA{NG<$f}rra#4}fbtf>D{+23)HlIq1ab}8WUGUgulSO)My6AolbK<068plg54o99a@kl!3o#7p>6Db!JOEc3 z-{>L9QTAQaw|H*9SQ%wb7_-m!Hdv>9EEb3X%h}CQ*42L9J`P>}xoGil>UE$LNDm*b zpVGq{Mptv>JWeKoVGmZM+B(6+FJ=%T8uX?_KtKk3oM&%_0cB=9H>mP$Xoo}3E+{k+>g=`xW zPg#c4=9Ro%!vb8ドルVC3Vq@?X_g(BZ@fp_GmgHcm>hj>?T%KHGO{%$pRP;HgXSp;Ea^ zHG-)sP*FDE?muV9VNm9JqcfMMp##>E-3ZJ#eYy%yi1O0YAApaAk`w;rNR%W2W287(4w$j*23H}$YYI!6 zFo@$zm)pNK_-vJ=d!01c=%$$>^ey5kJnwKq(~2M0JzU6(39~)6gf@E|*LuaSX4mF> zCBl!w+;9Ak0n)e_N)QMi2Ia7MLh76#vt+5!#azIKW^6i3aV6=caDI>PeF$nNrq3Oc z-MoxjLwxCTU*AoS(wUFj8wcr!tuZ(uKHhlm#u1Sz%n@-qdw8LV>CCFux6@o5f)00M z6IykBWQY%BYOq?b=pQg1C$@~q*Oobm06-UX?)vA64H-JI*%?F67B_WqnS8b%zt(v4 z0CRy}jv;mcOrx4j+fPk`1E%Bh)q_x}+wNs60W{+_<}|8f+jo&z1qtj@`$k0serl;g zY^w)YoIfpke1M=P)1m&wyEYe@ z?(9&sVQJ3y=7+Woy89TM7Nam0pli(GcFG-QV^HWg&${I6lg%67bLQp`@OK;gw)dYE z9Qj4wglh0sZQk~j%4U*m)=f(#VV{Pp%NV^r?KhjE%z|4IHlt9qNJbbnUABw9@ylB8 zK`@PO=&#vTQYn39VLyQ2>p z&YqWw+Mr?1)jc|W8)`g=BxN3uU}+nJ;i898*q=oY?z45=+;Q z(5>w|Zhp>6hzVzdW@c}O3gp$W-02#2C{)ItXget6AynO{Fge*nei z_0{ZrOfbg`T^H@*=>=&PT~c6P*Hu*rWMn3<@?lg!?wqseo5`ubxrdmquw`8v#wde) z)pASwnwq(!CA$zZ6SFaheQML$Oz=5L)yv@b)&Ft7SSMCK+J_PeS*`XC@-=yz( z{}=GvDhlMWO`{aS_a{838nnw=Q}CGp$;oDWDhLtrKv z9ZCGs)du8+4}218PGHOtRsDnVuubVzc?;pt8Fl#5Tpy=)Ht>r#PdrRKZ%B2TI0^}T zYXSKM!sr^uhH;Ki#^9OG*4;|{&E(K>;+t3a<7}x{_(rs!$cdtp-n?@3gvnoc_cwpn z)DagfKRV05^~J!Rz;2BvH9k{xUbzcPQEyIBk5=j22l2e>pL@wvPD>csS_4ドルMw|S_d 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ドルz|Q-0#?{8p`b=~gN5_N% ziQdA{gvTBS7ujZPo*czmo^P#f_pk-<`hj|rz@_g?exrtwn4c!q?(bt|tz}qa{l!nx zEz%G3fXd29e`kn9Oj?{_$%T3reopaZn^WRy>Egqu}CY6JzWY zuC(HS=E&=fEg3ZLXl&3+!So#W_OQnpA4z`ssH5 z!@?}fc}l%`fp8k$gV*b+w=eNZ#ZaRu7$@Q${o~AAp+NM7;egVa20K!RYgGUyi~fQ} z#Zgm4ZwU8j)PykYy$lPdW8`PWrG`TfnEK!vTroq?)dzVsv)fD6mfj~IXc zha_l}#hkCU_C{5E9DHp~Im+$OlY-LffFIL5 zFBu^R@}mn3i(=Djt<5wfz;py#!qqa_sd=&vva5z!u|{i?ju=c_wc+i8khb4djdd@a zs27~PJLmen*VbU56J=o9ドルh~ErIs3TR0ドル#%m9H}H z?d53NWd0RZm84kSU*%cBG(|}o6Yz%1Et}V5kM>*4h}RPX2LMPt{nLI?003yDsou>T z1U1?J&=Y7$QA$IM8Kfi)HT!=`zCf7)YEoj7ic&yVPgfTvX7B(@tr{|DSYA7FaG-o( zcuan4!+DJ9h)%IqZGeuRp04rRwDK4em`?GV{OH)EGMEWSKd1m?+G-^HL8E&v|-{VV-PY(+68khGM# z22fG@e(-mc0ドルQQs2o+*5l(7zaL3Qy9g+t3gJ2Q4mS36svm!0je^*?gL zP&Gosc)yT1^jA}3SD@n`JSc$wt=!)wK81zyIM_k83wV;KHMY0# zwzTrJa zIW-&5)YjO=C|(`(V){+K4eWoyleBU+H+6Mz_ENBNakaAl zAIM73K^u>2)PfAv+B&rN8Gl2Tf$HLK-T6n$LH4G$ZZ6R7RWWupwsZNr$d4)@e=fR$ zfCB)?(f|PDzX6vJ{1dR^A93aX?x068snfU%O346#Pl5md)o*Aw4F80t>1t(baq3S~Wiw9b2 zlm`I*uuNBTJ4ah%SMy)T*dyz&d1I(vej!990KnSG&D`0GnFGiQ{n$an>(;*w(no+_ zqJ6DlM_`|#50q_7GQ0q*F{tE#7AL5kFpa1{> literal 0 HcmV?d00001 From 0bf93dba330c614fa0d3f774ab58f811d9ef60c5 Mon Sep 17 00:00:00 2001 From: TANG ZhiXiong Date: 2017年12月27日 00:32:48 +0800 Subject: [PATCH 2/2] upload --- README.html | 1098 +++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 187 --------- README.org | 607 ++++++++++++++++++++++++++++ theme.setup | 1 + 4 files changed, 1706 insertions(+), 187 deletions(-) create mode 100644 README.html delete mode 100644 README.md create mode 100644 README.org create mode 100644 theme.setup diff --git a/README.html b/README.html new file mode 100644 index 0000000..16432a6 --- /dev/null +++ b/README.html @@ -0,0 +1,1098 @@ + + + + +README + + + + + + + + + + + + + + + + + + + + + + + +
+
+

README

+ + +
+

1 stackoverflow-Java-top-qa

+
+
+

1.1 一些基本的约定

+
+
    +
  • 文档的文件名,和 stackoverflowhich-notnull-java-annotation-should-i-usew 上 的 url 保持一致。 +例如, http://stackoverflow.com/questions/8710619/java-operator 的文件名, 就是 java-operator.md +
  • +
  • 在每篇翻译文档内容的最后,要附上 stackoverflow 的原文链接 +
  • +
+
+
+
+

1.2 每个人可以做(但不限于)

+
+
    +
  • 找未翻译的问题进行翻译 +
  • +
  • 优化已翻译的问题 +
  • +
  • 输出问答精简汇总版(把所有的问答集中到一个 md +文件,然后尽量精简,让别人可 以在一天内把这 100 个问题的精髓都看完) +
  • +
  • 输出 gitbook 版本(现在直接在 github 上查看,体验不好) +
  • +
+
+
+ +
+

1.3 文档优化反馈

+
+

+请大家多多反馈,优化已翻译好的文章:可以到 吐槽区 吐槽, 也可以在已翻 +译文章基础上进行优化,提新的 PR。文章质量的提升,需要大家一起努力! +

+
+
+
+

1.4 目录

+
+
+

1.4.1 [32/38] 基础语法

+
+
    +
  • [X] Java += 操作符实质 +
  • +
  • [X] 将 Inputstream 转换为 String + Apache commons IOUtils + +
    + +
    // method 1
    +StringWriter writer = new StringWriter();
    +IOUtils.copy(inputStream, writer, encoding);
    +String theString = writer.toString();
    +
    +// method 2
    +String theString = IOUtils.toString(inputStream, encoding);
    +
    +// method 3
    +static String convertStreamToString(java.io.InputStream is) {
    + java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
    + return s.hasNext() ? s.next() : "";
    +}
    +
    +
    +
  • +
  • [X] 将数组转换为 List +
    + +
    // method 1
    +new ArrayList<Element>(Arrays.asList(array));
    +
    +// 定长, 不能 add, remove (搞得跟 array 就一样了)
    +// method 2
    +Arrays.asList(array);
    +// method 3
    +Arrays.asList(new Element(1),new Element(2),new Element(3));
    +
    +
    +
  • +
  • [X] 如何遍历 map 对象 +
    + +
    // method 1: entrySet
    +Map<Integer, Integer> map = new HashMap<Integer, Integer>();
    +for(Map.Entry<Integer, Integer> entry : map.entrySet()){
    + System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue())
    +}
    +
    +// method 2: keySet(), values()
    +
    +// method 3: iterator
    +Map<Integer, Integer> map = new HashMap<Integer, Integer>();
    +Iterator<Map.Entry<Integer, Integer>> entries = map.entrySet().iterator();
    +while (entries.hasNext()) {
    + Map.Entry<Integer, Integer> entry = entries.next();
    + System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue());
    +}
    +
    +// method 4: 迭代 keys 并搜索 values(低效的)
    +
    +
    +
  • +
  • [ ] public,protected,private,不加修饰符。有什么区别呢? +
  • +
  • [X] 如何测试一个数组是否包含指定的值? +
    + +
    // method 1
    +Arrays.asList(...).contains(...)
    +
    +// method 2
    +String[] fieldsToInclude = { "id", "name", "location" };
    +if ( ArrayUtils.contains( fieldsToInclude, "id" ) ) {
    + // Do some stuff.
    +}
    +
    +// method 3, for ordered list
    +Arrays.binarySearch(arr, targetValue);
    +
    +
    +
  • +
  • [X] 重写(Override)equlas 和 hashCode 方法时应考虑的问题 +
      +
    • equals() 定义了对象的相等关系(自反性、对称性、传递性) +
    • +
    • hashCode 只是尽量要求不重合 +
    • +
    • equals 的对象, hashCode 也要一样, hashCode 一样, 不一定 equal +
    • +
    +
  • +
  • [X] 从一个多层嵌套循环中直接跳出 + break+label, 我觉得这个和 goto 就很类似了. 应当避免这样写. +
  • +
  • [X] 如何将 String 转换为 Int +
      +
    • Integer.valueOf(str); ==> Integer +
    • +
    • Integer.parseInt(str); ==> int (possible NumberFormatException) +
    • +
    +
  • +
  • [X] 如何分割(split)string 字符串 +
      +
    • String[] parts = string.split("-"); +
    • +
    • 需要注意的是,该方法的参数是个正则表达式, 要注意对某些字符做转码。 +例如,.在正则表达式中表示任意字符,因此,如果你要通过.号做分割,需要这样写,split("\\.")或者split(Pattern.quote(".")) +
    • +
    +
  • +
  • [X] 在 java 中如何对比(compare)string +
  • +
  • [X] =Map<Key,Value>=基于 Value 值排序 +
      +
    • 1: 使用 TreeMap,可以参考下面的代码 + +

      +The TreeMap class implements the Map interface by using a tree. A +TreeMap provides an efficient means of storing key/value pairs in +sorted order, and allows rapid retrieval. +

      +
    • +
    • 2: 先通过 linkedlist 排好序,再放到 LinkedHashMap 中 +
    • +
    +
  • +
  • [X] HashMap 和 Hashtable 的区别 +
      +
    • Hashtable是同步的,加了synchronized锁,而HashMap不是 +
    • +
    +
  • +
  • [X] 如何便捷地将两个数组合到一起 +
    + +
    // method 1
    +ArrayUtils.addAll(T[], T...)
    +
    +// method 2
    +public Foo[] concat(Foo[] a, Foo[] b) {
    + int aLen = a.length;
    + int bLen = b.length;
    + Foo[] c= new Foo[aLen+bLen];
    + System.arraycopy(a, 0, c, 0, aLen);
    + System.arraycopy(b, 0, c, aLen, bLen);
    + return c;
    +}
    +
    +// method 3
    +public <T> T[] concatenate (T[] a, T[] b) {
    + int aLen = a.length;
    + int bLen = b.length;
    +
    + @SuppressWarnings("unchecked")
    + T[] c = (T[]) Array.newInstance(a.getClass().getComponentType(), aLen+bLen);
    + System.arraycopy(a, 0, c, 0, aLen);
    + System.arraycopy(b, 0, c, aLen, bLen);
    +
    + return c;
    +}
    +// !!!! 注意,泛型的方案不适用于基本数据类型(int,boolean......)
    +
    +
    +
  • +
  • [X] Java 是否支持默认的参数值 +
      +
    • builders: 使用创建者模式,你可以设定部分参数是有默认值,部分参数是可选的。如: +
    • +
    • 方法(构造函数)重载 +
    • +
    • null 的传递 +
    • +
    • 多参数方式 +
      + +
      void foo(String a, Integer... b) {
      + Integer b1 = b.length > 0 ? b[0] : 0;
      + Integer b2 = b.length > 1 ? b[1] : 0;
      + //...
      +}
      +
      +foo("a");
      +foo("a", 1, 2);
      +
      +
      +

      +如果不是同一类型, 就用 Object + cast . +

      +
    • +
    • 使用 Map 作为方法中的参数 +
    • +
    +
  • +
  • [X] Java 产生指定范围的随机数 +
      +
    • Math.random(): [0, 1) +
    • +
    • java.util.Random +
    • +
    • org.apache.commons.lang3.RandomUtils +
    • +
    +
  • +
  • [X] JavaBean 到底是什么 + JavaBean 只是一个标准 +
      +
    • 所有的属性是私有的(通过 getters/setters 处理属性) +
    • +
    • 一个公有的无参数的构造器 +
    • +
    • 实现了序列化(Serializable) +
    • +
    +

    +另外,一个 JavaBean 类和一个普通的类没有语法区别,如果遵循上面的标准 +的话,一个类可以认为成 JavaBean 类。 +

    + +

    +之所以需要 JavaBean,是因为这样预定义了一种类的格式,一些库能依据这 +个约定的格式,来做一些自动化处理。举个例子,如果一个类库需要通过流来 +处理你传递的任何对象,它知道它可以正常处理,因为这个对象是可序列化的。 +(假设这个类库要求你的对象是 JavaBeans) +

    +
  • +
  • [ ] wait() 和 sleep() 的区别 +
  • +
  • [X] 能否在一个构造器中调用另一个构造器 +
    + +
    public class Foo {
    + private int x;
    +
    + public Foo() {
    + this(1);
    + }
    +
    + public Foo(int x) {
    + this.x = x;
    + }
    +}
    +
    +
    + +

    +请注意,在构造器中,你只能调用一次其他的构造器。并且调用其他构造器的 +语句,必须是这个构造器的第一个语句。 +

    +
  • +
  • [X] finally 代码块总会被执行么 +
    + +
    try {
    + something();
    + return success;
    +} catch (Exception e) {
    + return failure;
    +} finally {
    + System.out.println("i don't know if this will get printed out.");
    +}
    +// 只有以下情况 finally 不会被调用:
    +// + 当你使用 System.exit() 后
    +// + 其他线程干扰了现在运行的线程(通过 interrupt 方法)
    +// + JVM 崩溃 (crash) 了
    +
    +
    +
  • +
  • [X] 如何将 String 转换为 enum +
      +
    • Blah.valueOf("A") 将会得到 Blah.A +
    • +
    • 静态方法 valueOf() 和 values() 不存在于源码中,而是在编译时创建 +
    • +
    • hack +
      + +
      public static <T extends Enum<T>> T getEnumFromString(Class<T> c, String string) {
      + if( c != null && string != null ) {
      + try {
      + return Enum.valueOf(c, string.trim().toUpperCase());
      + } catch(IllegalArgumentException ex) {}
      + }
      + return null;
      +}
      +
      +public enum MyEnum {
      + ...
      + public static MyEnum fromString(String name) {
      + return getEnumFromString(MyEnum.class, name);
      + }
      + ...
      +}
      +
      +
      +
    • +
    +
  • +
  • [X] 在 Java 中声明数组 +
    + +
    // primtive type
    +int[] myIntArray = new int[3];
    +int[] myIntArray = {1, 2, 3};
    +int[] myIntArray = new int[]{1, 2, 3};
    +
    +// string
    +String[] myStringArray = new String[3];
    +String[] myStringArray = {"a", "b","c"};
    +String[] myStringArray = new String[]{"a", "b", "c"};
    +
    +
    +
  • +
  • [X] 反射是什么及其用途 +
    + +
    Method method = foo.getClass().getMethod("dosomething",null);
    +method.invoke(foo,null); //调用foo的dosomething方法
    +
    +
    + +

    +可以看看我的这个笔记 https://github.com/4ker/JavaAOP +

    +
  • +
  • [X] 为什么不能用 string 类型进行 switch 判断 + 在 JDK7 中,这个特性已经实现了。在编译阶段,以 string 作为 case 值的代码,会按照特定的模式,被转换为更加复杂的代码。最终的执行代码将是一些使用了 JVM 指令的代码。 + +

    +这是在说, java 7 之前是不可以的. +

    +
  • +
  • [X] 比较 java 枚举成员使用 equal 还是 == +
      +
    • 如果你看过枚举的源码,你会发现在源码中,equals 也仅仅非常简单的 == +
    • +
    • 其实很简单, 因为 Enum 的 valueOf 方法是从自己的备选项里面枚举, 找到那个 enum 取出来的, 所以内存位置也是一样的. +
    • +
    • 还有一个区别是 null.equals 可能有风险, == 则没有 +
    • +
    • 总而言之,在枚举比较上使用 == , 因为: +
        +
      • 能正常工作 +
      • +
      • 更快 +
      • +
      • 运行时是安全的 +
      • +
      • 编译期也是安全的 +
      • +
      +
    • +
    +
  • +
  • [X] 用 java 怎么创建一个文件并向该文件写文本内容 +
    + +
    // TEXT FILE
    +// method 1: print writer, text file
    +PrintWriter writer = new PrintWriter("the-file-name.txt", "UTF-8");
    +writer.println("The first line");
    +writer.println("The second line");
    +writer.close();
    +// method 2: array of lines to file
    +List<String> lines = Arrays.asList("The first line", "The second line");
    +Path file = Paths.get("the-file-name.txt");
    +Files.write(file, lines, Charset.forName("UTF-8"));
    +//Files.write(file, lines, Charset.forName("UTF-8"), StandardOpenOption.APPEND);
    +
    +// BINARY
    +// method 3: FileOutputStream, binary
    +byte data[] = ...
    +FileOutputStream out = new FileOutputStream("the-file-name");
    +out.write(data);
    +out.close();
    +// method 4: FileOutputStream, binary
    +Path file = Paths.get("the-file-name");
    +Files.write(file, data);
    +
    +
    +
  • +
  • [X] serialVersionUID 有什么作用?该如何使用? +
      +
    • 对象的序列化主要有两种用途: +
        +
      • 把对象序列化成字节码,保存到指定介质上 (如磁盘等) +
      • +
      • 用于网络传输 +
      • +
      +
    • +
    • 可当我们增加 email 字段后,不作向后兼容。即放弃原来序列化到磁盘的 Person 类,这时我们可以将版本标识提高 +
    • +
    • serialVersionUID 就是控制版本是否兼容的,若我们认为修改的 Person 是向后兼容的, +则不修改 serialVersionUID;反之,则提高 serialVersionUID 的值。再回到一开始的问题 +
    • +
    +
  • +
  • [X] 为什么 Java 的 Vector 类被认为是过时的或者废弃的 +
      +
    • Vector 中对每一个独立操作都实现了同步,这通常不是我们想要的做法。 +
    • +
    • 总的来说,在大多数情况下,这种同步方法是存在很大缺陷的。正如 Mr Brain Henk 指出, +你可以通过调用Collections.synchronizedList来装饰一个集合 - 事实上 Vector 将 "可变数组" 的集合实现 +与 "同步每一个方法" 结合起来的做法是另一个糟糕的设计; +
    • +
    +
  • +
  • [X] Java 的 foreach 循环是如何工作的 + 用了 iterator +
    + +
    // for (String item : someList) {System.out.println(item);}
    +for(Iterator<String> i = someList.iterator(); i.hasNext(); ) {
    + String item = i.next();
    + System.out.println(item);
    +}
    +
    +
    +
  • +
  • [X] 为什么相减这两个时间(1927 年)会得到奇怪的结果 +这是因为 1927 年 11 月 31 日上海的时区改变了。 观看此页获得更多关于 +上海 1927 年的细节。 这个问题主要是由于在 1927 年 12 月 31 日的午夜, +时钟回调了 5 分钟零 52 秒。 所以 "1927-12-31 23:54:08" 这个时间实际 +上发生了两次,看上去 java 将这个时间解析为之后的那个瞬间。 因此出现 +了这种差别。 + +

    +这只是美好但奇怪的世界时区中的一个插曲。 +

    + +

    +Shanghai Municipality (mjʊ'nɪsə'pæləti) 自治市 +

    + +

    +Daylight Saving Time (DST) Not Observed in Year 1927 +Shanghai observed China Standard Time (CST) all year. +

    + +

    +DST was not in use in 1927. +

    +
  • +
  • [ ] 该什么时候使用 ThreadLocal 变量,它是如何工作的 + 一种可能的(也是常见的)使用情形是你不想通过同步方式(synchronized)访问非线程安全的对象(说的就是 SimpleDateFormat), 而是想给每个线程一个对象实例的时候。 例如 +
    + +
    public class Foo
    +{
    + // SimpleDateFormat is not thread-safe, so give one to each thread
    + private static final ThreadLocal<SimpleDateFormat> formatter = new ThreadLocal<SimpleDateFormat>(){
    + @Override
    + protected SimpleDateFormat initialValue() {
    + return new SimpleDateFormat("yyyyMMdd HHmm");
    + }
    + };
    +
    + public String formatIt(Date date) {
    + return formatter.get().format(date);
    + }
    +}
    +
    +
    +
  • +
  • [ ] servlets 的运行原理 +
  • +
  • [X] 如何计算 MD5 值 +使用 MessageDigest 和 String 时,一定要显式声明你的数据编码类型。如 +果你使用无参的 String.getBytes() , 它会以当前平台的默认编码来转换数 +据。不同平台的默认编码可能是不同的,这可能会导致你的数据不一致。 +
    + +
    import java.security.*;
    +
    +...
    +byte[] bytesOfMessage = yourString.getBytes("UTF-8");
    +MessageDigest md = MessageDigest.getInstance("MD5");
    +byte[] thedigest = md.digest(bytesOfMessage);
    +
    +
    +

    +如果你的要计算的数据量很大,你可以循环使用 .update(byte[]) 方法来加载数据。加载完毕后用 .digest() 方法来得到计算出的 MD5 值。 +

    +
  • +
  • [ ] Java 中软引用和弱引用的区别 +
  • +
  • [ ] JSF, Servlet 和 JSP +
  • +
  • [X] Java 内部类和嵌套静态类 + 因此, 要实例化一个内部类对象, 必须先实例化外部类对象. 然后用这种语法来创建内部类对象: + +
    + +
    OuterClass.InnerClass innerObject = outerObject.new InnerClass();
    +
    +
    + +

    +这是什么鬼… +

    + +
    + +
    class A {
    + int t() { return 1; }
    + static A a = new A() { int t() { return 2; } };
    +}
    +
    +
    +
  • +
  • [X] @Component, @Repository, @Service 的区别 + 在 spring 集成的框架中,注解在类上的@Component,@Repository,@Service等注解能否被互换?或者说这些注解有什么区别? + +

    +在 Spring2.0 之前的版本中,@Repository注解可以标记在任何的类上,用来 +表明该类是用来执行与数据库相关的操作(即 dao 对象),并支持自动处理 +数据库操作产生的异常 +

    + +

    +在 Spring2.5 版本中,引入了更多的 Spring 类注解: +@Component,@Service,@Controller。Component是一个通用的 Spring 容器管 +理的单例 bean 组件。而@Repository, @Service, @Controller就是针对不同 +的使用场景所采取的特定功能化的注解组件。 +

    + +

    +因此,当你的一个类被@Component所注解,那么就意味着同样可以用 +@Repository, @Service, @Controller来替代它,同时这些注解会具备有更多 +的功能,而且功能各异。 +

    + +

    +最后,如果你不知道要在项目的业务层采用@Service还是@Component注解。那 +么,@Service是一个更好的选择。 +

    + +

    +— +

    + +

    +这几个注解几乎可以说是一样的:因为被这些注解修饰的类就会被 Spring 扫 +描到并注入到 Spring 的 bean 容器中。 +

    + +

    +这里,有两个注解是不能被其他注解所互换的: +

    +
      +
    • @Controller 注解的 bean 会被 spring-mvc 框架所使用。 +
    • +
    • @Repository 会被作为持久层操作(数据库)的 bean 来使用 +
    • +
    +
  • +
  • [X] 如何创建泛型 java 数组 +
    + +
    public class GenSet<E> {
    + private E[] a;
    +
    + public GenSet(Class<E> c, int s) {
    + // 使用原生的反射方法,在运行时知道其数组对象类型
    + @SuppressWarnings("unchecked")
    + final E[] a = (E[]) Array.newInstance(c, s);
    + this.a = a;
    + }
    +
    + E get(int i) {
    + return a[i];
    + }
    +
    + //...如果传入参数不为E类型,那么强制添加进数组将会抛出异常
    + void add(E e) {...}
    +}
    +
    +
    +
  • +
+
+
+
+

1.4.2 [8/21] 编程技巧

+
+
    +
  • [X] 去掉烦人的 =!=null=(判空语句) + +

    +用 Java 8 的 Optional 啊! 懒得看了. +

    +
  • +
  • [X] 获取完整的堆栈信息 + +

    +捕获了异常后,如何获取完整的堆栈轨迹(stack trace) +

    +
    + +
    // method 1
    +String fullStackTrace = org.apache.commons.lang.exception.ExceptionUtils.getFullStackTrace(e);
    +
    +// method 2
    +Thread.currentThread().getStackTrace();
    +
    +
    +
  • +
  • [X] 如何用一行代码初始化一个 ArrayList +
    + +
    // good
    +ArrayList<String> places = new ArrayList<String>(
    + Arrays.asList("Buenos Aires", "Córdoba", "La Plata"));
    +
    +// works too. 匿名内部类
    +ArrayList<String> list = new ArrayList<String>() {{
    + add("A");
    + add("B");
    + add("C");
    +}};
    +
    +
    +
  • +
  • [X] 初始化静态 map + +
    + +
    // 我使用static初始化器来创建一个固定长度的静态map
    +public class Test{
    + private static final Map<Integer, String> myMap;
    + static {
    + Map<Integer, String> aMap = ...;
    + aMap.put(1,"one");
    + aMap.put(2,"two");
    + myMap = Collections.unmodifiableMap(aMap);
    + }
    +}
    +
    +// 我喜欢用Guava(是 Collection 框架的增强)的方法初始化一个静态的,不可改变的map
    +static fianl Map<Integer, String> myMap = ImmutablMap.of(
    + 1,"one",
    + 2, "two"
    +)
    +
    +// build
    +static fianl Map<Integer, String> myMap =
    + new ImmutableMap.Builder<String, Integer>()
    + .put("one", 1)
    + .put("two", 2)
    + .put("three", 3)
    + .build();
    +
    +
    +
  • +
  • [X] 给 3 个布尔变量,当其中有 2 个或者 2 个以上为 true 才返回 true + +

    +这个智障答案… +

    + +

    +我觉得 return ((a && b) || (b && c) || (a && c)) 是最好的. +

    +
  • +
  • [X] 输出 Java 数组最简单的方式 +
    + +
    int[] intArray = new int[] {1, 2, 3, 4, 5};
    +System.out.println(Arrays.toString(intArray));
    +//输出: [1, 2, 3, 4, 5]
    +
    +String[] strArray = new String[] {"John", "Mary", "Bob"};
    +System.out.println(Arrays.deepToString(strArray));
    +//输出: [John, Mary, Bob]
    +
    +// Arrays.deepToString与Arrays.toString不同之处在于,Arrays.deepToString更适合打印多维数组
    +
    +
    +
  • +
  • [X] 什么在 java 中存放密码更倾向于 char 而不是 String + +

    +String是不可变的。虽然String加载密码之后可以把这个变量扔掉,但是字符 +串并不会马上被GC回收,一但进程在GC执行到这个字符串之前被dump,dump出 +的的转储中就会含有这个明文的字符串。那如果我去"修改"这个字符串,比如 +把它赋一个新值,那么是不是就没有这个问题了?答案是否定的,因为String +本身是不可修改的,任何基于String的修改函数都是返回一个新的字符串,原 +有的还会在内存里。 +

    + +

    +然而对于数组,你可以在抛弃它之前直接修改掉它里面的内容或者置为乱码, +密码就不会存在了。但是如果你什么也不做直接交给gc的话,也会存在上面一 +样的问题。 +

    + +

    +所以,这是一个安全性的问题–但是,即使使用char[]也仅仅是降低了攻击者 +攻击的机会,而且仅仅对这种特定的攻击有效。 +

    +
  • +
  • [ ] 如何避免在 JSP 文件中使用 Java 代码 +
  • +
  • [ ] Java 源码里的设计模式 +
  • +
  • [ ] 如何产生一个随机的字母数字串作为 session 的唯一标识符 + +

    +如果允许产生的随机字符串是可猜测的(随机字符串比较都短,或者使用有缺陷 +的随机数生成器),进而导致攻击者可能会劫持到会话的,可以使用一个相对简 +单随机数生成代码,如下所示: +

    +
  • +
  • [ ] 如何创建单例 +
    + +
    // 预加载
    +public class Foo {
    +
    + private static final Foo INSTANCE = new Foo();
    +
    + private Foo() {
    + if (INSTANCE != null) {
    + throw new IllegalStateException("Already instantiated");
    + }
    + }
    +
    + public static Foo getInstance() {
    + return INSTANCE;
    + }
    +}
    +
    +// 懒加载
    +class Foo {
    +
    + private static Foo INSTANCE = null;
    +
    + private Foo() {
    + if (INSTANCE != null) {
    + throw new IllegalStateException("Already instantiated");
    + }
    + }
    +
    + public static Foo getInstance() {
    + if (INSTANCE == null) {
    + INSTANCE = new Foo();
    + }
    + return INSTANCE;
    + }
    +}
    +
    +
    +
  • +
  • [X] 实现 Runnable 接口 VS. 继承 Thread 类 + +

    +在Java中,并发执行任务一般有两种方式: +

    +
      +
    • 实现Runnable接口 +
    • +
    • 继承Thread类 +
    • +
    +

    +一般而言,推荐使用方式(1),主要是由于大多数情况下,人们并不会特别去 +关注线程的行为,也不会去改写Thread已有的行为或方法,仅仅是期望执行任 +务而已。 因此,使用接口的方式能避免引入一些并不需要的东西,同时也不 +会影响继承其他类,并使程序更加灵活。 +

    + +

    +额外的tips: +

    +
      +
    • Runnable与Thread不是对等的概念 + +

      +在Thinking in Java中,作者吐槽过Runnable的命名,称其叫做Task更为合理。 +在Java中,Runnable只是一段用于描述任务的代码段而已,是静态的概念,需要通过线程来执行。而Thread更像是一个活体,自身就具有很多行为,能够用来执行任务。 +

      +
    • +
    • 仅仅当你确实想要重写(override)一些已有行为时,才使用继承,否则请使用接口。 +
    • +
    • 在Java 5之前,创建了Thread却没调用其start()方法,可能导致内存泄露。 +
    • +
    +
  • +
  • [ ] 我应该用哪一个 @NotNull 注解 +
  • +
  • [ ] 怎样将堆栈追踪信息转换为字符串 +
  • +
  • [ ] 如何处理 java.lang.outOfMemoryError PermGen space error +
  • +
  • [ ] 如何在整数左填充 0 +
  • +
  • [ ] 在调用 instanceof 前需要进行 null 检查吗 +
  • +
  • [ ] 如何从文件里读取字符串 +
  • +
  • [ ] 遍历集合时移除元素,怎样避免 ConcurrentModificationException 异常抛出 +
  • +
  • [ ] 如何让 IntelliJ 编辑器永久性显示代码行数 +
  • +
  • [ ] 如何使用 maven 把项目及其依赖打包为可运行 jar 包 +
  • +
+
+
+ + + + +
+
+
+
+

Author: TANG ZhiXiong

+

Created: 2017年10月03日 Tue 14:12

+

Emacs 25.3.1 (Org mode 8.2.10)

+

Validate

+
+

AltStyle によって変換されたページ (->オリジナル) /

+ diff --git a/README.md b/README.md deleted file mode 100644 index 5706de7..0000000 --- a/README.md +++ /dev/null @@ -1,187 +0,0 @@ -stackoverflow-Java-top-qa -========================= - -对 stackoverflow 上 Java 相关、投票数 TOP100 的问答进行翻译,欢迎点 star,我们 -会持续更新!!! - -为了让"翻译"更有意义,给阅读者带来更多、更有效的收获,我们会有一些加工: -例如,对问题进行分类,整合多个答案、删除冗余内容、加上自己的验证结果、心得等等。 - -对于参与翻译的人,这也是很好的一个学习、理解过程,欢迎大家一起来翻译。 - -### 如何参与翻译 - -#### 如何参与 - -- 请从下文"待翻译问题链接"中寻找你感兴趣的问答进行翻译。翻译好的问答,放到 - contents 目录下,无需更新 readme.md 文档。之后提一个 PR,我负责合并 PR 并更 - 新到 readme 中。 -- 另外,为了避免多人重复新翻译一个问题,你可以提 issue,说明你计划翻译的问题 - 及时间点,我可以先更新到下面的"未翻译问题"中,说明已有人领了这个问题。当然, - 也不一定要提 issue,一般情况下,只要及时提 pr,我及时审核,出现"撞车"的概率 - 并不高。 - -#### 一些基本的约定 - -- 文档的文件名,和 `stackoverflowhich-notnull-java-annotation-should-i-usew` 上 - 的 url 保持一致。例如, - `http://stackoverflow.com/questions/8710619/java-operator` 的文件名, 就是 - `java-operator.md` -- 在每篇翻译文档内容的最后,要附上 stackoverflow 的原文链接 - -#### 每个人可以做(但不限于) - -- 找未翻译的问题进行翻译 -- 优化已翻译的问题 -- 输出问答精简汇总版(把所有的问答集中到一个 md 文件,然后尽量精简,让别人可 - 以在一天内把这 100 个问题的精髓都看完) -- 输出 gitbook 版本(现在直接在 github 上查看,体验不好) - -#### 文档优化反馈 - -请大家多多反馈,优化已翻译好的文章:可以到 [吐槽区](https://github.com/giantray/stackoverflow-java-top-qa/issues/66) 吐槽, -也可以在已翻译文章基础上进行优化,提新的 PR。文章质量的提升,需要大家一起努力! - -### 目录 - -> 基础语法 - -- [Java += 操作符实质](contents/java-operator.md) -- [将 InputStream 转换为 String](contents/read-convert-an-inputstream-to-a-string.md) -- [将数组转换为 List](contents/create-arraylist-from-array.md) -- [如何遍历 map 对象](contents/iterate-through-a-hashmap.md) -- [public,protected,private,不加修饰符。有什么区别呢?](contents/in-java-whats-the-difference-between-public-default-protected-and-private.md) -- [如何测试一个数组是否包含指定的值?](contents/how-can-i-test-if-an-array-contains-a-certain-value.md) -- [重写(Override)equlas 和 hashCode 方法时应考虑的问题](contents/what-issues-should-be-considered-when-overriding-equals-and-hashcode-in-java.md) -- [从一个多层嵌套循环中直接跳出](contents/breaking-out-of-nested-loops-in-java.md) -- [如何将 String 转换为 Int](contents/converting-string-to-int-in-java.md) -- [如何分割(split)string 字符串](contents/how-to-split-a-string-in-java.md) -- [在 java 中如何对比(compare)string](contents/how-do-i-compare-strings-in-java.md) -- [`Map`基于 Value 值排序](contents/how-to-sort-a-mapkey-value-on-the-values-in-java.md) -- [HashMap 和 Hashtable 的区别](contents/differences-between-hashmap-and-hashtable.md) -- [如何便捷地将两个数组合到一起](contents/how-to-concatenate-two-arrays-in-java.md) -- [Java 是否支持默认的参数值](contents/does-java-support-default-parameter-values.md) -- [Java 产生指定范围的随机数](contents/generating-random-integers-in-a-range-with-Java.md) -- [JavaBean 到底是什么](contents/what-is-a-javabean-exactly.md) -- [wait() 和 sleep() 的区别](contents/difference-between-wait-and-sleep.md) -- [能否在一个构造器中调用另一个构造器](contents/how-do-i-call-one-constructor-from-another-in-java.md) -- [`finally` 代码块总会被执行么](contents/does-finally-always-execute-in-java.md) -- [如何将 String 转换为 enum](contents/convert-a-string-to-an-enum-in-java.md) -- [在 Java 中声明数组](contents/declare-array-in-java.md) -- [反射是什么及其用途](contents/what-is-reflection-and-why-is-it-useful.md) -- [为什么不能用 string 类型进行 switch 判断](contents/why-cant-i-switch-on-a-string.md) -- [比较 java 枚举成员使用 equal 还是 ==](contents/comparing-java-enum-members-or-equals.md) -- [用 java 怎么创建一个文件并向该文件写文本内容](contents/how-to-create-a-file-and-write-to-a-file-in-java.md) -- [serialVersionUID 有什么作用?该如何使用?](contents/what-is-a-serialversionuid-and-why-should-i-use-it.md) -- [为什么 Java 的 `Vector` 类被认为是过时的或者废弃的](contents/why-is-java-vector-class-considered-obsolete-or-deprecated.md) -- [Java 的 foreach 循环是如何工作的](contents/how-does-the-java-for-each-loop-work.md) -- [为什么相减这两个时间(1927 年)会得到奇怪的结果](/why-is-subtracting-these-two-times-in-1927-giving-a-strange-result.md) -- [Java 中如何将 String 转换为 enum](contents/lookup-enum-by-string-value.md) -- [该什么时候使用 ThreadLocal 变量,它是如何工作的](contents/when-and-how-should-i-use-a-threadlocal-variable.md) -- [servlets 的运行原理](contents/how-do-servlets-work-instantiation-shared-variables-and-multithreading.md) -- [如何计算 MD5 值](contents/how-can-i-generate-an-md5-hash.md) -- [Java 中软引用和弱引用的区别](contents/what-is-the-difference-between-a-soft-reference-and-a-weak-reference-in-java.md) -- [JSF, Servlet 和 JSP](contents/what-is-the-difference-between-jsf-servlet-and-jsp.md) -- [Java 内部类和嵌套静态类](contents/java-inner-class-and-static-nested-class.md) -- [`@Component`, `@Repository`, `@Service` 的区别](contents/whats-the-difference-between-component-repository-service-annotations-in.md) -- [如何创建泛型 java 数组](contents/how-to-create-a-generic-array-in-java.md) - -> 编程技巧 - -- [去掉烦人的 `!=null`(判空语句)](contents/avoiding-null-statements-in-java.md) -- [获取完整的堆栈信息](contents/get-current-stack-trace-in-java.md) -- [如何用一行代码初始化一个 ArrayList](contents/initialization-of-an-arraylist-in-one-line.md) -- [初始化静态 map](contents/how-can-i-initialize-a-static-map.md) -- [给 3 个布尔变量,当其中有 2 个或者 2 个以上为 true 才返回 true](contents/check-if-at-least-two-out-of-three-booleans-are-true.md) -- [输出 Java 数组最简单的方式](contents/whats-the-simplest-way-to-print-a-java-array.md) -- [为什么以下用随机生成的文字会得出 "hello world"?](contents/why-does-this-code-using-random-strings-print-hello-world.md) -- [什么在 java 中存放密码更倾向于 char[] 而不是 String](contents/why-is-char-preferred-over-string-for-passwords-in-java.md) -- [如何避免在 JSP 文件中使用 Java 代码](contents/how-to-avoid-java-code-in-jsp-files.md) -- [Java 源码里的设计模式](contents/examples-of-gof-design-patterns-in-javas-core-libraries.md) -- [如何产生一个随机的字母数字串作为 session 的唯一标识符](contents/how-to-generate-a-random-alpha-numeric-string.md) -- [如何创建单例](contents/what-is-an-efficient-way-to-implement-a-singleton-in-java.md) -- [实现 Runnable 接口 VS. 继承 Thread 类](contents/implements-runnable-vs-extends-thread.md) -- [我应该用哪一个 `@NotNull` 注解](contents/which-notnull-java-annotation-should-i-use.md) -- [怎样将堆栈追踪信息转换为字符串](contents/how-can-i-convert-a-stack-trace-to-a-string.md) -- [如何处理 java.lang.outOfMemoryError PermGen space error](contents/dealing-with-java-lang-outofmemoryerror-permgen-space-error.md) -- [如何在整数左填充 0](contents/how-can-i-pad-an-integers-with-zeros-on-the-left.md) -- [在调用 instanceof 前需要进行 null 检查吗](contents/is-null-check-needed-before-calling-instanceof.md) -- [如何从文件里读取字符串](contents/how-do-i-create-a-java-string-from-the-contents-of-a-file.md) -- [遍历集合时移除元素,怎样避免 ConcurrentModificationException 异常抛出](contents/iterating-through-a-collection-avoiding-concurrentmodificationexception-when-reiterating-through-a-collection-avoiding-concurrentmodificationexception-when-re.md) -- [如何让 IntelliJ 编辑器永久性显示代码行数](contents/how-can-i-permanently-have-line-numbers-in-intellij.md) -- [如何使用 maven 把项目及其依赖打包为可运行 jar 包](contents/how-can-i-create-an-executable-jar-with-dependencies-using-maven.md) - -> 网络 - -- [如何使用 java.net.URLConnection 接收及发送 HTTP 请求](contents/using-java-net-urlconnection-to-fire-and-handle-http-requests.md) - -> 性能 - -- [LinkedList、ArrayList 各自的使用场景,如何确认应该用哪一个呢?](contents/when-to-use-linkedlist-over-arraylist.md) -- [StringBuilder 和 StringBuffer 有哪些区别呢](contents/stringbuilder-and-stringbuffer.md) -- [为什么处理排序的数组要比非排序的快](contents/why-is-processing-a-sorted-array-faster-than-an-unsorted-array.md) -- [如何使用 Java 创建一个内存泄漏的程序](contents/creating-a-memory-leak-with-java.md) -- [为什么打印"B"会明显的比打印"#"慢](contents/why-is-printing-b-dramatically-slower-than-printing.md) - -> 测试 - -- [如何测试 private 方法,变量或者内部类](contents/how-to-test-a-class-that-has-private-methods-fields-or-inner-classes.md) -- [JUnit4 如何断言确定异常的抛出](contents/how-do-you-assert-that-a-certain-exception-is-thrown-in-junit-4-tests.md) - -> Android - -- [在 Android 里面下载文件,并在 ProgressDialog 显示进度](contents/download-a-file-with-android-and-showing-the-progress-in-a-progressdialog.md) -- [如何获取 Android 设备唯一 ID](contents/is-there-a-unique-android-device-id.md) -- [安装 Android SDK 的时候找不到 JDK](contents/android-sdk-installation-doesnt-find-jdk.md) - -### 待翻译问题链接 (还剩 x 问题) - -- [Proper use cases for Android UserManager.isUserAGoat()?](http://stackoverflow.com/questions/13375357/proper-use-cases-for-android-usermanager-isuseragoat) -- [Why is executing Java code in comments with certain Unicode characters allowed?](http://stackoverflow.com/questions/30727515/why-is-executing-java-code-in-comments-with-certain-unicode-characters-allowed) -- [Convert a String to an enum in Java](http://stackoverflow.com/questions/604424/convert-a-string-to-an-enum-in-java) -- ['Must Override a Superclass Method' Errors after importing a project into Eclipse](http://stackoverflow.com/questions/1678122/must-override-a-superclass-method-errors-after-importing-a-project-into-eclips) -- [Fastest way to determine if an integer's square root is an integer](http://stackoverflow.com/questions/295579/fastest-way-to-determine-if-an-integers-square-root-is-an-integer) -- [How to fix: Unsupported major.minor version 51.0 error?](http://stackoverflow.com/questions/10382929/how-to-fix-unsupported-major-minor-version-51-0-error) -- [How to generate a random alpha-numeric string?](http://stackoverflow.com/questions/41107/how-to-generate-a-random-alpha-numeric-string) -- [Failed to load the JNI shared Library (JDK)](http://stackoverflow.com/questions/7352493/failed-to-load-the-jni-shared-library-jdk) -- [What exactly is Apache Camel?](http://stackoverflow.com/questions/8845186/what-exactly-is-apache-camel) -- [Access restriction on class due to restriction on required library rt.jar?](http://stackoverflow.com/questions/860187/access-restriction-on-class-due-to-restriction-on-required-library-rt-jar) -- [How do I discover memory usage of my application in Android?](http://stackoverflow.com/questions/2298208/how-do-i-discover-memory-usage-of-my-application-in-android) -- [Uncatchable ChuckNorrisException](http://stackoverflow.com/questions/13883166/uncatchable-chucknorrisexception) -- [Can I add jars to maven 2 build classpath without installing them?](http://stackoverflow.com/questions/364114/can-i-add-jars-to-maven-2-build-classpath-without-installing-them) -- [Update Eclipse with Android development tools v. 23](http://stackoverflow.com/questions/24437564/update-eclipse-with-android-development-tools-v-23) -- [Setting multiple jars in java classpath](http://stackoverflow.com/questions/219585/setting-multiple-jars-in-java-classpath) -- [What is the Java equivalent for LINQ?](http://stackoverflow.com/questions/1217228/what-is-the-java-equivalent-for-linq) -- [Hibernate hbm2ddl.auto possible values and what they do?](http://stackoverflow.com/questions/438146/hibernate-hbm2ddl-auto-possible-values-and-what-they-do) -- [How can I pad an integers with zeros on the left?](http://stackoverflow.com/questions/473282/how-can-i-pad-an-integers-with-zeros-on-the-left) -- [Sort ArrayList of custom Objects by property](http://stackoverflow.com/questions/2784514/sort-arraylist-of-custom-objects-by-property) -- [Efficiency of Java "Double Brace Initialization"?](http://stackoverflow.com/questions/924285/efficiency-of-java-double-brace-initialization) -- [Why does this go into an infinite loop?](http://stackoverflow.com/questions/3831341/why-does-this-go-into-an-infinite-loop) -- [decompiling DEX into Java sourcecode](http://stackoverflow.com/questions/1249973/decompiling-dex-into-java-sourcecode) -- [Why does Math.round(0.49999999999999994) return 1](http://stackoverflow.com/questions/9902968/why-does-math-round0-49999999999999994-return-1) -- [Eclipse: Set maximum line length for auto formatting?](http://stackoverflow.com/questions/3697287/eclipse-set-maximum-line-length-for-auto-formatting) -- [What is the equivalent of the C++ Pair in Java?](http://stackoverflow.com/questions/156275/what-is-the-equivalent-of-the-c-pairl-r-in-java) -- [How do I "decompile" Java class files?](http://stackoverflow.com/questions/272535/how-do-i-decompile-java-class-files) -- [Useful Eclipse Java Code Templates [closed]](http://stackoverflow.com/questions/1028858/useful-eclipse-java-code-templates) -- [How to call SOAP web service in Android](http://stackoverflow.com/questions/297586/how-to-call-soap-web-service-in-android) - -### contributors - -Thanks a lot :) - -- [giantray](https://github.com/giantray) -- [wklken](https://github.com/wklken) - -see [full list of contrbutors](https://github.com/giantray/stackoverflow-java-top-qa/graphs/contributors). - ---- - -To Be Continue... - -giantray - -Email: - -Blog: - -2015年08月18日 于珠海 diff --git a/README.org b/README.org new file mode 100644 index 0000000..d4e98d8 --- /dev/null +++ b/README.org @@ -0,0 +1,607 @@ +#+AUTHOR: TANG ZhiXiong + +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: + +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: +#+HTML_HEAD: + +#+HTML_HEAD: +#+HTML_HEAD: + +#+HTML_HEAD: + +* stackoverflow-Java-top-qa +** 一些基本的约定 +- 文档的文件名,和 =stackoverflowhich-notnull-java-annotation-should-i-usew= 上 的 url 保持一致。 + 例如, =http://stackoverflow.com/questions/8710619/java-operator= 的文件名, 就是 =java-operator.md= +- 在每篇翻译文档内容的最后,要附上 stackoverflow 的原文链接 +** 每个人可以做(但不限于) + +- 找未翻译的问题进行翻译 +- 优化已翻译的问题 +- 输出问答精简汇总版(把所有的问答集中到一个 md + 文件,然后尽量精简,让别人可 以在一天内把这 100 个问题的精髓都看完) +- 输出 gitbook 版本(现在直接在 github 上查看,体验不好) + +** 文档优化反馈 +请大家多多反馈,优化已翻译好的文章:可以到 [[https://github.com/giantray/stackoverflow-java-top-qa/issues/66][吐槽区]] 吐槽, 也可以在已翻 +译文章基础上进行优化,提新的 PR。文章质量的提升,需要大家一起努力! +** 目录 +*** [32/38] 基础语法 +- [X] [[file:contents/java-operator.md][Java += 操作符实质]] +- [X] [[file:contents/read-convert-an-inputstream-to-a-string.md][将 Inputstream 转换为 String]] + Apache commons IOUtils + + #+BEGIN_SRC java + // method 1 + StringWriter writer = new StringWriter(); + IOUtils.copy(inputStream, writer, encoding); + String theString = writer.toString(); + + // method 2 + String theString = IOUtils.toString(inputStream, encoding); + + // method 3 + static String convertStreamToString(java.io.InputStream is) { + java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A"); + return s.hasNext() ? s.next() : ""; + } + #+END_SRC +- [X] [[file:contents/create-arraylist-from-array.md][将数组转换为 List]] + #+BEGIN_SRC java + // method 1 + new ArrayList(Arrays.asList(array)); + + // 定长, 不能 add, remove (搞得跟 array 就一样了) + // method 2 + Arrays.asList(array); + // method 3 + Arrays.asList(new Element(1),new Element(2),new Element(3)); + #+END_SRC +- [X] [[file:contents/iterate-through-a-hashmap.md][如何遍历 map 对象]] + #+BEGIN_SRC java + // method 1: entrySet + Map map = new HashMap(); + for(Map.Entry entry : map.entrySet()){ + System.out.println("key = " + entry.getKey() + ", value = " + entry.getValue()) + } + + // method 2: keySet(), values() + + // method 3: iterator + Map map = new HashMap(); + Iterator
    > entries = map.entrySet().iterator(); + while (entries.hasNext()) { + Map.Entry entry = entries.next(); + System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); + } + + // method 4: 迭代 keys 并搜索 values(低效的) + #+END_SRC +- [ ] [[file:contents/in-java-whats-the-difference-between-public-default-protected-and-private.md][public,protected,private,不加修饰符。有什么区别呢?]] +- [X] [[file:contents/how-can-i-test-if-an-array-contains-a-certain-value.md][如何测试一个数组是否包含指定的值?]] + #+BEGIN_SRC java + // method 1 + Arrays.asList(...).contains(...) + + // method 2 + String[] fieldsToInclude = { "id", "name", "location" }; + if ( ArrayUtils.contains( fieldsToInclude, "id" ) ) { + // Do some stuff. + } + + // method 3, for ordered list + Arrays.binarySearch(arr, targetValue); + #+END_SRC +- [X] [[file:contents/what-issues-should-be-considered-when-overriding-equals-and-hashcode-in-java.md][重写(Override)equlas 和 hashCode 方法时应考虑的问题]] + + equals() 定义了对象的相等关系(自反性、对称性、传递性) + + hashCode 只是尽量要求不重合 + + equals 的对象, hashCode 也要一样, hashCode 一样, 不一定 equal +- [X] [[file:contents/breaking-out-of-nested-loops-in-java.md][从一个多层嵌套循环中直接跳出]] + break+label, 我觉得这个和 goto 就很类似了. 应当避免这样写. +- [X] [[file:contents/converting-string-to-int-in-java.md][如何将 String 转换为 Int]] + + Integer.valueOf(str); ==> Integer + + Integer.parseInt(str); ==> int (possible NumberFormatException) +- [X] [[file:contents/how-to-split-a-string-in-java.md][如何分割(split)string 字符串]] + + ~String[] parts = string.split("-");~ + + 需要注意的是,该方法的参数是个正则表达式, 要注意对某些字符做转码。 + 例如,.在正则表达式中表示任意字符,因此,如果你要通过.号做分割,需要这样写,split("\\.")或者split(Pattern.quote(".")) +- [X] [[file:contents/how-do-i-compare-strings-in-java.md][在 java 中如何对比(compare)string]] +- [X] [[file:contents/how-to-sort-a-mapkey-value-on-the-values-in-java.md][=Map=基于 Value 值排序]] + + 1: 使用 TreeMap,可以参考下面的代码 + + The TreeMap class implements the Map interface by using a tree. A + TreeMap provides an efficient means of storing key/value pairs in + sorted order, and allows rapid retrieval. + + 2: 先通过 linkedlist 排好序,再放到 LinkedHashMap 中 +- [X] [[file:contents/differences-between-hashmap-and-hashtable.md][HashMap 和 Hashtable 的区别]] + + Hashtable是同步的,加了synchronized锁,而HashMap不是 +- [X] [[file:contents/how-to-concatenate-two-arrays-in-java.md][如何便捷地将两个数组合到一起]] + #+BEGIN_SRC java + // method 1 + ArrayUtils.addAll(T[], T...) + + // method 2 + public Foo[] concat(Foo[] a, Foo[] b) { + int aLen = a.length; + int bLen = b.length; + Foo[] c= new Foo[aLen+bLen]; + System.arraycopy(a, 0, c, 0, aLen); + System.arraycopy(b, 0, c, aLen, bLen); + return c; + } + + // method 3 + public T[] concatenate (T[] a, T[] b) { + int aLen = a.length; + int bLen = b.length; + + @SuppressWarnings("unchecked") + T[] c = (T[]) Array.newInstance(a.getClass().getComponentType(), aLen+bLen); + System.arraycopy(a, 0, c, 0, aLen); + System.arraycopy(b, 0, c, aLen, bLen); + + return c; + } + // !!!! 注意,泛型的方案不适用于基本数据类型(int,boolean......) + #+END_SRC +- [X] [[file:contents/does-java-support-default-parameter-values.md][Java 是否支持默认的参数值]] + + builders: 使用创建者模式,你可以设定部分参数是有默认值,部分参数是可选的。如: + + 方法(构造函数)重载 + + null 的传递 + + 多参数方式 + #+BEGIN_SRC java + void foo(String a, Integer... b) { + Integer b1 = b.length> 0 ? b[0] : 0; + Integer b2 = b.length> 1 ? b[1] : 0; + //... + } + + foo("a"); + foo("a", 1, 2); + #+END_SRC + 如果不是同一类型, 就用 Object + cast . + + 使用 Map 作为方法中的参数 +- [X] [[file:contents/generating-random-integers-in-a-range-with-Java.md][Java 产生指定范围的随机数]] + + Math.random(): [0, 1) + + java.util.Random + + org.apache.commons.lang3.RandomUtils +- [X] [[file:contents/what-is-a-javabean-exactly.md][JavaBean 到底是什么]] + JavaBean 只是一个标准 + + 所有的属性是私有的(通过 getters/setters 处理属性) + + 一个公有的无参数的构造器 + + 实现了序列化(Serializable) + + 另外,一个 JavaBean 类和一个普通的类没有语法区别,如果遵循上面的标准 + 的话,一个类可以认为成 JavaBean 类。 + + 之所以需要 JavaBean,是因为这样预定义了一种类的格式,一些库能依据这 + 个约定的格式,来做一些自动化处理。举个例子,如果一个类库需要通过流来 + 处理你传递的任何对象,它知道它可以正常处理,因为这个对象是可序列化的。 + (假设这个类库要求你的对象是 JavaBeans) +- [ ] [[file:contents/difference-between-wait-and-sleep.md][wait() 和 sleep() 的区别]] +- [X] [[file:contents/how-do-i-call-one-constructor-from-another-in-java.md][能否在一个构造器中调用另一个构造器]] + #+BEGIN_SRC java + public class Foo { + private int x; + + public Foo() { + this(1); + } + + public Foo(int x) { + this.x = x; + } + } + #+END_SRC + + 请注意,在构造器中,你只能调用一次其他的构造器。并且调用其他构造器的 + 语句,必须是这个构造器的第一个语句。 +- [X] [[file:contents/does-finally-always-execute-in-java.md][=finally= 代码块总会被执行么]] + #+BEGIN_SRC java + try { + something(); + return success; + } catch (Exception e) { + return failure; + } finally { + System.out.println("i don't know if this will get printed out."); + } + // 只有以下情况 finally 不会被调用: + // + 当你使用 System.exit() 后 + // + 其他线程干扰了现在运行的线程(通过 interrupt 方法) + // + JVM 崩溃 (crash) 了 + #+END_SRC +- [X] [[file:contents/convert-a-string-to-an-enum-in-java.md][如何将 String 转换为 enum]] + + Blah.valueOf("A") 将会得到 Blah.A + + 静态方法 valueOf() 和 values() 不存在于源码中,而是在编译时创建 + + hack + #+BEGIN_SRC java + public static > T getEnumFromString(Class c, String string) { + if( c != null && string != null ) { + try { + return Enum.valueOf(c, string.trim().toUpperCase()); + } catch(IllegalArgumentException ex) {} + } + return null; + } + + public enum MyEnum { + ... + public static MyEnum fromString(String name) { + return getEnumFromString(MyEnum.class, name); + } + ... + } + #+END_SRC +- [X] [[file:contents/declare-array-in-java.md][在 Java 中声明数组]] + #+BEGIN_SRC java + // primtive type + int[] myIntArray = new int[3]; + int[] myIntArray = {1, 2, 3}; + int[] myIntArray = new int[]{1, 2, 3}; + + // string + String[] myStringArray = new String[3]; + String[] myStringArray = {"a", "b","c"}; + String[] myStringArray = new String[]{"a", "b", "c"}; + #+END_SRC +- [X] [[file:contents/what-is-reflection-and-why-is-it-useful.md][反射是什么及其用途]] + #+BEGIN_SRC java + Method method = foo.getClass().getMethod("dosomething",null); + method.invoke(foo,null); //调用foo的dosomething方法 + #+END_SRC + + 可以看看我的这个笔记 https://github.com/4ker/JavaAOP +- [X] [[file:contents/why-cant-i-switch-on-a-string.md][为什么不能用 string 类型进行 switch 判断]] + 在 JDK7 中,这个特性已经实现了。在编译阶段,以 string 作为 case 值的代码,会按照特定的模式,被转换为更加复杂的代码。最终的执行代码将是一些使用了 JVM 指令的代码。 + + 这是在说, java 7 之前是不可以的. +- [X] [[file:contents/comparing-java-enum-members-or-equals.md][比较 java 枚举成员使用 equal 还是 ==]] + + 如果你看过枚举的源码,你会发现在源码中,equals 也仅仅非常简单的 == + + 其实很简单, 因为 Enum 的 valueOf 方法是从自己的备选项里面枚举, 找到那个 enum 取出来的, 所以内存位置也是一样的. + + 还有一个区别是 null.equals 可能有风险, == 则没有 + + 总而言之,在枚举比较上使用 == , 因为: + - 能正常工作 + - 更快 + - 运行时是安全的 + - 编译期也是安全的 +- [X] [[file:contents/how-to-create-a-file-and-write-to-a-file-in-java.md][用 java 怎么创建一个文件并向该文件写文本内容]] + #+BEGIN_SRC java + // TEXT FILE + // method 1: print writer, text file + PrintWriter writer = new PrintWriter("the-file-name.txt", "UTF-8"); + writer.println("The first line"); + writer.println("The second line"); + writer.close(); + // method 2: array of lines to file + List lines = Arrays.asList("The first line", "The second line"); + Path file = Paths.get("the-file-name.txt"); + Files.write(file, lines, Charset.forName("UTF-8")); + //Files.write(file, lines, Charset.forName("UTF-8"), StandardOpenOption.APPEND); + + // BINARY + // method 3: FileOutputStream, binary + byte data[] = ... + FileOutputStream out = new FileOutputStream("the-file-name"); + out.write(data); + out.close(); + // method 4: FileOutputStream, binary + Path file = Paths.get("the-file-name"); + Files.write(file, data); + #+END_SRC +- [X] [[file:contents/what-is-a-serialversionuid-and-why-should-i-use-it.md][serialVersionUID 有什么作用?该如何使用?]] + + 对象的序列化主要有两种用途: + - 把对象序列化成字节码,保存到指定介质上 (如磁盘等) + - 用于网络传输 + + 可当我们增加 email 字段后,不作向后兼容。即放弃原来序列化到磁盘的 Person 类,这时我们可以将版本标识提高 + + serialVersionUID 就是控制版本是否兼容的,若我们认为修改的 Person 是向后兼容的, + 则不修改 serialVersionUID;反之,则提高 serialVersionUID 的值。再回到一开始的问题 +- [X] [[file:contents/why-is-java-vector-class-considered-obsolete-or-deprecated.md][为什么 Java 的 =Vector= 类被认为是过时的或者废弃的]] + + Vector 中对每一个独立操作都实现了同步,这通常不是我们想要的做法。 + + 总的来说,在大多数情况下,这种同步方法是存在很大缺陷的。正如 Mr Brain Henk 指出, + 你可以通过调用Collections.synchronizedList来装饰一个集合 - 事实上 Vector 将 "可变数组" 的集合实现 + 与 "同步每一个方法" 结合起来的做法是另一个糟糕的设计; +- [X] [[file:contents/how-does-the-java-for-each-loop-work.md][Java 的 foreach 循环是如何工作的]] + 用了 iterator + #+BEGIN_SRC java + // for (String item : someList) {System.out.println(item);} + for(Iterator i = someList.iterator(); i.hasNext(); ) { + String item = i.next(); + System.out.println(item); + } + #+END_SRC +- [X] [[/why-is-subtracting-these-two-times-in-1927-giving-a-strange-result.md][为什么相减这两个时间(1927 年)会得到奇怪的结果]] + 这是因为 1927 年 11 月 31 日上海的时区改变了。 观看此页获得更多关于 + 上海 1927 年的细节。 这个问题主要是由于在 1927 年 12 月 31 日的午夜, + 时钟回调了 5 分钟零 52 秒。 所以 "1927-12-31 23:54:08" 这个时间实际 + 上发生了两次,看上去 java 将这个时间解析为之后的那个瞬间。 因此出现 + 了这种差别。 + + 这只是美好但奇怪的世界时区中的一个插曲。 + + Shanghai Municipality (/mjʊ'nɪsə'pæləti/) 自治市 + + Daylight Saving Time (DST) Not Observed in Year 1927 + Shanghai observed China Standard Time (CST) all year. + + DST was not in use in 1927. +- [ ] [[file:contents/when-and-how-should-i-use-a-threadlocal-variable.md][该什么时候使用 ThreadLocal 变量,它是如何工作的]] + 一种可能的(也是常见的)使用情形是你不想通过同步方式(synchronized)访问非线程安全的对象(说的就是 SimpleDateFormat), 而是想给每个线程一个对象实例的时候。 例如 + #+BEGIN_SRC java + public class Foo + { + // SimpleDateFormat is not thread-safe, so give one to each thread + private static final ThreadLocal formatter = new ThreadLocal(){ + @Override + protected SimpleDateFormat initialValue() { + return new SimpleDateFormat("yyyyMMdd HHmm"); + } + }; + + public String formatIt(Date date) { + return formatter.get().format(date); + } + } + #+END_SRC +- [ ] [[file:contents/how-do-servlets-work-instantiation-shared-variables-and-multithreading.md][servlets 的运行原理]] +- [X] [[file:contents/how-can-i-generate-an-md5-hash.md][如何计算 MD5 值]] + 使用 MessageDigest 和 String 时,一定要显式声明你的数据编码类型。如 + 果你使用无参的 String.getBytes() , 它会以当前平台的默认编码来转换数 + 据。不同平台的默认编码可能是不同的,这可能会导致你的数据不一致。 + #+BEGIN_SRC java + import java.security.*; + + ... + byte[] bytesOfMessage = yourString.getBytes("UTF-8"); + MessageDigest md = MessageDigest.getInstance("MD5"); + byte[] thedigest = md.digest(bytesOfMessage); + #+END_SRC + 如果你的要计算的数据量很大,你可以循环使用 .update(byte[]) 方法来加载数据。加载完毕后用 .digest() 方法来得到计算出的 MD5 值。 +- [ ] [[file:contents/what-is-the-difference-between-a-soft-reference-and-a-weak-reference-in-java.md][Java 中软引用和弱引用的区别]] +- [ ] [[file:contents/what-is-the-difference-between-jsf-servlet-and-jsp.md][JSF, Servlet 和 JSP]] +- [X] [[file:contents/java-inner-class-and-static-nested-class.md][Java 内部类和嵌套静态类]] + 因此, 要实例化一个内部类对象, 必须先实例化外部类对象. 然后用这种语法来创建内部类对象: + + #+BEGIN_SRC java + OuterClass.InnerClass innerObject = outerObject.new InnerClass(); + #+END_SRC + + 这是什么鬼... + + #+BEGIN_SRC java + class A { + int t() { return 1; } + static A a = new A() { int t() { return 2; } }; + } + #+END_SRC +- [X] [[file:contents/whats-the-difference-between-component-repository-service-annotations-in.md][=@Component=, =@Repository=, =@Service= 的区别]] + 在 spring 集成的框架中,注解在类上的@Component,@Repository,@Service等注解能否被互换?或者说这些注解有什么区别? + + 在 Spring2.0 之前的版本中,@Repository注解可以标记在任何的类上,用来 + 表明该类是用来执行与数据库相关的操作(即 dao 对象),并支持自动处理 + 数据库操作产生的异常 + + 在 Spring2.5 版本中,引入了更多的 Spring 类注解: + @Component,@Service,@Controller。Component是一个通用的 Spring 容器管 + 理的单例 bean 组件。而@Repository, @Service, @Controller就是针对不同 + 的使用场景所采取的特定功能化的注解组件。 + + 因此,当你的一个类被@Component所注解,那么就意味着同样可以用 + @Repository, @Service, @Controller来替代它,同时这些注解会具备有更多 + 的功能,而且功能各异。 + + 最后,如果你不知道要在项目的业务层采用@Service还是@Component注解。那 + 么,@Service是一个更好的选择。 + + --- + + 这几个注解几乎可以说是一样的:因为被这些注解修饰的类就会被 Spring 扫 + 描到并注入到 Spring 的 bean 容器中。 + + 这里,有两个注解是不能被其他注解所互换的: + + @Controller 注解的 bean 会被 spring-mvc 框架所使用。 + + @Repository 会被作为持久层操作(数据库)的 bean 来使用 +- [X] [[file:contents/how-to-create-a-generic-array-in-java.md][如何创建泛型 java 数组]] + #+BEGIN_SRC java + public class GenSet { + private E[] a; + + public GenSet(Class c, int s) { + // 使用原生的反射方法,在运行时知道其数组对象类型 + @SuppressWarnings("unchecked") + final E[] a = (E[]) Array.newInstance(c, s); + this.a = a; + } + + E get(int i) { + return a[i]; + } + + //...如果传入参数不为E类型,那么强制添加进数组将会抛出异常 + void add(E e) {...} + } + #+END_SRC +*** [8/21] 编程技巧 +- [X] [[file:contents/avoiding-null-statements-in-java.md][去掉烦人的 =!=null=(判空语句)]] + + 用 Java 8 的 Optional 啊! 懒得看了. +- [X] [[file:contents/get-current-stack-trace-in-java.md][获取完整的堆栈信息]] + + 捕获了异常后,如何获取完整的堆栈轨迹(stack trace) + #+BEGIN_SRC java + // method 1 + String fullStackTrace = org.apache.commons.lang.exception.ExceptionUtils.getFullStackTrace(e); + + // method 2 + Thread.currentThread().getStackTrace(); + #+END_SRC +- [X] [[file:contents/initialization-of-an-arraylist-in-one-line.md][如何用一行代码初始化一个 ArrayList]] + #+BEGIN_SRC java + // good + ArrayList places = new ArrayList( + Arrays.asList("Buenos Aires", "Córdoba", "La Plata")); + + // works too. 匿名内部类 + ArrayList list = new ArrayList() {{ + add("A"); + add("B"); + add("C"); + }}; + #+END_SRC +- [X] [[file:contents/how-can-i-initialize-a-static-map.md][初始化静态 map]] + + #+BEGIN_SRC java -r + // 我使用static初始化器来创建一个固定长度的静态map + public class Test{ + private static final Map myMap; + static { + Map aMap = ...; + aMap.put(1,"one"); + aMap.put(2,"two"); + myMap = Collections.unmodifiableMap(aMap); (ref:h1507011118) + } + } + + // 我喜欢用Guava(是 Collection 框架的增强)的方法初始化一个静态的,不可改变的map + static fianl Map myMap = ImmutablMap.of( + 1,"one", + 2, "two" + ) + + // build + static fianl Map myMap = + new ImmutableMap.Builder() + .put("one", 1) + .put("two", 2) + .put("three", 3) + .build(); + #+END_SRC +- [X] [[file:contents/check-if-at-least-two-out-of-three-booleans-are-true.md][给 3 个布尔变量,当其中有 2 个或者 2 个以上为 true 才返回 true]] + + 这个智障答案... + + 我觉得 ~return ((a && b) || (b && c) || (a && c))~ 是最好的. +- [X] [[file:contents/whats-the-simplest-way-to-print-a-java-array.md][输出 Java 数组最简单的方式]] + #+BEGIN_SRC java + int[] intArray = new int[] {1, 2, 3, 4, 5}; + System.out.println(Arrays.toString(intArray)); + //输出: [1, 2, 3, 4, 5] + + String[] strArray = new String[] {"John", "Mary", "Bob"}; + System.out.println(Arrays.deepToString(strArray)); + //输出: [John, Mary, Bob] + + // Arrays.deepToString与Arrays.toString不同之处在于,Arrays.deepToString更适合打印多维数组 + #+END_SRC +- [X] [[file:contents/why-is-char-preferred-over-string-for-passwords-in-java.md][什么在 java 中存放密码更倾向于 =char= 而不是 String]] + + String是不可变的。虽然String加载密码之后可以把这个变量扔掉,但是字符 + 串并不会马上被GC回收,一但进程在GC执行到这个字符串之前被dump,dump出 + 的的转储中就会含有这个明文的字符串。那如果我去"修改"这个字符串,比如 + 把它赋一个新值,那么是不是就没有这个问题了?答案是否定的,因为String + 本身是不可修改的,任何基于String的修改函数都是返回一个新的字符串,原 + 有的还会在内存里。 + + 然而对于数组,你可以在抛弃它之前直接修改掉它里面的内容或者置为乱码, + 密码就不会存在了。但是如果你什么也不做直接交给gc的话,也会存在上面一 + 样的问题。 + + 所以,这是一个安全性的问题--但是,即使使用char[]也仅仅是降低了攻击者 + 攻击的机会,而且仅仅对这种特定的攻击有效。 +- [ ] [[file:contents/how-to-avoid-java-code-in-jsp-files.md][如何避免在 JSP 文件中使用 Java 代码]] +- [ ] [[file:contents/examples-of-gof-design-patterns-in-javas-core-libraries.md][Java 源码里的设计模式]] +- [ ] [[file:contents/how-to-generate-a-random-alpha-numeric-string.md][如何产生一个随机的字母数字串作为 session 的唯一标识符]] + + 如果允许产生的随机字符串是可猜测的(随机字符串比较都短,或者使用有缺陷 + 的随机数生成器),进而导致攻击者可能会劫持到会话的,可以使用一个相对简 + 单随机数生成代码,如下所示: +- [ ] [[file:contents/what-is-an-efficient-way-to-implement-a-singleton-in-java.md][如何创建单例]] + #+BEGIN_SRC java + // 预加载 + public class Foo { + + private static final Foo INSTANCE = new Foo(); + + private Foo() { + if (INSTANCE != null) { + throw new IllegalStateException("Already instantiated"); + } + } + + public static Foo getInstance() { + return INSTANCE; + } + } + + // 懒加载 + class Foo { + + private static Foo INSTANCE = null; + + private Foo() { + if (INSTANCE != null) { + throw new IllegalStateException("Already instantiated"); + } + } + + public static Foo getInstance() { + if (INSTANCE == null) { + INSTANCE = new Foo(); + } + return INSTANCE; + } + } + #+END_SRC +- [X] [[file:contents/implements-runnable-vs-extends-thread.md][实现 Runnable 接口 VS. 继承 Thread 类]] + + 在Java中,并发执行任务一般有两种方式: + + 实现Runnable接口 + + 继承Thread类 + + 一般而言,推荐使用方式(1),主要是由于大多数情况下,人们并不会特别去 + 关注线程的行为,也不会去改写Thread已有的行为或方法,仅仅是期望执行任 + 务而已。 因此,使用接口的方式能避免引入一些并不需要的东西,同时也不 + 会影响继承其他类,并使程序更加灵活。 + + 额外的tips: + + Runnable与Thread不是对等的概念 + + 在Thinking in Java中,作者吐槽过Runnable的命名,称其叫做Task更为合理。 + 在Java中,Runnable只是一段用于描述任务的代码段而已,是静态的概念,需要通过线程来执行。而Thread更像是一个活体,自身就具有很多行为,能够用来执行任务。 + + 仅仅当你确实想要重写(override)一些已有行为时,才使用继承,否则请使用接口。 + + 在Java 5之前,创建了Thread却没调用其start()方法,可能导致内存泄露。 +- [ ] [[file:contents/which-notnull-java-annotation-should-i-use.md][我应该用哪一个 =@NotNull= 注解]] +- [ ] [[file:contents/how-can-i-convert-a-stack-trace-to-a-string.md][怎样将堆栈追踪信息转换为字符串]] +- [ ] [[file:contents/dealing-with-java-lang-outofmemoryerror-permgen-space-error.md][如何处理 java.lang.outOfMemoryError PermGen space error]] +- [ ] [[file:contents/how-can-i-pad-an-integers-with-zeros-on-the-left.md][如何在整数左填充 0]] +- [ ] [[file:contents/is-null-check-needed-before-calling-instanceof.md][在调用 instanceof 前需要进行 null 检查吗]] +- [ ] [[file:contents/how-do-i-create-a-java-string-from-the-contents-of-a-file.md][如何从文件里读取字符串]] +- [ ] [[file:contents/iterating-through-a-collection-avoiding-concurrentmodificationexception-when-reiterating-through-a-collection-avoiding-concurrentmodificationexception-when-re.md][遍历集合时移除元素,怎样避免 ConcurrentModificationException 异常抛出]] +- [ ] [[file:contents/how-can-i-permanently-have-line-numbers-in-intellij.md][如何让 IntelliJ 编辑器永久性显示代码行数]] +- [ ] [[file:contents/how-can-i-create-an-executable-jar-with-dependencies-using-maven.md][如何使用 maven 把项目及其依赖打包为可运行 jar 包]] +*** 网络 +- [[file:contents/using-java-net-urlconnection-to-fire-and-handle-http-requests.md][如何使用 java.net.URLConnection 接收及发送 HTTP 请求]] +*** 性能 +- [[file:contents/when-to-use-linkedlist-over-arraylist.md][LinkedList、ArrayList 各自的使用场景,如何确认应该用哪一个呢?]] +- [[file:contents/stringbuilder-and-stringbuffer.md][StringBuilder 和 StringBuffer 有哪些区别呢]] +- [[file:contents/why-is-processing-a-sorted-array-faster-than-an-unsorted-array.md][为什么处理排序的数组要比非排序的快]] +- [[file:contents/creating-a-memory-leak-with-java.md][如何使用 Java 创建一个内存泄漏的程序]] +- [[file:contents/why-is-printing-b-dramatically-slower-than-printing.md][为什么打印"B"会明显的比打印"#"慢]] +*** 测试 +- [[file:contents/how-to-test-a-class-that-has-private-methods-fields-or-inner-classes.md][如何测试 private 方法,变量或者内部类]] +- [[file:contents/how-do-you-assert-that-a-certain-exception-is-thrown-in-junit-4-tests.md][JUnit4 如何断言确定异常的抛出]] +*** Android +- [[file:contents/download-a-file-with-android-and-showing-the-progress-in-a-progressdialog.md][在 Android 里面下载文件,并在 ProgressDialog 显示进度]] +- [[file:contents/is-there-a-unique-android-device-id.md][如何获取 Android 设备唯一 ID]] +- [[file:contents/android-sdk-installation-doesnt-find-jdk.md][安装 Android SDK 的时候找不到 JDK]] diff --git a/theme.setup b/theme.setup new file mode 100644 index 0000000..6487120 --- /dev/null +++ b/theme.setup @@ -0,0 +1 @@ +# -*- mode: org; -*-