首页 文章 精选 留言 我的

精选列表

搜索[知识管理],共10000篇文章
优秀的个人博客,低调大师

小知识 - JDK 奇数版本和偶数版本的区别(你用对了吗?)

Java CPU 和 PSU 版本解释 从 2014 年 10 月发布 Java SE 7 Update 71 (Java SE 7u71) 开始,Oracle 将在发布重要补丁更新 (CPU) 的同时发布相应的 Java SE 7 补丁集更新 (PSU)。 我应当选择哪个 Java 版本:CPU 还是 PSU? Oracle 强烈建议所有 Java SE 用户升级到相应版本系列的最新 CPU 版本。大多数用户应当选择 CPU 版本。 仅当用户受到版本说明中所述的该版本所修复的其他漏洞的影响时才应使用相应的 PSU 版本。 后续 CPU 版本将包含当前 PSU 的所有修复。鉴于此,组织应当测试其环境中的当前 PSU,这些修复将包含在下一个 CPU 中。 Java CPU 与 PSU 之间的区别? Java SE 重要补丁更新 (CPU) 包含安全漏洞修复和重要漏洞修复。Oracle 强烈建议所有 Java SE 用户及时升级到最新的 CPU 版本。Java SE CPU 版本号采用奇数编号(即 7u71、7u65 — 有关 Java SE 版本编号方式的详细信息,请点击这里)。 Java SE 补丁集更新 (PSU) 包含相应 CPU 中的所有修复以及其他非重要修复。仅当您受到该版本中其他漏洞的影响时才应当使用 Java PSU。版本说明列出了 Java SE PSU 中的其他修复。 CPU 版本的发布周期会改变吗? 与以往一样,根据常规Oracle 重要补丁更新计划,Java SE CPU 版本将在距 1 月、4 月、7 月和 10 月的第 17 日最近的星期二发布。 从 2014 年 10 月发布 Java SE 7u71 (CPU) 和 Java SE 7u72 (PSU) 开始,Oracle 计划为每个 Java SE 7 CPU 额外发布一个相应的 PSU。除了相应 CPU 中的重要修复之外,PSU 版本将为组织和开发人员提供一些非重要修复。 一句话:我们应该使用奇数版本 官方链接:https://www.oracle.com/technetwork/cn/java/javase/cpu-psu-explained-2331472-zhs.html

优秀的个人博客,低调大师

阿里云大数据ACP认证知识点梳理8——Graph 图计算

MaxCompute Graph是一套面向迭代的图计算处理框架。图计算作业使用图进行建模,图由点(Vertex)和边(Edge)组成,点和边包含权值(Value)。 MaxCompute Graph支持以下图编辑操作:1、修改点或边的权值。2、增加/删除点。3、增加/删除边。 通过迭代对图进行编辑、演化,最终求解出结果,典型应用有:PageRank,单源最短距离算法,K-均值聚类算法 等。您可以使用MaxCompute Graph提供的接口Java SDK编写图计算程序。 MaxCompute Graph能够处理的图必须是是一个由点(Vertex)和边(Edge)组成的有向图。由于MaxCompute仅提供二维表的存储结构,因此需要您自行将图数据分解为二维表格式存储在MaxCompute中。 在进行图计算分析时,使用自定义的GraphLo

优秀的个人博客,低调大师

阿里云大数据ACP认证知识点梳理1——产品特点(MAXCOMPUTE)

大数据计算服务(MaxCompute,原名ODPS)是一种快速、完全托管的GB/TB/PB级数据仓库解决方案。 MaxCompute服务于批量结构化数据的存储和计算,提供海量数据仓库的解决方案及分析建模服务。 MaxCompute支持SQL、MapReduce、Graph等计算类型及MPI迭代类算法。 TUNNEL是MaxCompute为您提供的数据传输服务,提供高并发的离线数据上传下载服务。支持每天TB/PB级别的数据导入导出,特别适合于全量数据或历史数据的批量导入。Tunnel 为您提供Java编程接口,并且在MaxCompute的客户端工具中,有对应的命令实现本地文件与服务数据的互通。 针对实时数据上传的场景,MaxCompute提供了延迟低、使用方便的DataHub服务,特别适用于增量数据的导入。DataHub还支持多种数据传输插

优秀的个人博客,低调大师

Java基础知识的全面巩固_note1(附各种demo code)

拜读《核心技术卷》,笔记之。 提纲 1.编译运行第一个程序2.使用floorMod求模3.关于Math4.1数据类型 4.2 变量注意事项5.数值类型之间的转换(主要注意精度损失):6.位运算7.字符串8.StringBuilder9.读取输入(控制平台)10.格式化输出11.文件输入与输出12.块作用域的注意事项13.一个while语句的Demo14.switch语句的case标签注意:15.大数值:BigInteger、BigDecimal 1.编译运行第一个程序 结构目录: 使用cmd编译: D:\>cd OK/corejava D:\OK\corejava>cd v1ch02/Welcome D:\OK\corejava\v1ch02\Welcome>javac Welcome.java D:\OK\corejava\v1ch02\Welcome>java Welcome Welcome to Core Java! ===================== D:\OK\corejava\v1ch02\Welcome> Welcome.java文件内容: /** * This program displays a greeting for the reader. * @version 1.30 2014-02-27 * @author Cay Horstmann */ public class Welcome { public static void main(String[] args) { String greeting = "Welcome to Core Java!"; System.out.println(greeting); for (int i = 0; i < greeting.length(); i++) System.out.print("="); System.out.println(); } } 上面的cmd中,javac程序是一个Java编译器,它将文件Welcome.java编译成Welcome.class.java程序启动Java虚拟机。虚拟机执行编译器放在class文件中的字节码。 2.使用floorMod求模 语法: floorMod(position + adjustment, modulus); package Test; import java.lang.Math; public class Havaatry { public static void main(String[] args) { // TODO 自动生成的方法存根 int hehe = Math.floorMod(2+15,12); System.out.println(hehe); } } 3.关于Math 三角函数 Math.sin Math.cos Math.tan Math.atan Math.atan2 对数 Math.exp Math.log Math.log10 两个常量 Math.PI Math.E 通过Javadoc进行具体查看: java的Math.pow: double y = Math.pow(x, a); //将y的值设置为x的a次幂。 4.1数据类型 长整型值后缀一个L或者l(如400000000000L)。 十六进制前缀0x或0X。 八进制前缀0,例如010对应八进制的8.显然八进制表示法容易混淆,建议最好不使用八进制常数。 Java 7 开始,可以用0b或0B写二进制数,如0B1001就是9.另外,同样是从Java 7 开始,还可以为数字字面量加下划线。如用1_000_000(或0b1111_0100_0010_0100_0000)表示一百万。这些下划线只为易读,Java编译器会去除这些下划线。 绝大部分应用程序都采用double类型,float类型的精度很难满足需求。float类型需要后缀F或f,否则默认浮点数值为double。 Double.POSITIVE_INFINITY、Double.NEGATIVE_INFINITY、Double.NaN三个常量分别表示正无穷大、负无穷大、NaN(不是一个数字,计算0/0或者负数的平方根结果为NaN)。 boolean类型只有false和true两个值,用来判定逻辑条件。整型值和布尔值之间不能进行相互转换。在C++中,数值甚至指针可以代替boolean值,值0相当于布尔值false,非0值相当于布尔值true,在Java中不可以! final表示的变量只能被赋值一次,一旦被赋值就不能再更改。 4.2 变量注意事项 声明/定义 const和final 5.数值类型之间的转换(主要注意精度损失): 上图有6个实心箭头,表示无信息丢失的转换,有3个虚箭头,表示可能有精度损失的转换。比如下面的123 456 789是一个大整数,位数超过了float类型所能表达的位数,在转换的时候,将会得到同样大小的结果(注意底层是用二进制存储数据的),但却失去了一定的精度。 强制类型转换:会丢失精度 double x = 9.997; int nx = (int) x; 舍入运算: double x = 9.997; int nx = (int) Math.round(x); 6.位运算 &(“and”) | (“or”) ^(“xor”) ~(“not”) 这些运算符按位模式处理。例如,如果n是一个整数变量,而且用二进制表示的n从右边数第4位为1,则 int fourthBItFromRight = (n & 0b1000) / 0b1000; 会返回1(结果递等为0b1000 / 0b1000),否则返回0(递等为 0b 0000 / 0b1000)。 7.字符串 (参考) 没有内置的字符串类型,标准库中提供了一个预定义类,String,例如: String greeting = "Hello"; 每个用双引号括起来的字符串都是 String 类的一个实例 <1>子串(substring方法) String greeting = "Hello"; String s = greeting.substring(0,3); //Hel,不包含3,从0开始计数 <2>拼接(+) System.out.println("The answer is"+answer); 使用定界分隔符(join): String all = String.join("/","S","M","L","XL"); //"S/M/L/XL" <3>不可变字符串(例:将Hello改为Help!) String greeting = "Hello"; greeting = greeting.substring(0,3)+"p!"; 将来自文件或键盘的单个字符或短的字符串汇集成字符串 <4>检测字符串是否相等:(equals 方法) s.equals(t) //比较字符串s和t,返回true或false 检测字符串是否相等,不区分大小写(equalsIgnoreCase 方法) "Hello".equals("hello") //返回false "Hello".equalsIgnoreCase("hello") //返回true 双等号(==)只能确定两个字符串是否放置在线程池中的同一个位置上 <5>空串与null串 检测空串(""): if (str.length() == 0) 或 if (str.equals("")) null表示目前没有任何对象与该变量关联。检测方法: if (str == null) 检测一个字符串既不是null,也不为空: if (str != null && str.length() != 0) 先检测str不为null,如果在一个null值上调用方法,会出现错误 String类关键方法: 8.StringBuilder 使用: 1.构建一个空的字符串构建器 : StringBuilder builder = new StringBuilder(); 2.加入字符或字符串 builder.append(ch) ; //appends a single character builder.append(str) ; // appends a string 3.在需要构建字符串时就凋用 toString 方法,得到String对象: String completedString = builder.toString(); StringBuilder类关键方法: 9.读取输入 Demo 代码中的方法均以Enter作为结束: import java.util.*; /** * This program demonstrates console input. * @version 1.10 2004-02-10 * @author Cay Horstmann */ public class InputTest { public static void main(String[] args) { Scanner in = new Scanner(System.in); // get first input System.out.print("What is your name? "); String name = in.nextLine();//读取一行,可以读入空格 // get second input System.out.print("How old are you? "); int age = in.nextInt();//读取一个整数 // display output on console System.out.println("Hello, " + name + ". Next year, you'll be " + (age + 1)); //读取一个单词 String s = in.next(); //读取一个浮点数 double d = in.nextDouble(); System.out.println("s = " + s + ". d = " + d); } } 要想读取一个整数,就调用nextInt()方法 如:int age = in.nextInt(); next()输入不能隔着空格,不然会报错: Scanner关键API: 10.格式化输出 package Test; import java.lang.Math; public class Havaatry { public static void main(String[] args) { // TODO 自动生成的方法存根 System.out.printf("%f \n",10000.0/3.0); System.out.printf("%.2f \n",10000.0/3.0); System.out.printf("%,.2f \n",10000.0/3.0); System.out.printf("%+.2f \n",10000.0/3.0); System.out.printf("% .2f \n",10000.0/3.0); System.out.printf("%(.2f \n",-10000.0/3.0); System.out.printf("%#f \n",3333.); } } Date类和相关的格式化选项;格式包括两个字母,以t开始,以表3-7中的任意字母结束: Demo: System.out.printf("%1$s %2$tB %2$te, %2$tY \n", "Due date:", new Date()); System.out.printf("%s %tB %<te, %<tY", "Due date:", new Date()); 格式说明语法图: 11.文件输入与输出 要想对文件进行读取,就需要一个用File对象构造一个Scanner对象,如下所示: Scanner in = new Scanner(Paths.get("myfile.txt"),"UTF-8"); !!!!!!!在这之后,就可以利用前面介绍的任何一个Scanner方法对文件进行读取 !!!!!!!"UTF-8"乃字符编码,如果省略了这个参数,则会使用运行这个Java程序的机器的“默认编码”。这不是一个好主意, 如果在不同的机器上运行这个程序,可能会有不同的表现。 注意: 要想写入文件就需要构建一个PrintWriter对象,在构造器中,只需要提供文件名: PrintWriter out = new PrintWriter("myfile.txt","UTF-8"); 如果文件不存在,创建该文件。可以像输出到System.out一样使用print、println以及printf命令。 本节相关API 12.块作用域的注意事项 13.一个while语句的Demo: 首先计算退休账户中的余额,然后再询问是否打算退休,只要用户回答“N”,循环就重复执行。这是一个需要至少执行一次循环的很好示例,因为用户必须先看到余额才能知道是否满足退休所用。 import java.util.*; /** * This program demonstrates a <code>do/while</code> loop. * @version 1.20 2004-02-10 * @author Cay Horstmann */ public class Retirement2 { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.print("How much money will you contribute every year? "); double payment = in.nextDouble(); System.out.print("Interest rate in %: "); double interestRate = in.nextDouble(); double balance = 0; int year = 0; String input; // update account balance while user isn't ready to retire do { // add this year's payment and interest balance += payment; double interest = balance * interestRate / 100; balance += interest; year++; // print current balance System.out.printf("After year %d, your balance is %,.2f%n", year, balance); // ask if ready to retire and get input System.out.print("Ready to retire? (Y/N) "); input = in.next(); } while (input.equals("N")); } } 执行结果: How much money will you contribute every year? 30 Interest rate in %: 0.3 After year 1, your balance is 30.09 Ready to retire? (Y/N) N After year 2, your balance is 60.27 Ready to retire? (Y/N) N After year 3, your balance is 90.54 Ready to retire? (Y/N) N After year 4, your balance is 120.90 Ready to retire? (Y/N) N After year 5, your balance is 151.36 Ready to retire? (Y/N) N After year 6, your balance is 181.90 Ready to retire? (Y/N) N After year 7, your balance is 212.54 Ready to retire? (Y/N) N After year 8, your balance is 243.26 Ready to retire? (Y/N) Y 14.switch语句的case标签注意: 15.大数值:BigInteger、BigDecimal 如果基本的整数和浮点数精度不能够满足需求,那么可以使用java.math包中的两个很有用的类:BigInteger和BigDecimal。这两个类可以处理包含任意长度数字序列的数值。BigInteger类实现了任意精度的整数运算,BigDecimal实现了任意精度的浮点数运算。 使用静态的valueOf方法可以将普通的数值转换为大数值: BigInteger a = BigInteger.valueOf(100); 遗憾的是,不能使用人们熟悉的算术运算符(如:+和 * )处理大数值。而需要使用大数值类中的add和multiply方法。 BigInteger c = a.add(b); / / c = a + b BigInteger d = c.multiply(b.add(BigInteger.valueOf(2))); / / d = c * ( b + 2 ) 下面上一个例子,先用普通数据类型写一个(排列组合的)组合算法,其中变量k为欲取数,n为总数: import java.util.*; /** * This program demonstrates a <code>for</code> loop. * @version 1.20 2004-02-10 * @author Cay Horstmann */ public class LotteryOdds { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.print("How many numbers do you need to draw? "); int k = in.nextInt(); System.out.print("What is the highest number you can draw? "); int n = in.nextInt(); /* * compute binomial coefficient n*(n-1)*(n-2)*...*(n-k+1)/(1*2*3*...*k) */ int lotteryOdds = 1; for (int i = 1; i <= k; i++) lotteryOdds = lotteryOdds * (n - i + 1) / i; System.out.println("Your odds are 1 in " + lotteryOdds + ". Good luck!"); } } 测试——组合10中取2,结果为45: 下面用大数值进行计算: import java.math.*; import java.util.*; /** * This program uses big numbers to compute the odds of winning the grand prize in a lottery. * @version 1.20 2004-02-10 * @author Cay Horstmann */ public class BigIntegerTest { public static void main(String[] args) { Scanner in = new Scanner(System.in); System.out.print("How many numbers do you need to draw? "); int k = in.nextInt(); System.out.print("What is the highest number you can draw? "); int n = in.nextInt(); /* * compute binomial coefficient n*(n-1)*(n-2)*...*(n-k+1)/(1*2*3*...*k) */ BigInteger lotteryOdds = BigInteger.valueOf(1); for (int i = 1; i <= k; i++) lotteryOdds = lotteryOdds.multiply(BigInteger.valueOf(n - i + 1)).divide( BigInteger.valueOf(i)); System.out.println("Your odds are 1 in " + lotteryOdds + ". Good luck!"); } } 比较: lotteryOdds = lotteryOdds * (n - i + 1) / i; 跟 lotteryOdds = lotteryOdds.multiply(BigInteger.valueOf(n - i + 1)).divide(BigInteger.valueOf(i)); 关键API:

优秀的个人博客,低调大师

学习Java基础知识,打通面试关~十二接口与抽象类

在我们Java开发的过程中,接口使我们经常使用到。但是我们也会用到抽象类。那么我们在开发的时,具体应该怎么选择呢?这两者有什么区别?我们今天就来学习下。 抽象类 抽象类顾名思义就是不能实例化的类,我们在创建的时候会使用abstract 来创建。在抽象类中含有无具体实现的方法,所以我们在使用的时候不能使用该类来创建对象。 抽象类在表面上普通的类没有区别,可以有多个抽象方法,当然也可以没有抽象方法。 抽象类的实现主要是为了提供代码复用的目的。 抽象类前面的修饰除了abstract ,还有有public,protected,缺省情况下是public。不能是private.不然子类不能继承父类。 我们子类在继承抽象类时,子类必须实现父类的抽象方法,否则 ,子类也必须定义为抽象类。 public abstract class Abstorct { //方法声明为抽象的。 public abstract void add(); } public class AbstorctImpl extends Abstorct { @Override public void add() { } } 接口 编程中,接口我们经常使用,利用它达到API定义与实现分离的目的。 在Java中,是没有多继承这一实现的,但是我们可以使用接口来达到这个目的。方便我们去实现我们想要的目的。 接口中的变量总是被隐式指定为public static final 变量。 并且方法也是被隐式的定义为public abstract。接口中的方法必须都是抽象方法。 在java8以后,接口中也有了默认的实现方法。 //java集合中一个默认实现的方法。 public interface Collection<E> extends Iterable<E> { default boolean removeIf(Predicate<? super E> filter) { Objects.requireNonNull(filter); boolean removed = false; final Iterator<E> each = iterator(); while (each.hasNext()) { if (filter.test(each.next())) { each.remove(); removed = true; } } return removed; } } 两者不同点 两者一个是类一个是接口,从子类来实现或者继承时,实现就不同,继承类java中只能单继承。 抽象类是事务的抽象,比如我们对于一个动物的描述,人和猴都有相似的东西,可以抽象出来共同的特征。 抽象类 是一个 has-a的关系。接口是is-a的关系。比如猴是否能跳,能跳跃,那么就能实现该接口,不能实现则不能实现。 接口中不能含有静态代码块和静态方法,但是抽象类是可以存在静态代码块和静态方法的。 接口中的成员变量默认是public static final 类型的。抽象函数中的成员可以是各个类型的。 我们在程序中如果对接口进行增加方法,那么子类实现也得增加其实现方法 不可取,但是java8以后增加了默认方法的实现。而抽象类中添加了非抽象方法,子类只会享受其能力的扩展,不用担心编译出现问题。 简单了解下抽象方法和接口,让我们在编程的时候更加享受其特性带来的方便。在选择上可以有更多的选择。 原文发布时间为:2018-07-01本文作者:mengrui本文来自云栖社区合作伙伴“LuckQI”,了解相关信息可以关注“LuckQI”。

优秀的个人博客,低调大师

超详细的Java面试题总结(一)之Java基础知识

原文在我的博客上:原文博客地址 最近在备战面试的过程中,整理一下面试题。大多数题目都是自己手敲的,网上也有很多这样的总结。自己感觉总是很乱,所以花了很久把自己觉得重要的东西总结了一下。 面向对象和面向过程的区别 面向过程: 优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。缺点:没有面向对象易维护、易复用、易扩展面向对象: 优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护缺点:性能比面向过程低 Java语言有哪些特点? 1,简单易学;2,面向对象(封装,继承,多态);3,平台无关性(Java虚拟机实现平台无关性);4,可靠性;5,安全性;6,支持多线程(C++语言没有内置的多线程机制,因此必须调用操作系统的多线程功能来进行多线程程序设计,而Java语言却提供了多线程支持);7,支持网络编程并且很方便(Java语言诞生本身就是为简化网络编程设计的,因此Java语言不仅支持网络编程而且很方便);8,编译与解释并存; 什么是字节码?采用字节码的最大好处是什么?什么Java是虚拟机? 先看下java中的编译器和解释器: Java中引入了虚拟机的概念,即在机器和编译程序之间加入了一层抽象的虚拟的机器。这台虚拟的机器在任何平台上都提供给编译程序一个的共同的接口。编译程序只需要面向虚拟机,生成虚拟机能够理解的代码,然后由解释器来将虚拟机代码转换为特定系统的机器码执行。在Java中,这种供虚拟机理解的代码叫做字节码(即扩展名为.class的文件),它不面向任何特定的处理器,只面向虚拟机。每一种平台的解释器是不同的,但是实现的虚拟机是相同的。Java源程序经过编译器编译后变成字节码,字节码由虚拟机解释执行,虚拟机将每一条要执行的字节码送给解释器,解释器将其翻译成特定机器上的机器码,然后在特定的机器上运行,这就是上面提到的Java的特点的编译与解释并存的解释。 Java源代码---->编译器---->jvm可执行的Java字节码(即虚拟指令)---->jvm---->jvm中解释器----->机器可执行的二进制机器码---->程序运行。 采用字节码的好处: Java语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以Java程序运行时比较高效,而且,由于字节码并不专对一种特定的机器,因此,Java程序无须重新编译便可在多种不同的计算机上运行。 什么是Java虚拟机 任何一种可以运行Java字节码的软件均可看成是Java的虚拟机(JVM) 什么是Java程序的主类?应用程序和小程序的主类有何不同? 一个程序中可以有多个类,但只能有一个类是主类。在Java应用程序中,这个主类是指包含main()方法的类。而在Java小程序中,这个主类是一个继承自系统类JApplet或Applet的子类。应用程序的主类不一定要求是public类,但小程序的主类要求必须是public类。主类是Java程序执行的入口点。 什么是JDK?什么是JRE? JDK:顾名思义它是给开发者提供的开发工具箱,是给程序开发者用的。它除了包括完整的JRE(Java Runtime Environment),Java运行环境,还包含了其他供开发者使用的工具包。 JRE:普通用户而只需要安装JRE(Java Runtime Environment)来 来运行Java程序。而程序开发者必须安装JDK来编译、调试程序。 环境变量Path和ClassPath的作用是什么?如何设置这两个环境变量? Java环境变量PATH和CLASSPATH - 简书 http://www.jianshu.com/p/d63b099cf283 Java应用程序与小程序之间有那些差别? 简单说应用程序是从主线程启动(也就是main()方法)。applet小程序没有main方法,主要是嵌在浏览器页面上运行(调用init()线程或者run()来启动),嵌入浏览器这点跟flash的小游戏类似。 字符型常量和字符串常量的区别 1) 形式上:字符常量是单引号引起的一个字符 字符串常量是双引号引起的若干个字符2) 含义上:字符常量相当于一个整形值(ASCII值),可以参加表达式运算字符串常量代表一个地址值(该字符串在内存中存放位置)3) 占内存大小字符常量只占一个字节字符串常量占若干个字节(至少一个字符结束标志) Java语言采用何种编码方案?有何特点? Java语言采用Unicode编码标准,Unicode(标准码),它为每个字符制订了一个唯一的数值,因此在任何的语言,平台,程序都可以放心的使用。 构造器Constructor是否可被override 在讲继承的时候我们就知道父类的私有属性和构造方法并不能被继承,所以Constructor也就不能被override,但是可以overload,所以你可以看到一个类中有多个构造函数的情况。 重载和重写的区别 重载:发生在同一个类中,方法名必须相同,参数类型不同、个数不同、顺序不同,方法返回值和访问修饰符可以不同,发生在编译时。 重写:发生在父子类中,方法名、参数列表必须相同,返回值小于等于父类,抛出的异常小于等于父类,访问修饰符大于等于父类;如果父类方法访问修饰符为private则子类中就不是重写。 java 面向对象三大特性(封装,继承,多态)以及抽象、接口的介绍,访问控制符public,protected,private,以及默认的区别 https://www.2cto.com/kf/201605/509637.html java中equals方法的用法以及==的用法 http://www.cnblogs.com/bluestorm/archive/2012/03/02/2377615.html> String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的? 可变性 String类中使用字符数组保存字符串,private final char value[],所以string对象是不可变的。StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串,char[]value,这两种对象都是可变的。线程安全性 String中的对象是不可变的,也就可以理解为常量,线程安全。AbstractStringBuilder是StringBuilder与StringBuffer的公共父类,定义了一些字符串的基本操作,如expandCapacity、append、insert、indexOf等公共方法。StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。StringBuilder并没有对方法进行加同步锁,所以是非线程安全的。性能 每次对String 类型进行改变的时候,都会生成一个新的String对象,然后将指针指向新的String 对象。StringBuffer每次都会对StringBuffer对象本身进行操作,而不是生成新的对象并改变对象引用。相同情况下使用StirngBuilder 相比使用StringBuffer 仅能获得10%~15% 左右的性能提升,但却要冒多线程不安全的风险。对于三者使用的总结: 如果要操作少量的数据用 = String单线程操作字符串缓冲区 下操作大量数据 = StringBuilder多线程操作字符串缓冲区 下操作大量数据 = StringBuffer 自动装箱与拆箱 装箱:将基本类型用它们对应的引用类型包装起来; 拆箱:将包装类型转换为基本数据类型; Java使用自动装箱和拆箱机制,节省了常用数值的内存开销和创建对象的开销,提高了效率,由编译器来完成,编译器会在编译期根据语法决定是否进行装箱和拆箱动作。 类、方法、成员变量和局部变量的可用修饰符 - http://blog.csdn.net/yttcjj/article/details/6939239 在一个静态方法内调用一个非静态成员为什么是非法的? 由于静态方法可以不通过对象进行调用,因此在静态方法里,不能调用其他非静态变量,也不可以访问非静态变量成员。 在Java中定义一个不做事且没有参数的构造方法的作用 Java程序在执行子类的构造方法之前,如果没有用super()来调用父类特定的构造方法,则会调用父类中“没有参数的构造方法”。因此,如果父类中只定义了有参数的构造方法,而在子类的构造方法中又没有用super()来调用父类中特定的构造方法,则编译时将发生错误,因为Java程序在父类中找不到没有参数的构造方法可供执行。解决办法是在父类里加上一个不做事且没有参数的构造方法。 import java和javax有什么区别 http://www.cnblogs.com/EasonJim/p/6993139.html 接口和抽象类的区别是什么? 1.接口的方法默认是public,所有方法在接口中不能有实现,抽象类可以有非抽象的方法2.接口中的实例变量默认是final类型的,而抽象类中则不一定3.一个类可以实现多个接口,但最多只能实现一个抽象类4.一个类实现接口的话要实现接口的所有方法,而抽象类不一定5.接口不能用new实例化,但可以声明,但是必须引用一个实现该接口的对象从设计层面来说,抽象是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。 成员变量与局部变量的区别有那些? 从语法形式上,看成员变量是属于类的,而局部变量是在方法中定义的变量或是方法的参数;成员变量可以被public,private,static等修饰符所修饰,而局部变量不能被访问控制修饰符及static所修饰;成员变量和局部变量都能被final所修饰; 从变量在内存中的存储方式来看,成员变量是对象的一部分,而对象存在于堆内存,局部变量存在于栈内存 从变量在内存中的生存时间上看,成员变量是对象的一部分,它随着对象的创建而存在,而局部变量随着方法的调用而自动消失。 成员变量如果没有被赋初值,则会自动以类型的默认值而赋值(一种情况例外被final修饰但没有被static修饰的成员变量必须显示地赋值);而局部变量则不会自动赋值。 创建一个对象用什么运算符?对象实体与对象引用有何不同? new运算符,new创建对象实例(对象实例在堆内存中),对象引用指向对象实例(对象引用存放在栈内存中)。一个对象引用可以指向0个或1个对象(一根绳子可以不系气球,也可以系一个气球);一个对象可以有n个引用指向它(可以用n条绳子系住一个气球) 什么是方法的返回值?返回值在类的方法里的作用是什么? 方法的返回值是指我们获取到的某个方法体中的代码执行后产生的结果!(前提是该方法可能产生结果)。返回值的作用:接收出结果,使得它可以用于其他的操作! 一个类的构造方法的作用是什么?若一个类没有声明构造方法,改程序能正确执行吗?为什么? 主要作用是完成对类对象的初始化工作。可以执行。因为一个类即使没有声明构造方法也会有默认的不带参数的构造方法。 构造方法有哪些特性? 1,名字与类名相同;2,没有返回值,但不能用void声明构造函数;3,生成类的对象时自动执行,无需调用。 静态方法和实例方法有何不同? 静态方法和实例方法的区别主要体现在两个方面: 在外部调用静态方法时,可以使用"类名.方法名"的方式,也可以使用"对象名.方法名"的方式。而实例方法只有后面这种方式。也就是说,调用静态方法可以无需创建对象。 静态方法在访问本类的成员时,只允许访问静态成员(即静态成员变量和静态方法),而不允许访问实例成员变量和实例方法;实例方法则无此限制 对象的相等与指向他们的引用相等,两者有什么不同? 对象的相等 比的是内存中存放的内容是否相等而 引用相等 比较的是他们指向的内存地址是否相等。 在调用子类构造方法之前会先调用父类没有参数的构造方法,其目的是? 帮助子类做初始化工作。 什么是多态机制?Java语言是如何实现多态的?

优秀的个人博客,低调大师

Android知识点:process属性、openOrCreateDatabase、URLEncoder.encode、垃圾回收、 缓存处理...

1.process属性: 在清单里为activity或者serveice配置process属性,可以指定在某一个包名的线程中执行,而不是当前的包名的线程。 1 android:process= "com.rongqin.test" 2.openOrCreateDatabase方法: 通过openOrCreateDatabase方法可以修改数据库存储路径。 1 SQLiteDatabase.openOrCreateDatabase(file, factory); 参考资料:http://blog.csdn.net/wangqilin8888/article/details/7903048 3.解决url汉字乱码的方法: URLEncoder.encode(String)方法是对url中的中文参数经行编码的,可以解决乱码的问题。 1 2 3 4 5 6 7 8 9 10 public class TestUrlEncode { public static void main(String[] args) { String url = "http://www.xinboedu.com/" ; String getParam = "?key1=阿斯顿" ; String newUrl = URLEncoder.encode(getParam); System.out.println(newUrl); //打印结果:%3Fkey1%3D%E9%98%BF%E6%96%AF%E9%A1%BF } } 4.flag_activity_new_task: 启动一个程序,可以主界面点击图标进入,也可以从一个程序中跳转过去(区别是根据activity在manifest里面的配置,这个activity可能会放在不同的task栈里面)。 如果intent设置了flag_activity_new_task,跟从图标启动进入的效果一样,即重建一个栈,否则就是把任务加到自己的栈中。 5.垃圾回收(GC:Gabage Collection)中如何彻底释放list容器对象: 1 2 3 4 5 6 7 private ArrayList<List> list = new ArrayList<List>(); public void onDestroy() { super .onDestroy(); list.clear(); //先清除list里的元素,清除对元素的引用 list = null ; //清除对list的引用 } 6.缓存的优化处理: 1.可以优先考虑分页加载、图片压缩等 2.另外可以通过一二级缓存,在将bitmap对象加入到二级缓存里前,先通过bmp.recycle()方法在内存中释放掉 3.惰性加载 4.弱引用 1 2 3 4 5 6 public void ruo() { WeakReference<MediaPlayer> player = new WeakReference<MediaPlayer>( new MediaPlayer()); MediaPlayer mediaPlayer = player.get(); mediaPlayer.start(); } 7.断点续传的原理: 1.append方法的运用 2.randomAccessFile(需要用到这个类,可以读取到文件字段里的任意位置) 3.下载的字节数,存到数据库里,在get或post请求服务端 本文转自 glblong 51CTO博客,原文链接:http://blog.51cto.com/glblong/1248359,如需转载请自行联系原作者

资源下载

更多资源
Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册