java知识点回顾(二)

来源:互联网 发布:win7清除网络共享密码 编辑:程序博客网 时间:2024/06/04 18:14

以下文字站在面试官的视角,描述了java程序员面试的过程:(原文地址:http://www.mianwww.com/html/2013/05/18392.html )


         今天面试了一个开发人员,86年的,4年工作经验。职位是高级软件工程师。首先介绍了一下公司情况,知道他比较紧张,缓和一下气氛,然后就开始问技术问题。

首先看到简历上写的项目经验,发现有Linux和Unix经验,我就问,你对VI熟吗,他说熟,然后我就问了一些VI操作,答的一知半解。本来想问问操作系统启动过程的,

想想他作为Java程序员有点难,就没问。接着突然想到吕永生老师说过的经验,问问对方什么最熟,然后就问什么,于是我问你在Java 里面什么最熟悉,他想了一会,

我给了他一些提示,例如Java基础,JDBC,SQL等,然后他说Java基础,于是我问了以下问题,Java的Class Loader机制,TreeMap和HashMap 的区别,Map和Set 

和 List区别。答的不流利,且错误百出。接着,我问对JDBC熟吗?他说熟,我给他一张纸,“写一下Java建立数据库连接的语句”,他是一点都不会。这时候我给他提示: 

1.加载驱动,2.建立连接,3.执行sql,4.操作结果。他还是不会。于是我给他写出来,然后指着Class.forName(), 问里面到底执行了什么呢?他茫然。接着又让他写了一个

单例程序。接着又问了框架的东西,Struts,Spring,JPA,几乎一点都不会。接着我说,你等等,我叫另一个同事看看,于是他在会议室里等待,这时候我看到他站起来

小踱,有点着急。现在经济不景气,工作不好找,还是安心学点英语,技术吧。程序员太浮躁了,我有时候也是,所谓不学习就要落后,要时刻保持清醒的学习态度。谦虚

谨慎,不骄不躁。


在上面的场景中面试官问到的问题

1.vi操作:

vi的三种模式:命令行模式、插入模式、末行模式;
   编辑: i   
   退出: :q   强制退出: :q!
   保存: :w   保存并退出: wq!    或者 :x = :wq

   方向键: 左:h     右:l        上:k    下:j
   光标向前跳过一个单词:w     光标向后跳过一个单词:b

   删除:  整行删除:dd     

   向下寻找名为word的字符串: /word
   向上寻找名为word的字符串: ?word


2.linux操作系统启动过程(来自LinuxCast.net)

1).BIOS
2).MBR(512字节,前446字节为引导代码)
3).GRUB(Linux的主流引导程序,配置文件:/boot/grub/grub.conf)
4).加载内核
5).init(初始化)
6).runlevel


3.Java的Class Loader机制,TreeMap和HashMap的区别,Map、Set、List的区别:

1)Class Loader机制:

       从JDK1.2开始,类的加载过程采用父类委托机制,这种 机制能更好的保证java平台的安全。在此委托机制中,除了JVM自带的根类加载器以外,其余的

加载器都有且只有一个父加载器。当java程序请求加载器A加载类coo时,A先委托自己的父加载器去加载coo类,若父加载器能加载,则由父加载器完成

加载任务。否则,才由加载器A本身去加载coo类。在类加载中的父亲委托机制中,各加载器按照父子关系形成树结构。


          根类加载器

                    |

          扩展类加载器

                    |

          系统类加载器

                    |

          loader1(用户自定义类加载器)

                    |

          loader2(用户自定义类加载器)

Class Sample =  loader2.loadClass("Sample");

类加载的流程:

        loader2先从自己的命名空间查找  Sample类是否已被加载。若已加载,就直接返回已加载类对象的引用。若未被加载,loader2会请求loader1代为加载,

若loader1依然在命名空间中找不到Sample。则loader1将向系统类加载器发出请求,让系统类加载器来加载Sample类。以此类推(loader2及其父类加载器

的关系是包装的关系)。若loader2及其父类加载器都不能加载类到虚拟机,则抛出ClassNotFoundException异常。


父类委托机制的优点:

        提高了软件系统的安全性。在此机制下,用户自定义的类加载器不可能加载应该由父加载器加载的可靠类。并且可以防止不可靠的甚至是恶意的代码,

代替由父类加载器加载的可靠代码。


2)TreeMap、HashMap的区别:

TreeMap:实现map接口,把元素存储在树中。比HashMap慢;

                基于红黑树实现。适合于 按自然顺序、自定义顺序遍历键。

HashMap:是键(k)值(v)对的形式,key不能重复,但是value可以重复;

                 基于哈希表实现。适合于 在Map中插入、删除、定位元素。


3) Map、Set、List的区别:

Map:Map接口为我们提供完成map改变、map查询、map视图的功能的方法;

Set:无序集合,不可重复元素;

List:一个有序可重复的集合。


4. JDBC--Java建立数据库连接的语句,Class.forName()里面到底执行了什么?

jdbc建立数据库连接的过程:

0).参数化;

1).加载和注册数据库驱动;

2).连接数据库;

3).创建Statement对象;

4).操作数据库,执行SQL语句;

5).处理数据;

6).释放资源,断开与数据库的连接;


Class.forName(" ") : Class实例是JVM在加载一个类时自动创建的,程序无法用new语句创建java.lang.Class类的实例,因为Class类没有提供public类型的

构造方法。为了使程序能获得代表某个类的class实例,在Class类中提供了静态工厂方法 forName(String classname)。forName("foo")方法对foo类主动初始化,

细节的东西、实现还要看Class.forName()方法的源代码。口说无凭,代码为证。 


例如:

Class c = Class.forName("java.util.Date");//返回java.util.Date类的实例;Object obj = c.newInstance();   //在jdk中,newInstance()方法常是静态工厂方法


5. 单例程序

public class SingleT {      private  static SingleT st;     //唯一对象的指针或称为引用;      private  SingleT(){             //私有构造;      }            public static SingleT getNewInstance(){   //静态方法返回对象;                                if(st == null){                //多线程情况,可能会有多个实例,加synchronized保证线程安全;                    st = new SingleT();                 }                  return st;      }             }  


6. 框架的东西  Struts,Spring,Hibernate 及 Servlet、JPA

1).Struts2 工作流程:

                           1.访问JSP页面(loo.jsp);

                           2.提交表单后,数据提交给(/struts2/loo.action);

                           3.struts2截获所有请求,包括loo.action的请求;

                           4.查找struts.xml,loo.action对应的looAction;

                           5.生成一个looAction实例将提交的数据设置进去,调用实例的execute()主方法;

                           6.跳转到JSP中显示结果,丢弃looAction实例。


2).Spring 的IOC 、AOP 、 MVC:


3).Hibernate:


4).JPA (Java Persistence API ):


5).Servlet:


注: 

    

原创粉丝点击