亚信安全测评试题java题库_亚信笔试题
(⼀)
1.String str=new String("abc") 在内存中是怎么分配的?
答:在运⾏时才在内存创建⼀个内存空间。
2.String str1="abc" 和 String str1=new String("abc"); 这两个的区别是什么?
答:String str1="abc"在编译时已经在⼀个常量池中⽣成⼀个拷贝,其中str1中的"abc"是字符串常量。⽽对于String str1=new
String("abc")的话,它是在运⾏时才创建。这两句在内在中所产⽣的对象并不是同⼀个对象。
3.GC是什么?有⼏种算法实现?(这题到现在也不⼤明⽩..如果GC是垃圾回收的话.后⾯为什么要问有⼏种算法实现呢?)
答:垃圾回收.可实现的算法有引⽤计数,标记回收,复制回收等.
4.Java Server Page 和 rvlet 的联系与区别
答:Collection是集合类的上级接⼝,继承与他的接⼝主要有Set 和List.
Collections是针对集合类的⼀个帮助类,他提供⼀系列静态⽅法实现对各种集合的搜 索、排序、线程安全化等操作。
=====================================================
6.ArrayList和Vector的区别,HashMap和HashTable的区别?
答: Vector是同步的。这个类中的⼀些⽅法保证了Vector中的对象是线程安全的。⽽ArrayList则是异步的,因此ArrayList中的对象并不是线程安全的。因为同步的要求会影响执⾏的效率,所以如果你不需要线程安全的集合那么使⽤ArrayList是⼀个很好的选择,这样可以避免由于同步带 来的不必要的性能开销。
Hashtable和HashMap的区别:
1.Hashtable是Dictionary的⼦类,HashMap是Map接⼝的⼀个实现类;
2.Hashtable中的⽅法是同步 的,⽽HashMap中的⽅法在缺省情况下是⾮同步的。即是说,在多线程应⽤程序中,不⽤专门的操作就安全地可以使⽤Hashtable了;⽽对于 HashMap,则需要额外的同步机制。但HashMap的同步问题可通过Collections的⼀个静态⽅法得到解决:
Map Collections.synchronizedMap(Map m)
这个⽅法返回⼀个同步的Map,这个Map封装了底层的HashMap的所有⽅法,使得底层的HashMap即使是在多线程的环境中也是安全的。
陈太丘与友期行翻译3. 在HashMap中,null可以作为键,这样的键只有⼀个;可以有⼀个或多个键所对应的值为null。当get()⽅法返回null值时,即可以表⽰HashMap中没有该键,也可以表⽰该键所对应的值为null。因此,在HashMap中不能由get()⽅法来判断HashMap中是否存在某个键,⽽应该⽤containsKey()⽅法来判断。
HashMap是Hashtable的轻量级实现(⾮线程安全的实现),他们都完成了Map接⼝,主要区别在于HashMap允许空(null)键值(key),由于⾮线程安全,效率上可能⾼于Hashtable。
HashMap允许将null作为⼀个entry的key或者value,⽽Hashtable不允许。
HashMap把Hashtable的contains⽅法去掉了,改成containsvalue和containsKey。因为contains⽅法
容易让⼈引起误解。
Hashtable继承⾃Dictionary类,⽽HashMap是Java1.2引进的Map interface的⼀个实现。
最⼤的不同是,Hashtable的⽅法是Synchronize的,⽽HashMap不是,在多个线程访问Hashtable时,不需要⾃⼰为它的⽅法实现同步,⽽HashMap 就必须为之提供外同步。
Hashtable和HashMap采⽤的hash/rehash算法都⼤概⼀样,所以性能不会有很⼤的差异。
================================================
7.overload和override的区别?
override(重写)
1、⽅法名、参数、返回值相同。
2、⼦类⽅法不能缩⼩⽗类⽅法的访问权限。
3、⼦类⽅法不能抛出⽐⽗类⽅法更多的异常(但⼦类⽅法可以不抛出异常)。
关于夏天的好句4、存在于⽗类和⼦类之间。
5、⽅法被定义为final不能被重写。
overload(重载)
1、参数类型、个数、顺序⾄少有⼀个不相同。
2、不能重载只有返回值不同的⽅法名。
3、存在于⽗类和⼦类、同类中。
8.char能不能存储汉字?
答:java char型变量是能够定义成为⼀个中⽂的,因为java中以unicode编码,⼀个char占16个字节,所以放⼀个中⽂是没问题的(⼆)
1.interface 和 abstract 的区别?
(1)关于抽象类和接⼝,我想还是看具体的要求,什么模式之类的东西
都是有了应⽤才出现的,需求才是第⼀位的。
它们之间的区别是:
1. 在抽象类中可以实现某些⽅法,⽽接⼝不⾏
羊肉炖多长时间最好吃2. 抽象类是⽤来extends的,⽽继承有⼀定的局限性,只能继承⼀个类
⽽接⼝就不同,可以同时实现多个接⼝
这两者也可以联合使⽤。看具体的要求了。如果有共同⽅法的那些类
它们的共同的⽅法的实现是⼀样的,那么可以考虑⽤抽象类,把⽅法
在抽象类中实现,如果还有⼀些⽅法定义相同⽽实现不同,那么可以
考虑定义⼀个接⼝,让抽象类来implements这个接⼝
然后各个⼦类只⽤继承抽象类即可。
(2)接⼝是“like a ”象⼀个什么东西、或是具备什么功能
抽象类是 “ is a ”是⼀个什么东西。
⼀个带锁的门,那么⼀定是 “somthing extends 门 impliment 锁 ”
决不能说 “带门的锁”
(3)经过⾃⼰写代码的测试结果:I代表interface,A代表abstract
I implemets I 错聊天电话
I extends I 对
I extends A 错
(4)⼀个是接⼝,⼀个是虚函数 java中的接⼝相当C++中纯虚函数
也就是⼀个也不实现,具体是在⼦类中实现,这体现了多态性
同时java接⼝也是java实现多重继承的⼀个⽅法
1.interface的所有函数都是abstract的;
2.interface的数据成员默认都是public static final的;风筝冲浪
3.Interface可以被多继承,abstract class单继承
interface是接⼝,abstract class是抽象类 主要区别:
1、接⼝可以多重implement(实现),抽象类只能单⼀extends(继承)
2、接⼝内只能是功能的定义,抽象类中可以包括功能的定义和功能的实现。
3、接⼝字段定义默认为public static final,⽽抽象类的则默认为friendly。
3.GC是什么?常⽤的两种⽅法是什么?
(1)GC是垃圾收集的意思(Garbage Collection),内存处理是编程⼈员容易出现问题的地⽅,忘记或者错误的内存回收会导致程序或系统的不稳定甚⾄崩溃,Java提供的GC功能可以 ⾃动监测对象是否超过作⽤域从⽽达到⾃动回收内存的⽬的,Java语⾔没有提供释放已分配内存的显⽰操作⽅法。
(2)答案:()⽤来强制⽴即回收垃圾,即释放内存。
java 对内存的释放采取的垃圾⾃动回收机制,在编程的时候不⽤考虑变量不⽤时释放内存,java虚拟机可以⾃动判断出并收集到垃圾,但⼀般不会⽴即释放它们的内 存空间,当然也可以在程序中使⽤()来强制垃圾回收,但是要注意的是,系统并不保证会⽴即进⾏释放内存.
gc⾸先要判断该对象是否是时候可以收集。两种常⽤的⽅法是引⽤计数和对象引⽤遍历。
==========================================================
4. 线程常⽤的⽅法是什么?
Thread类的常⽤⽅法:
static Thread currentThread() //静态⽅法,通过这个⽅法可以获得主线程的引⽤,从⽽达到操作主线程的⽬的。
static int activeCount() //静态⽅法,获得当前活动线程数量
long getId() //获得当前线程id
String getName() //获得当前线程名字
int getPriority() //获得优先级
三方合作协议
boolean isAlive() //当前线程是否处于活动状态。
boolean isDaemon() //是否为守护线程
void run() //run()⽅法,我们⽤线程,主要就是对run()⽅法的重写
void start() // 使该线程开始执⾏;Java 虚拟机调⽤该线程的run() ⽅法。
void sleep() //使当前线程休眠,以执⾏其他线程,如Thread.sleep(1000) 休眠1秒
5. Sleep()和wait()的区别?
搞线程的最爱sleep()⽅法是使线程停⽌⼀段时间的⽅法。在sleep 时间间隔期满后,线程不⼀定⽴即恢复执⾏。这是因为在那个时刻,其它线程可能正在运⾏⽽且没有被调度为放弃执⾏,除⾮(a)"醒来"的线程具有更⾼的优先 级,(b)正在运⾏的线程因为其它原因⽽阻塞。wait()是线程交互时,如果线程对⼀个同步对象x 发出⼀个wait()调⽤,该线程会暂停执⾏,被调对象进⼊等待状态,直到被唤醒或等待时间到。
6. Servlet中forward()和redirct()的区别?
青薯9号答:前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显⽰ 出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更 加⾼效,在前者可以满⾜需要时,尽量使⽤forward()⽅法,并且,这样也有助于隐藏实际的链接。在有些情况下,⽐如,需要跳转到⼀个其它服务器上的 资源,则必须使⽤ndRedirect()⽅法。
7. EJB和JavaBean都是什么?
答案:
javabean是客户端组件,EJB是服务器端组件。
其实ejb与javaBean的最根本区别是:分布性。这是关键
Java Bean 是可复⽤的组件,对Java Bean并没有严格的规范,理论上讲,任何⼀个Java类都可以是⼀个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有⼀个⽆参的构造器,另外,通常Java Bean还要实现Serializable接⼝⽤于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的。Enterpri Java Bean 相当于DCOM,即分布式组件。它是基于Java的远程⽅法调⽤(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。但EJB必须被布署在 诸如Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,⽽是通过其容器访问。EJB容器是EJB组件的代理,EJB组件由容器所创建和管理。客户通过容器来访问真正的EJB组件。
8. EJB都有哪些构成?
答案:Session Bean, Entity Bean, Message Driven Bean.
9. Servlet的⽣命周期,⽐CGI有什么优点?
web容器加载rvlet,⽣命周期开始。通过调⽤rvlet的init()⽅法进⾏rvlet的初始化。通过调⽤ rvice()⽅法实现,根据请求的不同调⽤不同的do***()⽅法。结束服务,web容器调⽤rvlet的destroy()⽅法。
电动车新国标Servlet是Java平台上的CGI技术。Servlet在服务器端运⾏,动态地⽣成Web页⾯。与传统的CGI和许多其它类似CGI的技术相 ⽐,Java Servlet具有更⾼的效率并更容易使⽤。对于Servlet,重复的请求不会导致同⼀程序的多次转载,它是依靠线程的⽅式来⽀持并发访问的。
14. 存储过程和函数的区别?
本质上没区别。只是函数有如:只能返回⼀个变量的限制。⽽存储过程可以返回多个。⽽函数是可以嵌⼊在sql中使⽤的,可以在lect中调⽤,⽽存储过 程不⾏。执⾏的本质都⼀样。 函数限制⽐较多,⽐如不能⽤临时表,只能⽤表变量.还有⼀些函数都不可⽤等等.⽽存储过程的限制相对就⽐较少。
智⼒题:
分三部份:
oracle:存储过程,触发器,数据库的优化,PL\SQL。
java:⽐较基础,java的交换两个整数的值
智⼒题:⼀个皇帝,有四个⼉⼦。有三种颜⾊的帽⼦
三升的⽔,五升的⽔,⼋升的⽔