接之前的笔记:Java基础知识(三)
常见的runtime exception
- NullPointerException
- ArrayIndexOutOfBoundsException
- ClassCastException
- IllegalArgumentException
- ArithmeticException:算术运算中,除数是0
- NoClassDefFoundException
- OutOfMemoryException
J2EE简介
因为我最近从事的是Android程序员的工作,所以对J2EE目前以了解为主。
- J2EE利用Java2平台用来解决企业解决方案的开发,布署和管理等复杂问题的体系结构,它在J2SE基础上提供了对JDBC(数据库连接) api, 数据模式安全,提供对Http Servlets, XML API, EJB( JAVA中的商业应用组件技术)等的强有力的支持,J2EE体系结构提供中层间集成框架使得应用系统具有高可用性,高可靠性以及可扩展性的优点,并降底了维护的费用,利用统一的平台开发。
J2EE的优势:
- 由于J2EE具有广泛的业界标准,又有很多的供应商的支持,这些供应商提供了很多能在J2EE可移植平台上升极的方案跟投资,使得用户可以原有系统上升极他们原有的系统,不必去重新定制一个企业解决方案,节省了大量的时间跟投资费用;
- 可伸缩性:由于J2EE是平台可移植的,他所开发的系统可以任务系统进行开发跟布暑跟维护,我们的系统应该能够满足不断增多的用户在系统进行商业操作,需要不断增对服务器平台进行各方案的硬件升级,比如CPU,硬盘容量,内存等扩展,由于服务器平台的限制性,应用系统当访问越来越大时,就需要考滤高性能,能扩容更多CPU的平台上,J2EE供应商提供了更为广泛的负载均衡解决方案,为J2EE平系系统提供更有安全可靠的运行保障;
- 稳定的可靠性:J2EE的平台可移植特点,使J2EE系统能方便的运到任何操作系统和硬件,为系统全天候的不间断的运行提供保障!保障企业及各类型客户及用户稳定的商业操作,减小损失!
- 支持异构,快速开发:J2EE体系结构具有广泛的供应商支持,可以提供例如,缓存组件,状态组件等等通用的组件,方便开发人员使用,而使得开发者可以把时间放在逻辑业务的开发上。
J2EE的结构:
- J2EE安全模型:配置Web组件及 Enterprise JavaBeans(EJB)组件,使得角色只能访问特定的资源,由于配置中声音用户与角色的可被激活的方法,因此开发者不必编写加强安全性的规则;
- J2EE事务管理:模型组成一个事务中多个方法的关系,当用户请求一个Enterprise beans中的方法,容器就介入事务管理,因为是容器管理事务,所以不必界面事务的边界,容器将读取配置文件的javabeans 中相关事务属性,并处理;
- JNDI寻址:服务为系统的多重目录跟名子提供一个统一的接口,这样应用程序可以找到目录跟名子;
- J2EE远程连接,用于简化用户访问Beans中的方法(Bean被创建后)
- 生存周期管理:用于创建跟移除Enterprise beans, Enterprise bean在一个周期中会经历几个状态,容器创建enterprise bean, 并在可用实例池与状态中移动它,并最终移除它,即可调可调用enterprise bean的create与remove,但后台最后也将执行这些操作;
- 三大框架
- Struts是一个基于Sun J2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。Struts能充分满足应用开发的需求,简单易用,敏捷迅速。Struts把Servlet、JSP、自定义标签和信息资源(message resources)整合到一个统一的框架中,开发人员利用其进行开发时不用再自己编码实现全套MVC模式,极大的节省了时间,所以说Struts是一个非常不错的应用框架。
- Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序实用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。
- Spring是一个解决了许多在J2EE开发中常见的问题的强大框架。Spring提供了管理业务对象的一致方法并且鼓励了注入对接口编程而不是对类编程的良好习惯。Spring的架构基础是基于使用JavaBean属性的Inversion of Control容器。然而,这仅仅是完整图景中的一部分:Spring在使用IoC容器作为构建完关注所有架构层的完整解决方案方面是独一无二的。Spring提供了唯一的数据访问抽象,包括简单和有效率的JDBC框架,极大的改进了效率并且减少了可能的错误。Spring的数据访问架构还集成了Hibernate和其他O/R mapping解决方案。Spring还提供了唯一的事务管理抽象,它能够在各种底层事务管理技术,例如JTA或者JDBC事务提供一个一致的编程模型。Spring提供了一个用标准Java语言编写的AOP框架,它给POJOs提供了声明式的事务管理和其他企业事务–如果你需要–还能实现你自己的aspects。这个框架足够强大,使得应用程序能够抛开EJB的复杂性,同时享受着和传统EJB相关的关键服务。Spring还提供了可以和IoC容器集成的强大而灵活的MVC Web框架。
二分查找法
折半查找的算法思想是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小于该中点元素,则将待查序列缩小为左半部分,否则为右半部分。通过一次比较,将查找区间缩小一半。 折半查找是一种高效的查找方法。它可以明显减少比较次数,提高查找效率。但是,折半查找的先决条件是查找表中的数据元素必须有序。
// 二分查找递归实现(常问)
public static int binSearch(int srcArray[], int start, int end, int key) {//参数为4个
int mid = (end - start) / 2 + start;
if (srcArray[mid] == key) {
return mid;
}
if (start >= end) {
return -1;
} else if (key > srcArray[mid]) {
return binSearch(srcArray, mid + 1, end, key);
} else if (key < srcArray[mid]) {
return binSearch(srcArray, start, mid - 1, key);
} //没有循环了
return -1;
}
// 二分查找普通循环实现
public static int binSearch(int srcArray[], int key) {
int mid = srcArray.length / 2;
if (key == srcArray[mid]) {
return mid;
}
int start = 0;
int end = srcArray.length - 1;
while (start <= end) {
mid = (end - start) / 2 + start;
if (key < srcArray[mid]) {
end = mid - 1;
} else if (key > srcArray[mid]) {
start = mid + 1;
} else {
return mid;
}
}
return -1;
}
}
Java中的原始数据类型都有哪些,它们的大小及对应的封装类是什么
共有8个。
byte——1 byte——Byte
short——2 bytes——Short
int——4 bytes——Integer
long——8 bytes——Long
float——4 bytes——Float
double——8 bytes——Double
char——2 bytes——Character
boolean-(不确定,boolean类型单独使用是4个字节,在数组中又是1个字节)-Boolean
Java中的四种引用及其应用场景是什么?
- 强引用: 通常我们使用new操作符创建一个对象时所返回的引用即为强引用。
- 软引用: 若一个对象只能通过软引用到达,那么这个对象在内存不足时会被回收,可用于图片缓存中,内存不足时系统会自动回收不再使用的Bitmap。
- 弱引用: 若一个对象只能通过弱引用到达,那么它就会被回收(即使内存充足),同样可用于图片缓存中,这时候只要Bitmap不再使用就会被回收。
例子:在Android中的应用:
private static class MyHandler extends Handler {
private WeakReference<BrowserHistoryActivity> activityWeakReference;
public MyHandler(BrowserHistoryActivity activity) {
activityWeakReference = new WeakReference<BrowserHistoryActivity>(activity);
}
@Override
public void handleMessage(Message msg) {
if (activityWeakReference.get() == null) {
return;
}
if (msg.arg1 == 1) {
activityWeakReference.get().mCurrentPage = 0;
activityWeakReference.get().mAdapter.getDatas().clear();
activityWeakReference.get().getDatas(1);
} else if (msg.arg1 == 2) {
activityWeakReference.get().getDatas(2);
}
}
}
- 虚引用: 虚引用是Java中最“弱”的引用,通过它甚至无法获取被引用的对象,它存在的唯一作用就是当它指向的对象回收时,它本身会被加入到引用队列中,这样我们可以知道它指向的对象何时被销毁。
静态内部类与非静态内部类的区别
静态内部类不会持有外围类的引用,而非静态内部类会隐式持有外围类的一个引用。(会导致内存泄露)
反射的作用与原理
反射的作用概括地说是运行时获取类的各种定义信息,比如定义了哪些属性与方法。原理是通过类的class对象来获取它的各种信息。
/**
* 通过java反射机制,更改ViewPager的滚动时间
*
* @param viewPager
* @param time
*/
public static void setViewPagerScrollTime(ViewPager viewPager, int time) {
try {
Field field = ViewPager.class.getDeclaredField("mScroller");
field.setAccessible(true);
FixedSpeedScroller scroller = new FixedSpeedScroller(viewPager.getContext(), new LinearInterpolator(), time);
field.set(viewPager, scroller);
} catch (Exception e) {
LogHelpter.d("ViewPager", "setViewPagerScrollTime fail");
}
}
注解的基本概念与使用
注解可以看作是“增强版的注释”,它可以向编译器、虚拟机说明一些事情。注解是描述Java代码的代码,它能够被编译器解析,注解处理工具在运行时也能够解析注解。注解本身是“被动”的信息,只有主动解析它才有意义。除了向编译器/虚拟机传递信息,我们也可以使用注解来生成一些“模板化”的代码。后面在学习Android基础的时候,我还会把注解的原理做一个笔记。
J2EE简介
J2EE 三大框架的简单介绍以及他们的下载地址
Java实现的二分查找算法
面试心得与总结—BAT、网易、蘑菇街
Java面试知识点总结