javajava 解决跨域问题!!

关于java中平均分配的问题
[问题点数:100分]
本版专家分:0
CSDN今日推荐
本版专家分:0
本版专家分:0
本版专家分:0
本版专家分:0
本版专家分:0
本版专家分:0
本版专家分:0
匿名用户不能发表回复!|
CSDN今日推荐国外投资银行最常问的10个Java面试问题!
 作者: 编译 | 钰莹 编辑:
  【IT168 资讯】现在的银行早已经有了自己成熟稳定的团队,自然也成为了不少技术人员求职的好去处。这篇来自国外的面试文章清楚表明很多Java开发人员乐于向花旗银行、巴克莱银行,瑞士信贷银行提交申请,但很多人可能还不清楚面试时可能会被问到哪些问题。  本文的作者分享了投资银行的一些常见面试问题,主要针对3年以上工作经验的Java开发人员,这些问题不适用于新手或具有1 - 2年Java经验的人员。通常情况下,银行开放式访谈不会雇佣经验较少的开发者。并且,银行内还有不少实习生是名牌大学的研究生。  不保证一定会被问到,但这个列表你可以尝试看看:  问题1:在多线程环境中使用HashMaps有什么问题?get()方法何时进入无限循环?  答:没有什么方法是错误的——这取决于程序员如何使用它。例如,如果只使用一个线程初始化HashMap,并且所有线程都只能从中读取,那么这非常好。其中一个例子是包含配置属性的Map。当不止一个线程正在更新HashMap,即添加,更改或删除任何键值对时,真正的问题就开始了。  由于put()操作可能会导致重新调整大小,从而导致无限循环,这就是为什么要使用Hashtable或ConcurrentHashMap(后者更好)。  问题2:不覆盖hashCode()方法是否有任何性能影响?  答案:这是一个很好的问题,几乎会问所有面试者。一个糟糕的hashCode函数会导致HashMap中频繁的冲突,最终增加向HashMap中添加对象的时间。  然而,从Java 8开始,冲突不会像早期版本那样影响性能。因为在阈值之后,链接列表将被二叉树替换,这在最坏的情况下时间复杂度还可以达到O(log N)。  这个问题有时难以回答,是因为许多开发人员只知道equals 和hashcode契约,并没有考虑它们的性能影响。  equals 和hashcode契约:  1. 如果两个对象相等,它们的hash code必须相等;  2. 如果两个对象的hash code相等,这两个对象不一定相等。  问题3:不可变对象的所有属性都必须是final吗?  答:不必要。如上所述,可以不是final而是 private - 不是在构造函数中修改它们来实现相同的功能,不要为它们提供setter方法。如果是一个可变对象,永远不要泄露对该成员的任何引用。  请记住,变量属性设为final仅确保它不会被重新分配不同的值,但仍可以更改该引用变量所指向的对象的各个属性。这是面试官希望从候选人那里听到的关键点之一。提到这一点,就可以得到一些分数。  问题4:String中的substring()如何工作?  答:许多开发人员知道答案:“子字符串通过获取原始字符串的一部分,从原字符串中创建一个新对象。”  但我认为这个答案是不够的。这个问题的目的在于看看开发人员是否熟悉子串可能产生的泄漏风险。  在Java 1.7之前,一个保存了原始字符数组引用的子字符串,意味着5个字符长的子字符串也可以通过保留强引来阻止垃圾收集中的1GB字符数组。  这个问题在Java 1.7中得到了修复,原来的字符数组不再被引用,但是这种改变也使得创建子字符串在时间上成本更高。早些时候,它在O(1)范围内,在Java 7最坏的情况下可能是O(N)。  问题5:你能为singleton编写关键部分代码吗?  答:这个核心Java问题是前一个问题的后续,希望面试者使用双重检查锁定模式编写Java单例,请记住使用volatile变量来使Singleton线程安全。  以下是使用Double-Checked Locking模式保证单例模式在多线程环境下安全性的代码:  问题6:在编写存储过程或从Java访问存储过程时,如何处理错误条件?  答:这是Java面试题中几乎对所有人开放的问题。如果某个操作失败,存储过程应该返回一个错误代码,但如果存储过程本身失败,那么捕获SQLException是唯一的选择。  问题7:Executor.submit()和Executer.execute()方法有什么区别?  这个问题来自投资银行针对有经验的程序员的50个Java多线程问题列表。  由于拥有良好并发技能的Java开发人员的巨大需求,它日益普及。顺便说一句,如果想认真构建并发技能,那么Heinz Kabutz的Java Concurrency in Practice 课程是一个很好的开始。它是关于Java并发的最高级课程之一,也是基于Brian Goetz和其公司的经典书籍Java Concurrency in Practice。  这个Java面试问题的答案是前者返回一个Future对象,它可以用来从worker线程中查找结果。查看异常处理时有区别。如果任务抛出一个异常(如果是在执行时提交的),这个异常将进入未捕获的异常处理程序(当没有显式提供异常时,默认只会将堆栈跟踪打印到System.err)。  如果在提交任何抛出异常时提交了任务,则检查异常与否,这是任务返回状态的一部分。对于已提交并以异常终止的任务,Future.get()将重新抛出此异常,并包装在ExecutionException中。  问题8:Factory 和Abstract Factory模式有什么区别?  与Factory模式相比,Abstract Factory提供了更多级别的抽象。  考虑不同的Factory,每个Factory都从Abstract Factory扩展而来,负责根据Factory类型创建不同的对象层次结构。  例如,AbstractFactory可以通过AutomobileFactory,UserFactory,RoleFactory等进行扩展。  每个Factory都将负责创建该类型的对象。  这是Factory和Abstract Factory模式的UML图:  问题9:什么是Singleton?让整个方法同步还是只有关键部分同步更好?  答:Java中的Singleton是在整个Java应用程序中只有一个实例的类。例如,java.lang.Runtime是一个Singleton类。  在Java 5之前创建Singleton是棘手的,自从Java 5引入Enum,它变得非常容易。  这个问题需要程序员了解使用Enums编写单例和使用双重检查锁定的一些细节,这是此Java面试问题的目的。  问题10:你能编写用于在Java 4和Java 5中迭代HashMaps的代码吗?  答:这是一个棘手问题,程序员可以设法使用while和for循环。但实际上,有几种方法可以遍历Java中的所有Map。  第一种方法涉及使用keySet()并迭代该键,然后使用get()方法检索值,这有点贵。  第二种方法涉及使用entrySet()并遍历它们,方法是使用for循环或使用Iterator.hasNext()方法。这个方法更好。因为在迭代过程中key和value对象都可用,并且不需要调用get()方法来检索值,这可以提供O(N)性能。  如果使用Java 8并且有树而不是链接列表,可能会稍微好一点。  结论  这就是投资银行常见的Java面试问题。如果你正在寻找Java开发人员相关岗位,那么应该多了解Java并发性,多线程,集合,JVM内部结构,垃圾回收以及如何提高Java应用程序的性能。
IT168企业级扫一扫体验手机阅读
Java问题定位方法总结
<span type="1" blog_id="1908197" userid='
102篇文章,11W+人气,0粉丝
高并发架构之路
¥51.0018人订阅
<span type="1" blog_id="1908197" userid='Java编程常见问题汇总_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
赠送免券下载特权
10W篇文档免费专享
部分付费文档8折起
每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Java编程常见问题汇总
阅读已结束,下载本文需要
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
&#xe64e;加入VIP
还剩40页未读,
定制HR最喜欢的简历
你可能喜欢JAVA面试问题及答案(上)
1. 面向对象和面向过程的区别
优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机、嵌入式开发、Linux/Unix等一般采用面向过程开发,性能是最重要的因素。
缺点:没有面向对象易维护、易复用、易扩展 面向对象
优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护
缺点:性能比面向过程低
2. Java的四个基本特性(抽象、封装、继承,多态)
抽象:就是把现实生活中的某一类东西提取出来,用程序代码表示,我们通常叫做类或者接口。抽象包括两个方面:一个是数据抽象,一个是过程抽象。数据抽象也就是对象的属性。过程抽象是对象的行为特征。 封装:把类中的数据和操作封装起来,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行封装隐藏。封装分为属性的封装和方法的封装。 继承:父类的意义在于抽取多类事物的共性。子类继承父类可以增强代码复用。多态:允许不同类的对象对同一函数做出响应。方法的重载、类的覆盖正体现了多态。
3. 重载和重写的区别
重载:发生在同一个类中,方法名必须相同,参数类型不同、个数不同,方法返回值和访问修饰符可以不同,发生在编译时。 重写:发生在父子类中,方法名、参数列表必须相同,返回值等于父类,抛出的异常小于等于父类,访问修饰符更易访问;如果父类方法访问修饰符为private则子类中就不是重写。
4. 构造器Constructor是否可被override
构造器不能被继承,所以不能被重写。
5. 访问控制符public,protected,private,以及默认的区别
private只有在本类中才能访问;
public在任何地方都能访问;
protected在同包内的类及包外的子类能访问;
默认不写在同包内能访问。
6. 是否可以继承String类
String类是final类故不可以继承,一切由final修饰过的都不能继承
7. String和StringBuffer、StringBuilder的区别
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% 左右的性能提升,但却要冒多线程不安全的风险。
8. hashCode和equals方法的关系
equals相等,hashcode必相等;hashcode相等,equals可能不相等。
9. 抽象类和接口的区别
语法层次:
抽象类和接口分别给出了不同的语法定义 设计层次:
抽象层次不同,抽象类是对类抽象,而接口是对行为的抽象。抽象类是对整个类整体进行抽象,包括属性、行为,但是接口却是对类局部(行为)进行抽象。
跨域不同,抽象类所体现的是一种继承关系,要想使得继承关系合理,父类和派生类之间必须存在”is-a” 关系,即父类和派生类在概念本质上应该是相同的。对于接口则不然,并不要求接口的实现者和接口定义在概念本质上是一致的,仅仅是实现了接口定义的契约而已,”like-a”的关系。。
设计层次不同,抽象类是自底向上抽象而来的,接口是自顶向下设计出来的。
10. 自动装箱与拆箱
装箱:将基本类型用它们对应的引用类型包装起来; 拆箱:将包装类型转换为基本数据类型;
Java使用自动装箱和拆箱机制,节省了常用数值的内存开销和创建对象的开销,提高了效率,由编译器来完成,编译器会在编译期根据语法决定是否进行装箱和拆箱动作。
11. 什么是泛型、为什么要使用以及泛型擦除
泛型,即“参数化类型”。
创建集合时就指定集合元素的类型,该集合只能保存其指定类型的元素,避免使用强制类型转换。
Java编译器生成的字节码是不包涵泛型信息的,泛型类型信息将在编译处理是被擦除,这个过程即类型擦除。 泛型擦除可以简单的理解为将泛型java代码转换为普通java代码,只不过编译器更直接点,将泛型java代码直接转换成普通java字节码。 类型擦除的主要过程如下:
将所有的泛型参数用其最左边界(最顶级的父类型)类型替换。移除所有的类型参数。
12. Java中的集合类及关系图
List和Set继承自Collection接口。
Set无序不允许元素重复。HashSet和TreeSet是两个主要的实现类。
List有序且允许元素重复。ArrayList、LinkedList和Vector是三个主要的实现类。
Map也属于集合系统,但和Collection接口没关系。Map是key对value的映射集合,其中key列就是一个集合。key不能重复,但是value可以重复。 HashMap、TreeMap和Hashtable是三个主要的实现类。
SortedSet和SortedMap接口对元素按指定规则排序,SortedMap是对key列进行排序。
13. HashMap实现原理
具体原理一句两句也说不清楚,网络文章:
14. HashTable实现原理
具体原理一句两句也说不清楚,网络文章:
15. HashMap和HashTable区别
HashTable的方法前面都有synchronized来同步,是线程安全的;HashMap未经同步,是非线程安全的。HashTable不允许null值(key和value都不可以) ;HashMap允许null值(key和value都可以)。HashTable有一个contains(Object value)功能和containsValue(Object value)功能一样。HashTable使用Enumeration进行遍历;HashMap使用Iterator进行遍历。HashTable中hash数组默认大小是11,增加的方式是 old*2+1;HashMap中hash数组的默认大小是16,而且一定是2的指数。哈希值的使用不同,HashTable直接使用对象的hashCode; HashMap重新计算hash值,而且用与代替求模。
16. ArrayList和vector区别
ArrayList和 Vector都实现了List接口, 都是通过数组实现的。Vector是线程安全的,而ArrayList是非线程安全的。List第一次创建的时候,会有一个初始大小,随着不断向List中增加元素,当 List 认为容量不够的时候就会进行扩容。Vector缺省情况下自动增长原来一倍的数组长度,ArrayList增长原来的50%。
17. ArrayList和LinkedList区别及使用场景
ArrayList底层是用数组实现的,可以认为ArrayList是一个可改变大小的数组。随着越来越多的元素被添加到ArrayList中,其规模是动态增加的。LinkedList底层是通过双向链表实现的, LinkedList和ArrayList相比,增删的速度较快。但是查询和修改值的速度较慢。同时,LinkedList还实现了Queue接口,所以他还提供了offer(), peek(), poll()等方法。LinkedList更适合从中间插入或者删除(链表的特性)。 ArrayList更适合检索和在末尾插入或删除(数组的特性)。
18. Collection和Collections的区别
java.util.Collection 是一个集合接口。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式。java.util.Collections 是一个包装类。它包含有各种有关集合操作的静态多态方法。此类不能实例化,就像一个工具类,服务于Java的Collection框架。
19. Concurrenthashmap实现原理
具体原理一句两句也说不清楚,网络文章:
20. Error、Exception区别
Error类和Exception类的父类都是throwable类,他们的区别是:
Error类一般是指与虚拟机相关的问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢等。对于这类错误的导致的应用程序中断,仅靠程序本身无法恢复和和预防,遇到这样的错误,建议让程序终止。Exception类表示程序可以处理的异常,可以捕获且可能恢复。遇到这类异常,应该尽可能处理异常,使程序恢复运行,而不应该随意终止异常。
21.Unchecked Exception和Checked Exception,各列举几个
Unchecked Exception:
指的是程序的瑕疵或逻辑错误,并且在运行时无法恢复。包括Error与RuntimeException及其子类,如:OutOfMemoryError, UndeclaredThrowableException,IllegalArgumentException,IllegalMonitorStateException, NullPointerException, IllegalStateException, IndexOutOfBoundsException等。语法上不需要声明抛出异常。
Checked Exception:
代表程序不能直接控制的无效外界情况(如用户输入,数据库问题,网络异常,文件丢失等)除了Error和RuntimeException及其子类之外,如:ClassNotFoundException, NamingException, ServletException, SQLException, IOException等。需要try catch处理或throws声明抛出异常。
22. Java中如何实现代理机制(JDK、CGLIB)
JDK动态代理:代理类和目标类实现了共同的接口,用到InvocationHandler接口。CGLIB动态代理:代理类是目标类的子类, 用到MethodInterceptor接口
23. 多线程的实现方式
继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。
24. 线程的状态转换
25. 如何停止一个线程
这个问题简单总结不一定说的清,看一篇网络文章:
26. 什么是线程安全
线程安全就是多线程访问同一代码,不会产生不确定的结果。
27. 如何保证线程安全
对非安全的代码进行加锁控制;使用线程安全的类;多线程并发情况下,线程共享的变量改为方法级的局部变量。
28. Synchronized如何使用
synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种:
修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象;修改一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象;修改一个类,其作用的范围是synchronized后面括号括起来的部分,作用主的对象是这个类的所有对象。
29. synchronized和Lock的区别
主要相同点:Lock能完成synchronized所实现的所有功能
主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。Lock的锁定是通过代码实现的,而synchronized是在JVM层面上实现的,synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。Lock还有更强大的功能,例如,它的tryLock方法可以非阻塞方式去拿锁。Lock锁的范围有局限性,块范围,而synchronized可以锁住块、对象、类。
30. 多线程如何进行信息交互
void notify() 唤醒在此对象监视器上等待的单个线程。void notifyAll() 唤醒在此对象监视器上等待的所有线程。void wait() 导致当前的线程等待,直到其他线程调用此对象的notify()方法或notifyAll()方法。void wait(long timeout) 导致当前的线程等待,直到其他线程调用此对象的notify()方法或notifyAll()方法,或者超过指定的时间量。void wait(long timeout, int nanos) 导致当前的线程等待,直到其他线程调用此对象的notify()方法或notifyAll()方法,或者其他某个线程中断当前线程,或者已超过某个实际时间量。
31. sleep和wait的区别(考察的方向是是否会释放锁)
sleep()方法是Thread类中方法,而wait()方法是Object类中的方法。
sleep()方法导致了程序暂停执行指定的时间,让出cpu该其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运行状态,在调用sleep()方法的过程中,线程不会释放对象锁。而当调用wait()方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后本线程才进入对象锁定池准备
32. 多线程与死锁
33. 如何才能产生死锁
产生死锁的四个必要条件:
互斥条件:所谓互斥就是进程在某一时间内独占资源。请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。不剥夺条件:进程已获得资源,在末使用完之前,不能强行剥夺。循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
34. 死锁的预防
打破产生死锁的四个必要条件中的一个或几个,保证系统不会进入死锁状态。
打破循环等待条件,实行资源有序分配策略。采用这种策略,即把资源事先分类编号,按号分配,使进程在申请,占用资源时不会形成环路。所有进程对资源的请求必须严格按资源序号递增的顺序提出。进程占用了小号资源,才能申请大号资源,就不会产生环路,从而预防了死锁。打破互斥条件。即允许进程同时访问某些资源。但是,有的资源是不允许被同时访问的,像打印机等等,这是由资源本身的属性所决定的。所以,这种办法并无实用价值。打破占有且申请条件。可以实行资源预先分配策略。即进程在运行前一次性地向系统申请它所需要的全部资源。如果某个进程所需的全部资源得不到满足,则不分配任何资源,此进程暂不运行。只有当系统能够满足当前进程的全部资源需求时,才一次性地将所申请的资源全部分配给该进程。由于运行的进程已占有了它所需的全部资源,所以不会发生占有资源又申请资源的现象,因此不会发生死锁。
35. 什么叫守护线程,用什么方法实现守护线程
守护线程是为其他线程的运行提供服务的线程。
setDaemon(boolean on)方法可以方便的设置线程的Daemon模式,true为守护模式,false为用户模式。
36. Java线程池技术及原理
37. java并发包concurrent及常用的类
38. volatile关键字
39. Java中的NIO,BIO,AIO分别是什么
BIO:同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解。NIO:同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持。AIO:异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理.AIO方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK7开始支持。
40. IO和NIO区别
IO是面向流的,NIO是面向缓冲区的。IO的各种流是阻塞的,NIO是非阻塞模式。Java NIO的选择器允许一个单独的线程来监视多个输入通道,你可以注册多个通道使用一个选择器,然后使用一个单独的线程来“选择”通道:这些通道里已经有可以处理的输入,或者选择已准备写入的通道。这种选择机制,使得一个单独的线程很容易来管理多个通道。
41. 序列化与反序列化
把对象转换为字节序列的过程称为对象的序列化。
把字节序列恢复为对象的过程称为对象的反序列化。
对象的序列化主要有两种用途:
把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中;在网络上传送对象的字节序列。当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。
42. 常见的序列化协议有哪些
xml、json、Protobuf, Thrift, Hessian, Kryo
43. 内存溢出和内存泄漏的区别
内存溢出是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory。
内存泄漏是指分配出去的内存不再使用,但是无法回收。
44. Java内存模型及各个区域的OOM,如何重现OOM
45. 出现OOM如何解决
可通过命令定期抓取heap dump或者启动参数OOM时自动抓取heap dump文件。通过对比多个heap dump,以及heap dump的内容,分析代码找出内存占用最多的地方。分析占用的内存对象,是否是因为错误导致的内存未及时释放,或者数据过多导致的内存溢出。
46. 用什么工具可以查出内存泄漏
Memory Analyzer-是一款开源的JAVA内存分析软件,查找内存泄漏,能容易找到大块内存并验证谁在一直占用它,它是基于Eclipse RCP(Rich Client Platform),可以下载RCP的独立版本或者Eclipse的插件。JProbe-分析Java的内存泄漏。JProfiler-一个全功能的Java剖析工具,专用于分析J2SE和J2EE应用程序。它把CPU、执行绪和内存的剖析组合在一个强大的应用中,GUI可以找到效能瓶颈、抓出内存泄漏、并解决执行绪的问题。JRockit-用来诊断Java内存泄漏并指出根本原因,专门针对Intel平台并得到优化,能在Intel硬件上获得最高的性能。YourKit .NET & Java Profiling业界领先的Java和.NET程序性能分析工具。AutomatedQA -AutomatedQA的获奖产品performance profiling和memory debugging工具集的下一代替换产品,支持Microsoft, Borland, Intel, Compaq 和 GNU编译器。可以为.NET和Windows程序生成全面细致的报告,从而帮助您轻松隔离并排除代码中含有的性能问题和内存/资源泄露问题。支持.Net 1.0,1.1,2.0,3.0和Windows 32/64位应用程序。Compuware DevPartner Java Edition-包含Java内存检测,代码覆盖率测试,代码性能测试,线程死锁,分布式应用等几大功能模块
47. Java内存管理及回收算法
48. Java类加载器及如何加载类(双亲委派)
阅读文章:(推荐)
49. xml解析方式
50. Statement和PreparedStatement之间的区别
51.servlet生命周期及各个方法
52.servlet中如何自定义filter
53.JSP原理
54.JSP和Servlet的区别
(1)JSP经编译后就变成了“类servlet”。
(2)JSP由HTML代码和JSP标签构成,更擅长页面显示;Servlet更擅长流程控制。
(3)JSP中嵌入JAVA代码,而Servlet中嵌入HTML代码。
55.JSP的动态include和静态include
(1)动态include用jsp:include动作实现,如&jsp:include page="abc.jsp" flush="true" /&,它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。会先解析所要包含的页面,解析后和主页面合并一起显示,即先编译后包含。
(2)静态include用include伪码实现,不会检查所含文件的变化,适用于包含静态页面,如&%@ include file="qq.htm" %&,不会提前解析所要包含的页面,先把要显示的页面包含进来,然后统一编译,即先包含后编译。
56.Struts中请求处理过程
57.MVC概念
58.Spring mvc与Struts区别
59.Hibernate/Ibatis两者的区别
60.Hibernate一级和二级缓存
61.简述Hibernate常见优化策略
62.Spring bean的加载过程(推荐看Spring的源码)
63.Spring bean的实例化(推荐看Spring的源码)
64.Spring如何实现AOP和IOC(推荐看Spring的源码)
65.Spring bean注入方式
66.Spring的事务管理
这个主题的参考文章没找到特别好的,
67.Spring事务的传播特性
68.springmvc原理
69.springmvc用过哪些注解
70.Restful有几种请求
参考文章,
71.Restful好处
(1)客户-服务器:客户-服务器约束背后的原则是分离关注点。通过分离用户接口和数据存储这两个关注点,改善了用户接口跨多个平台的可移植性;同时通过简化服务器组件,改善了系统的可伸缩性。
(2)无状态:通信在本质上是无状态的,改善了可见性、可靠性、可伸缩性.
(3)缓存:改善了网络效率减少一系列交互的平均延迟时间,来提高效率、可伸缩性和用户可觉察的性能。
(4)统一接口:REST架构风格区别于其他基于网络的架构风格的核心特征是,它强调组件之间要有一个统一的接口。
72.Tomcat,Apache,JBoss的区别
Apache:HTTP服务器(WEB服务器),类似IIS,可以用于建立虚拟站点,编译处理静态页面,可以支持SSL技术,支持多个虚拟主机等功能。
Tomcat:Servlet容器,用于解析jsp,Servlet的Servlet容器,是高效,轻量级的容器。缺点是不支持EJB,只能用于java应用。
Jboss:应用服务器,运行EJB的J2EE应用服务器,遵循J2EE规范,能够提供更多平台的支持和更多集成功能,如数据库连接,JCA等,其对Servlet的支持是通过集成其他Servlet容器来实现的,如tomcat和jetty。
73.memcached和redis的区别
(1)性能对比:由于Redis只使用单核,而Memcached可以使用多核,所以平均每一个核上Redis在存储小数据时比Memcached性能更高。而在100k以上的数据中,Memcached性能要高于Redis,虽然Redis最近也在存储大数据的性能上进行优化,但是比起Memcached,还是稍有逊色。
(2)内存使用效率对比:使用简单的key-value存储的话,Memcached的内存利用率更高,而如果Redis采用hash结构来做key-value存储,由于其组合式的压缩,其内存利用率会高于Memcached。
(3)Redis支持服务器端的数据操作:Redis相比Memcached来说,拥有更多的数据结构和并支持更丰富的数据操作,通常在Memcached里,你需要将数据拿到客户端来进行类似的修改再set回去。这大大增加了网络IO的次数和数据体积。在Redis中,这些复杂的操作通常和一般的GET/SET一样高效。所以,如果需要缓存能够支持更复杂的结构和操作,那么Redis会是不错的选择。
74.如何理解分布式锁
75.你知道的开源协议有哪些
常见的开源协议有GPL、LGPL、BSD、Apache Licence vesion 2.0、MIT,详细内容参考文章
76.json和xml区别
(1)应用广泛,可扩展性强,被广泛应用各种场合;
(2)读取、解析没有JSON快;
(3)可读性强,可描述复杂结构。
(1)结构简单,都是键值对;
(2)读取、解析速度快,很多语言支持;
(3)传输数据量小,传输速率大大提高;
(4)描述复杂结构能力较弱。
77.设计模式
78.设计模式的六大原则
79.用一个设计模式写一段代码或画出一个设计模式的UML
80.高内聚,低耦合方面的理解
1. 深度优先、广度优先算法
2. 排序算法及对应的时间复杂度和空间复杂度
3. 写一个排序算法
4. 查找算法
5. B+树和二叉树查找时间复杂度
6. KMP算法、hash算法
7. 常用的hash算法有哪些
8. 如何判断一个单链表是否有环?
9. 给你一万个数,如何找出里面所有重复的数?用所有你能想到的方法,时间复杂度和空间复杂度分别是多少?
10. 给你一个数组,如何里面找到和为K的两个数?
11. 100000个数找出最小或最大的10个?
12. 一堆数字里面继续去重,要怎么处理?
数据结构:
1. 队列、栈、链表、树、堆、图
2. 编码实现队列、栈
1. linux常用命令
2. 如何查看内存使用情况
3. Linux下如何进行进程调度
操作系统:
1. 操作系统什么情况下会死锁
2. 产生死锁的必要条件
3. 死锁预防
2. 数据库事务隔离级别
3. 数据库连接池的原理
4. 乐观锁和悲观锁
5. 如何实现不同数据库的数据查询分页
6. SQL注入的原理,如何预防
7. 数据库索引的实现(B+树介绍、和B树、R树区别)
8. SQL性能优化
9. 数据库索引的优缺点以及什么时候数据库索引失效
10.Redis的存储结构
1. OSI七层模型以及TCP/IP四层模型
2. HTTP和HTTPS区别
3. HTTP报文内容
4. get提交和post提交的区别
5. get提交是否有字节限制,如果有是在哪限制的
6. TCP的三次握手和四次挥手
7. session和cookie的区别
8. HTTP请求中Session实现原理
9. redirect与forward区别
11. TCP和UDP区别
1. 如果客户端不断的发送请求连接会怎样
2. DDos攻击
3. DDos预防
4. 那怎么知道连接是恶意的呢?可能是正常连接
1. 说一个你参与的项目、其中作为什么角色
2. 遇到最困的问题是什么,怎么解决的
3. 你认为自己有那些方面不足
4. 平常如何学习的
5. 如何评价自己
1. 给你50个红球和50个黑球,有两个一模一样的桶,往桶里放球,让朋友去随机抽,采用什么策略可以让朋友抽到红球的概率更高?
2. 从100个硬币中找出最轻的那个假币?
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!}

我要回帖

更多关于 哲学家就餐问题 java 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信