面试题:总结 !=!=未看

一、如何比较两个对象,比如学生类,根据属性年龄比较大小

参考:http://zhidao.baidu.com/link?url=0eh3YqTJGUd0Kp9R_YM3q2sh2A39i55sh2_SNFokjnqshjr8rlLew94IE6ZXw6WHiPr3WwrbTT7JQu8jx4RCYa&qq-pf-to=pcqq.group

[python] view plain copy

  1. import java.util.*;
  2. public class Demo10 {
  3. public static void main(String[] args) {
  4. Person p1 = new Student(9,"m","gd","广");
  5. Person p2 = new Student(3,"m","gd","广");
  6. Person p3 = new Student(5,"m","gd","广");
  7. List<Person> list = new ArrayList<Person>();
  8. list.add(p1);
  9. list.add(p2);
  10. list.add(p3);
  11. //排序
  12. Collections.sort(list);
  13. for(int i = 0; i < list.size(); i++){
  14. Person p = (Person)(list.get(i));
  15. System.out.println(p.getAge());
  16. }
  17. }
  18. }
  19. class Person implements Comparable{
  20. private int age;//龄
  21. private String sex;//性别
  22. private String placeOfOrigin;//籍贯
  23. public int getAge(){
  24. return this.age;
  25. }
  26. public void setAge(int age){
  27. this.age = age;
  28. }
  29. public String getSex(){
  30. return this.sex;
  31. }
  32. public void setSex(String sex){
  33. this.sex = sex;
  34. }
  35. public String getPlaceOfOrigin(){
  36. return this.placeOfOrigin;
  37. }
  38. public void setPlaceOfOrigin(String placeOfOrigin){
  39. this.placeOfOrigin = placeOfOrigin;
  40. }
  41. //实现Comparable接口
  42. public int compareTo(Object obj){
  43. Person p = (Person)obj;
  44. if(this.age > p.age){
  45. return 1;
  46. } else if(this.age == p.age){
  47. return 0;
  48. } else {
  49. return -1;
  50. }
  51. }
  52. }
  53. class Student extends Person{
  54. private String school;//读校
  55. public Student(int age, String sex, String placeOfOrigin, String school){
  56. setAge(age);
  57. setSex(sex);
  58. setPlaceOfOrigin(placeOfOrigin);
  59. this.school = school;
  60. }
  61. public String getSchool(){
  62. return this.school;
  63. }
  64. public void setSchool(String school){
  65. this.school = school;
  66. }
  67. }
  68. class CollegeStudent extends Person{
  69. private String tutor;//导师
  70. private double subsidy;//补助
  71. public String getTutor(){
  72. return this.tutor;
  73. }
  74. public void setTutor(String tutor){
  75. this.tutor = tutor;
  76. }
  77. public double getSubsidy(){
  78. return this.subsidy;
  79. }
  80. public void setSubsidy(double subsidy){
  81. this.subsidy = subsidy;
  82. }
  83. }

二、给你一个set 如何根据学生类的name进行对象排序

三、给你一台服务器,要你装Tomcat,你得做什么

在Linux上安装:上传安装包 解压之后,配置  tomcat7\conf\tomcat-users.xml,在文件的最下面,</tomcat-users>的上面添加

[python] view plain copy

  1. <role rolename="manager-gui"/>
  2. <role rolename="manager-script"/>
  3. <role rolename="manager"/>
  4. <role rolename="admin-gui"/>
  5. <user username="admin" password="admin" roles="manager-gui,manager,manager-script,admin-gui"/>

四、怎么取map中的key

两种方法  Map 的   map.keySet();和map.entrySet();方法

测试代码:

[python] view plain copy

  1. package com.lyt.test;
  2. import java.util.Collection;
  3. import java.util.HashMap;
  4. import java.util.Iterator;
  5. import java.util.Map;
  6. import java.util.Set;
  7. public class MapTest {
  8. public static void main(String[] args) {
  9. getKeySet();
  10. getEntrySet();
  11. }
  12. //根据Map 中的 keySet()方法获取
  13. public static void getKeySet(){
  14. System.out.println("--------keySet()方法获取-------------");
  15. Map map = new HashMap();
  16. map.put(1, "a");
  17. map.put(2, "b");
  18. System.out.println(map.keySet());
  19. Collection s = map.keySet();
  20. System.out.println(s);
  21. Iterator iter2 = (Iterator)map.keySet().iterator();
  22. while(iter2.hasNext()){
  23. System.out.print(iter2.next() + ", ");
  24. }
  25. System.out.println("========得到value的方法========");
  26. Collection c = map.values();
  27. System.out.println(c);
  28. Iterator iter1 = (Iterator)map.values().iterator();
  29. while(iter1.hasNext()){
  30. System.out.print(iter1.next() + ", ");//一个一个获取value值
  31. }
  32. }
  33. //根据Map 中的 entrySet()方法获取
  34. public static void getEntrySet(){
  35. System.out.println("--------entrySet()方法获取-------------");
  36. Map map = new HashMap();
  37. map.put(1, "a");
  38. map.put(2, "b");
  39. System.out.println(map.entrySet());
  40. Collection s = map.entrySet();
  41. System.out.println(s);
  42. Iterator iter2 = (Iterator)map.entrySet().iterator();
  43. while(iter2.hasNext()){
  44. System.out.print(iter2.next() + ", ");
  45. }
  46. }
  47. }

五、hashmap是怎么存储数据的

hashmap 实质上一个数组和链表的结合体,记得严尉敏版的C数据结构上将这个称为“散列表”。对于hashmap存储可以这样理解,数组用于存储key,链表用于存储value,每个链表都链接在数组中的一个元素上。

arraylist 实质上就是一个顺序的动态数组,开始时以一默认值开一数组,满了后再扩容,且实现了动态添加和删除。

二者性能区别:hashmpa 用于快速查找,但是arraylist基本上不浪费空间。各有利弊吧

查看详情:http://blog.csdn.net/vking_wang/article/details/14166593

六、是不是用了maven,有对项目分过模块吧,你知道为什么要分吗?(这个没法说 自己想吧)

1、什么业务场景下我们使用递归写法,请举一个例子,并予以说明

2、dubbo、webservice或你熟悉的接口与http接口的区别?我们在做这些接口交互时应当注意什么?

webservice做接口 跟http做接口有啥区别 :协议不一样

3、为何我们在开发中要使用到序列号和反序列号,你都知道哪些序列化工具,并描述各自的优缺点

序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决对象流读写操作时可能引发的问题(如果不进行序列化可能会存在数据乱序的问题)。要实现序列化,需要让一个类实现Serializable接口,该接口是一个标识性接口,标注该类对象是可被序列化的,然后使用一个输出流来构造一个对象输出流并通过writeObject(Object obj)方法就可以将实现对象写出(即保存其状态);如果需要反序列化则可以用一个输入流建立对象输入流,然后通过readObject方法从流中读取对象。序列化除了能够实现对象的持久化之外,还能够用于对象的深度克隆

4、列举关系型数据库和非关系型数据库的区别?对于目前nosq数据库说说它的应用场景和优势

5、简述hibernate和mybatis的区别,你偏向使用哪种,为什么?

参见:http://blog.csdn.net/liyintaoliuyun/article/details/51446758

6、我们在使用springmvc进行开发时,是如何对数据进行封装的和校验的,对于restful的传输风格是否了解,说说它的特点

7、简述spring的事务特性?什么业务场景需要用到事务控制

8、java为什么要有垃圾回收?什么时候进行?如何进行检测内存泄漏

GC是垃圾收集的意思,内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。Java程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,可以调用下面的方法之一:System.gc() 或Runtime.getRuntime().gc() ,但JVM可以屏蔽掉显示的垃圾回收调用。

垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常是作为一个单独的低优先级的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。在Java诞生初期,垃圾回收是Java最大的亮点之一,因为服务器端的编程需要有效的防止内存泄露问题,然而时过境迁,如今Java的垃圾回收机制已经成为被诟病的东西。移动智能终端用户通常觉得iOS的系统比Android系统有更好的用户体验,其中一个深层次的原因就在于Android系统中垃圾回收的不可预知性。

补充:垃圾回收机制有很多种,包括:分代复制垃圾回收、标记垃圾回收、增量垃圾回收等方式。标准的Java进程既有栈又有堆。栈保存了原始型局部变量,堆保存了要创建的对象。Java平台对堆内存回收和再利用的基本算法被称为标记和清除,但是Java对其进行了改进,采用“分代式垃圾收集”。这种方法会跟Java对象的生命周期将堆内存划分为不同的区域,在垃圾收集过程中,可能会将对象移动到不同区域:

  • 伊甸园(Eden):这是对象最初诞生的区域,并且对大多数对象来说,这里是它们唯一存在过的区域。
  • 幸存者乐园(Survivor):从伊甸园幸存下来的对象会被挪到这里。
  • 终身颐养园(Tenured):这是足够老的幸存对象的归宿。年轻代收集(Minor-GC)过程是不会触及这个地方的。当年轻代收集不能把对象放进终身颐养园时,就会触发一次完全收集(Major-GC),这里可能还会牵扯到压缩,以便为大对象腾出足够的空间。

与垃圾回收相关的JVM参数:

  • -Xms / -Xmx --- 堆的初始大小 / 堆的最大大小
  • -Xmn --- 堆中年轻代的大小
  • -XX:-DisableExplicitGC --- 让System.gc()不产生任何作用
  • -XX:+PrintGCDetail --- 打印GC的细节
  • -XX:+PrintGCDateStamps --- 打印GC操作的时间戳

9、你们公司的项目都用了那些框架,都用了Spring的那些核心,项目中怎么体现的
spring参照http://blog.csdn.net/lovesomnus/article/details/46470255

10、你们是如何实现分布式的

11、你用过什么缓存数据库。什么情况下需要用到

12、你在项目中用过多线程吗?你知道如何实现多线程吗?你那里为什么要用到多线程

Java 5以前实现多线程有两种实现方法:一种是继承Thread类;另一种是实现Runnable接口。两种方式都要通过重写run()方法来定义线程的行为,推荐使用后者,因为Java中的继承是单继承,一个类有一个父类,如果继承了Thread类就无法再继承其他类了,显然使用Runnable接口更为灵活。

补充:Java 5以后创建线程还有第三种方式:实现Callable接口,该接口中的call方法可以在线程执行结束时产生一个返回值,代码如下所示:

[python] view plain copy

  1. package com.lyt.test;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.concurrent.Callable;
  5. import java.util.concurrent.ExecutorService;
  6. import java.util.concurrent.Executors;
  7. import java.util.concurrent.Future;
  8. /**
  9. * 实现Callable接口,该接口中的call方法可以在线程执行结束时产生一个返回值
  10. * @author Administrator
  11. *
  12. */
  13. class MyTask implements Callable<Integer> {
  14. private int upperBounds;
  15. public MyTask(int upperBounds) {
  16. this.upperBounds = upperBounds;
  17. }
  18. @Override
  19. public Integer call() throws Exception {
  20. int sum = 0;
  21. for (int i = 1; i <= upperBounds; i++) {
  22. sum += i;
  23. }
  24. return sum;
  25. }
  26. }
  27. public class Test {
  28. public static void main(String[] args) throws Exception {
  29. List<Future<Integer>> list = new ArrayList<>();
  30. ExecutorService service = Executors.newFixedThreadPool(10);
  31. for (int i = 0; i < 10; i++) {
  32. list.add(service.submit(new MyTask((int) (Math.random() * 100))));
  33. }
  34. int sum = 0;
  35. for (Future<Integer> future : list) {
  36. while (!future.isDone())
  37. ;
  38. sum += future.get();
  39. }
  40. System.out.println("返回值:" + sum);
  41. }
  42. }

13、你了解消息队列吗?

14、你们的项目业务量有多大?如果某张表数据量越来越大,查询会越来越慢,你会怎么处理

写sql的时候 注意优化 不用这么多的join ,做分区做索引

下面举两个简单的例子:

图书馆的例子:一个图书馆那么多书,怎么管理呢?建立一个字母开头的目录,例如:a开头的书,在第一排,b开头的在第二排,这样在找什么书就好说了,这个就是一个聚集索引,可是很多人借书找某某作者的,不知道书名怎么办?图书管理员在写一个目录,某某作者的书分别在第几排,第几排,这就是一个非聚集索引

字典的例子:字典前面的目录,可以按照拼音和部首去查询,我们想查询一个字,只需要根据拼音或者部首去查询,就可以快速的定位到这个汉字了,这个就是索引的好处,拼音查询法就是聚集索引,部首查询就是一个非聚集索引.

看了上面的例子,下面的一句话大家就很容易理解了:聚集索引存储记录是物理上连续存在,而非聚集索引是逻辑上的连续,物理存储并不连续。就像字段,聚集索引是连续的,a后面肯定是b,非聚集索引就不连续了,就像图书馆的某个作者的书,有可能在第1个货架上和第10个货架上。还有一个小知识点就是:聚集索引一个表只能有一个,而非聚集索引一个表可以存在多个。

SQL索引有两种,聚集索引和非聚集索引,索引主要目的是提高了SQL Server系统的性能,加快数据的查询速度与减少系统的响应时间 
创建索引的语法:

CREATE [UNIQUE][CLUSTERED | NONCLUSTERED]  INDEX  index_name

ON {table_name | view_name} [WITH [index_property [,....n]]

说明:

UNIQUE: 建立唯一索引。

CLUSTERED: 建立聚集索引。

NONCLUSTERED: 建立非聚集索引。

Index_property: 索引属性。

UNIQUE索引既可以采用聚集索引结构,也可以采用非聚集索引的结构,如果不指明采用的索引结构,则SQL Server系统默认为采用非聚集索引结构。

删除索引语法:

DROP INDEX table_name.index_name[,table_name.index_name]

说明:table_name: 索引所在的表名称。

index_name : 要删除的索引名称。

使用系统存储过程:sp_helpindex 查看指定表的索引信息。

执行代码如下:

Exec sp_helpindex book1;

15、在项目中可能碰到这种情况,公司要出报表了,但是后台业务还在跑,这会导致报表查询会被死锁,你有什么好的解决办法吗?

做后台业务的方法和出报表的方法做线程同步

或者后台业务处理完给个标示  然后才可以出报表(做标示比较好 个人推荐)

16、某个账户表中有N个账户,每个账户在记账的时候都会被不同的记账流程所操作进行余额更新,你是如何避免数据不一致以及死锁的?

余额更新的方法加锁

17、你了解过restful吧,你能说说它吗?它和webservice有什么异同

协议不一样,

如果数据类型比较复杂 用webservice

18、你了解Linux吗?如果让你修改一个文件,你怎么改?

vim 文件名.xml等等文件 执行之后进去 然后  i  就可以操作了,:qw  保存并退出
参照:http://blog.csdn.net/liyintaoliuyun/article/details/51407006

19、你们项目中对请求验证是怎么做的?

原文地址:https://www.cnblogs.com/shan1393/p/9017439.html

时间: 2024-11-02 20:10:35

面试题:总结 !=!=未看的相关文章

面试题:面试题归类 !=!=未看 2

一.Java基础 1. String类为什么是final的. 答:主要是为了"效率" 和 "安全性" 的缘故.若 String允许被继承, 由于它的高度被使用率, 可能会降低程序的性能,所以String被定义成final. 2. HashMap的源码,实现原理,底层结构. 答:Java集合---HashMap源码剖析 3. 说说你知道的几个Java集合类:list.set.queue.map实现类咯... 4. 描述一下ArrayList和LinkedList各自实

面试题:各大公司Java后端开发面试题总结 !=!未看

ThreadLocal(线程变量副本) Synchronized实现内存共享,ThreadLocal为每个线程维护一个本地变量. 采用空间换时间,它用于线程间的数据隔离,为每一个使用该变量的线程提供一个副本,每个线程都可以独立地改变自己的副本,而不会和其他线程的副本冲突. ThreadLocal类中维护一个Map,用于存储每一个线程的变量副本,Map中元素的键为线程对象,而值为对应线程的变量副本. ThreadLocal在Spring中发挥着巨大的作用,在管理Request作用域中的Bean.事

面试题: 数据库 未看4

什么是存储过程?有哪些优缺点? 什么是存储过程?有哪些优缺点? 存储过程就像我们编程语言中的函数一样,封装了我们的代码(PLSQL.T-SQL). 存储过程的优点: 能够将代码封装起来 保存在数据库之中 让编程语言进行调用 存储过程是一个预编译的代码块,执行效率比较高 一个存储过程替代大量T_SQL语句 ,可以降低网络通信量,提高通信速率 存储过程的缺点: 每个数据库的存储过程语法几乎都不一样,十分难以维护(不通用) 业务逻辑放在数据库上,难以迭代 三个范式是什么 三个范式是什么 第一范式(1N

面试题:面试题归类 !=!=未看

Java开发岗位面试题归类汇总,在微博看到的一篇文章,只有问题,没有答案,我具体写了一下每个问题大致的参考答案,仅供参考 一.Java基础 1.String类为什么是final的 答:主要是为了"效率" 和 "安全性" 的缘故.若 String允许被继承, 由于它的被使用率很高, 可能会降低程序的性能,所以String被定义成final.Final可以修饰类.方法.属性,分别代表类不可继承,方法不可重写,属性值不可改变.其中对于属性的修改,当final修饰基本数据类

面试题: 各种 !=!=未看

1.servlet执行流程 客户端发出http请求,web服务器将请求转发到servlet容器,servlet容器解析url并根据web.xml找到相对应的servlet,并将request.response对象传递给找到的servlet,servlet根据request就可以知道是谁发出的请求,请求信息及其他信息,当servlet处理完业务逻辑后会将信息放入到response并响应到客户端. 2.springMVC的执行流程 springMVC是由dispatchservlet为核心的分层控制

面试题: 数据库未看8

存储过程和函数的区别 存储过程是用户定义的一系列sql语句的集合,涉及特定表或其它对象的任务,用户可以调用存储过程,而函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户表. . l         视图的优点?建立视图的基本语法结构? 视图的优点: 1.       视图对于数据库的重构造提供了一定程度的逻辑独立性.数据的逻辑独立性是指数据库重构造时,如数据库扩大 (增加了新字段,新关系等),用户和用户程序不会受影响. 2.       简化了用户观点.视图的机制使用户

js未看的文章

Web前端研发工程师编程能力飞升之路 在浏览器的背后(一) -- HTML语言的词法解析 组件化的前端开发流程 用js书写UI组件之js基础知识 GC与JS内存泄漏 蓝色理想之前端开发 w3c JavaScript Puzzlers react AngularJS入门教程 jQuery源码分析-如何做jQuery源码分析 http://jsfiddle.net/ http://fex.baidu.com/ idea独创意 js未看的文章,布布扣,bubuko.com

面试题: !=!=未看4

以下面试题是针对最近热门Java面试题汇总,仅供参考! 一.自我介绍,以及介绍最近一个项目 简单介绍一下自己,姓名,籍贯,毕业以来工作多少年,在哪些公司工作过.一语带过即可.然后介绍一下最近做的一个项目,包含整体架构设计,涉及前后端框架,缓存,中间件以及数据库等. 二.String特性.StringBuffer 和 StringBuilder 区别 String a = "str"; String b = new String("str"):问 a == b , a

面试题: mysql数据库 未看7

mysql数据库面试总结 2017年09月04日 00:11:40 阅读数:151 结合网上大神还有自己面试经历,收集的总结Mysql面试题,方便自己准备面试: mysql一个永远都复习不完,尽量总结,差不多就可以去面试(个人观点) 1.数据库事务的四个特性及含义 数据库事务transanction正确执行的四个基本要素.ACID,原子性(Atomicity).一致性(Correspondence).隔离性(Isolation).持久性(Durability). 原子性:整个事务中的所有操作,要