java基础知识点 java基础知识点面试( 二 )


十七、二分查找法public class BinarySearch { /** * 二分查找算法 * * @param srcArray 有序数组 * @param key 查找元素 * @return key的数组下标,没找到返回-1 */ public static void main(String[] args) { int srcArray[] = {3,5,11,17,21,23,28,30,32,50,64,78,81,95,101}; System.out.println(binSearch(srcArray, 0, srcArray.length - 1, 81)); } http:// 二分查找递归实现 public static int binSearch(int srcArray[], int start, int end, int key) { 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; } http:// 二分查找普通循环实现 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 (keysrcArray[mid]) { start = mid + 1; } else { return mid; } } return -1; } }
十八、时间类型转换public class DateFormat {public static void fun() {SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");String newDate;try {newDate = sdf.format(new SimpleDateFormat("yyyyMMdd").parse("20121115"));System.out.println(newDate);} catch (ParseException e) {e.printStackTrace();}}public static void main(String args[]) {fun();}}
【java基础知识点 java基础知识点面试】十九、阶乘public class Multiply {public static int multiply(int num) {if (num < 0) {System.out.println("请输入大于0的数!");return -1;} else if (num == 0 || num == 1) {return 1;} else {return multiply(num - 1) * num;}}public static void main(String[] args) {System.out.println(multiply(10));}}
二十、UE和UI的区别UE 是用户体验度UI 界面原型(用户界面)(相当于买房时用的模型)设计UI的作用:1、帮助程序员工作(界面已由美工设计完成)2、提前让用户对项目有个宏观的了解,知道效果是什么样子 。二十一、osi七层模型第一层:物理层第二层:数据链路层第三层:网络层第四层:传输层第五层:会话层第六层:表示层第七层:应用层二十二、线程和进程的区别1.线程(Thread)与进程(Process)进程定义的是应用程序与应用程序之间的边界,通常来说一个进程就代表一个与之对应的应用程序 。不同的进程之间不能共享代码和数据空间,而同一进程的不同线程可以共享代码和数据空间 。2.一个进程可以包括若干个线程,同时创建多个线程来完成某项任务 , 便是多线程 。3.实现线程的两种方式:继承Thread类,实现Runable接口二十三、jvm的内存结构java虚拟机的内存结构分为堆(heap)和栈(stack),堆里面存放是对象实例也就是new出来的对象 。栈里面存放的是基本数据类型以及引用数据类型的地址 。对于所谓的常量是存储在方法区的常量池里面 。二十四、内存泄露和内存溢出内存泄露 (memory leak),是指应用程序在申请内存后,无法释放已经申请的内存空间.一次内存泄露危害可以忽略 , 但如果任其发展最终会导致内存溢出(out of memory).如读取文件后流要进行及时的关闭以及对数据库连接的释放 。内存溢出(out of memory)是指应用程序在申请内存时,没有足够的内存空间供其使用 。如我们在项目中对于大批量数据的导入 , 采用分段批量提交的方式 。二十五、单例单例就是该类只能返回一个实例 。单例所具备的特点:1.私有化的构造函数2.私有的静态的全局变量3.公有的静态的方法单例分为懒汉式、饿汉式和双层锁式饿汉式:public class Singleton1 {private Singleton1() {};private static Singleton1 single = new Singleton1();public static Singleton1 getInstance() {return single;}}
懒汉式:public class Singleton2 {private Singleton2() {}private static Singleton2 single=null;public tatic Singleton2 getInstance() {if (single == null) {single = new Singleton2();}return single;}}
线程安全:public class Singleton3 {private Singleton3() {}private static Singleton3 single ;public static Singleton3 getInstance() {if(null == single){synchronized(single ){if(null == single){single = new Singleton3();}}}return single;}}
参考:通过双重判断来保证单列设计模式在多线程中的安全性,并且它在性能方面提高了很多 。synchronized在方法上加锁 (同步锁)synchronized在代码块内部加锁 (同步代码块)synchronized(同步锁)使用synchronized如何解决线程安全的问题?1.synchronized在方法上加锁2.synchronized在代码块内部加锁1.懒汉 2.饿汉 3.双重判断二十六、解析xml文件的几种技术1、 解析xml的几种技术1.dom4j2.sax3.jaxb4.jdom5.dom1.dom4jdom4j是一个Java的XML API,类似于jdom,用来读写XML文件的 。dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件 。2.saxSAX(simple API for XML)是一种XML解析的替代方法 。相比于DOM,SAX是一种速度更快,更有效的方法 。它逐行扫描文档,一边扫描一边解析 。而且相比于DOM,SAX可以在解析文档的任意时刻停止解析,但任何事物都有其相反的一面,对于SAX来说就是操作复杂 。3.jaxbJAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术 。该过程中 , JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档 。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便地结合XML数据和处理函数 。2、dom4j 与 sax 之间的对比:【注:必须掌握!】dom4j不适合大文件的解析 , 因为它是一下子将文件加载到内存中,所以有可能出现内存溢出 , sax是基于事件来对xml进行解析的,所以他可以解析大文件的xml也正是因为如此 , 所以dom4j可以对xml进行灵活的增删改查和导航,而sax没有这么强的灵活性所以sax经常是用来解析大型xml文件,而要对xml文件进行一些灵活(crud)操作就用dom4j二十七、项目的生命周期1.需求分析2.概要设计3.详细设计(用例图,流程图,类图)4.数据库设计(powerdesigner)5.代码开发(编写)6.单元测试(junit 白盒测试)(开发人员)svn版本管理工具(提交,更新代码,文档)7.集成测试 (黑盒测试,loadrunner(编写测试脚本)(高级测试))8.上线试运行 (用户自己体验)9.压力测试(loadrunner)10.正式上线11.维护二十八、OSCache的判断Object obj = CacheManager.getInstance().getObj(“oaBrandList”);http://从缓存中取数据if (null == obj) {obj = brandDao.getBrandList();http://如果为空再从数据库获取数据http://获取之后放入缓存中CacheManager.getInstance().putObj(“oaBrandList”, obj);}return (List)obj;二十九、经常访问的技术网站1.csdn(详细步骤的描述)2.iteye(详细步骤的描述)3.oschina(开源中国获取java开源方面的信息技术)4.java开源大全 www.open-open.com(获取java开源方面的信息技术)5.infoq(对java,php,.net等这些语言的一些最新消息的报道)三十、项目团队中交流的工具飞秋(局域网) qq(局域网,外网)RTX(局域网,外网) 邮箱 (局域网 , 外网)三十一、平时浏览的书籍实战经验:*** in action(实战)*** 深入浅出*** 入门指南思想基础:大话设计模式 重构三十二、java Exception体系结构java 异常是程序运行过程中出现的错误 。Java把异常当作对象来处理,并定义一个基类java.lang.Throwable作为所有异常的超类 。在Java API中定义了许多异常类,分为两大类 , 错误Error和异常Exception 。其中异常类Exception又分为运行时异常(RuntimeException)和非运行时异常(非runtimeException),也称之为不检查异常(Unchecked Exception)和检查异常(Checked Exception) 。1、Error与ExceptionError是程序无法处理的错误,比如OutOfMemoryError、ThreadDeath等 。这些异常发生时 , Java虚拟机(JVM)一般会选择线程终止 。Exception是程序本身可以处理的异常 , 这种异常分两大类运行时异常和非运行时异常 。程序中应当尽可能去处理这些异常 。2、运行时异常和非运行时异常运行时异常: 都是RuntimeException类及其子类异常: IndexOutOfBoundsException 索引越界异常ArithmeticException:数学计算异常NullPointerException:空指针异常ArrayOutOfBoundsException:数组索引越界异常ClassNotFoundException:类文件未找到异常ClassCastException:造型异常(类型转换异常)这些异常是不检查异常(Unchecked Exception),程序中可以选择捕获处理,也可以不处理 。这些异常一般是由程序逻辑错误引起的 。非运行时异常:是RuntimeException以外的异常 , 类型上都属于Exception类及其子类 。从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过 。如:IOException、文件读写异常FileNotFoundException:文件未找到异常EOFException:读写文件尾异常MalformedURLException:URL格式错误异常SocketException:Socket异常SQLException:SQL数据库异常三十三、session和cookie的区别session是存储在服务器端 , cookie是存储在客户端的,所以安全来讲session的安全性要比cookie高,然后我们获取session里的信息是通过存放在会话cookie里的sessionid获取的 。又由于session是存放在服务器的内存中,所以session里的东西不断增加会造成服务器的负担,所以会把很重要的信息存储在session中,而把一些次要东西存储在客户端的cookie里,然后cookie确切的说分为两大类分为会话cookie和持久化cookie,会话cookie确切的说是 , 存放在客户端浏览器的内存中,所以说他的生命周期和浏览器是一致的,浏览器关了会话cookie也就消失了,然而持久化cookie是存放在客户端硬盘中,而持久化cookie的生命周期就是我们在设置cookie时候设置的那个保存时间 , 然后我们考虑一问题当浏览器关闭时session会不会丢失,从上面叙述分析session的信息是通过会话cookie的sessionid获取的 , 当浏览器关闭的时候会话cookie消失所以我们的sessionid也就消失了,但是session的信息还存在服务器端,这时我们只是查不到所谓的session但它并不是不存在 。那么 , session在什么情况下丢失 , 就是在服务器关闭的时候 , 或者是session过期(默认时间是30分钟),再或者调用了invalidate()的或者是我们想要session中的某一条数据消失调用session.removeAttribute()方法 , 然后session在什么时候被创建呢,确切的说是通过调用getsession()来创建,这就是session与cookie的区别.访问HTML页面是不会创建session,但是访问index.JSP时会创建session(JSP实际上是一个Servlet, Servlet中有getSession方法)三十四、字节流与字符流的区别stream结尾都是字节流,reader和writer结尾都是字符流两者的区别就是读写的时候一个是按字节读写,一个是按字符 。实际使用通常差不多 。在读写文件需要对内容按行处理,比如比较特定字符,处理某一行数据的时候一般会选择字符流 。只是读写文件,和文件内容无关的 , 一般选择字节流 。三十五、final,finally,finalize 三者区别Final是一个修饰符:当final修饰一个变量的时候,变量变成一个常量,它不能被二次赋值当final修饰的变量为静态变量(即由static修饰)时,必须在声明这个变 量的时候给它赋值当final修饰方法时,该方法不能被重写当final修饰类时,该类不能被继承Final不能修饰抽象类,因为抽象类中会有需要子类实现的抽 象方法,(抽 象类中可以有抽象方法,也可以有普通方法,当一个抽象类中没有抽象方 法时,这个抽象类也就没有了它存在的必要)Final不能修饰接口 , 因为接口中有需要其实现类来实现的方法Finally:Finally只能与try/catch语句结合使用,finally语句块中的语句一定会执行 ,  并且会在return,continue,break关键字之前执行finalize:Finalize是一个方法,属于java.lang.Object类,finalize()方法是GC (garbage collector垃圾回收)运行机制的一部分,finalize()方法是在 GC清理它所从 属的对象时被调用的三十六、Io流的层次结构从流的方向输入流 输出流从流的类型上字符流 字节流inputstream和outputstream都是抽象类它们下面的实现包括FileInputStream,BufferedInputStreamFileOutputStream,BufferedOutputStreamreader 和 writerFileReader,BufferedReader,StringReaderFileWriter,BufferedWriter,StringWriter,PrintWriter

推荐阅读