面试问题整理

主要问到的问题

一、常见框架:spring、spring mvc、hibernate、struts、ibatis/mybatis、log4j、Redis、Dubbo

二.网络:https/http;tcp/ip

三.linux命令

四.数据库:oracle、mysql、mango db、no sql

五.设计模式:单例模式,工厂模式、策略模式、观察者模式、装饰者模式、适配器模式、代理模式

六.前端:html、jsp,css、xml、jquery、javascript、json、ajax

七.接口:webservice、Restful、hessian

八.消息:Active mq/Rabbitmq

九.分布式缓存:memcached/Redis

十.java基础

十一:工具:eclipse/idea;svn/git ;maven;

十二:jvm调优

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

一、常见框架:spring、spring mvc、hibernate、struts、ibatis/mybatis、log4j、Redis、Dubbo

1.Spring:

11.Java中Runnable和Callable有什么不同?

二.网络:https/http;tcp/ip

三.linux命令

四.数据库:oracle、mysql、mango db、no sql

五.设计模式:单例模式,工厂模式、策略模式、观察者模式、装饰者模式、适配器模式、代理模式

1写出单例模式(至少两种):

懒汉模式

class Singleton{

          private static Singleton s;

           private Singleton(){}

           public static Singleton getSingleton(){

             if(s==null){

             s=new Singleton();

                }

            return s;

        } 

}

饿汉模式:

class Singleton{

private static Singleton s=new Singleton();

private Singleton(){}

public Singleton getSingleton(){

return s;

}

}

2.项目中用到的是哪种设计模式?

六.前端:html、jsp,css、xml、jquery、javascript、json、ajax

七.接口:webservice、Restful、hessian


八.消息:Active mq/Rabbitmq

1.Active Mq常用的协议?


面试问题整理_第1张图片

2.为什么要用active mq,为什么不用多线程调用webservice接口方式进行通信?Active mq的应用场景?

为什么要用active mq:消息队列的主要作用是为了解决高并发访问高峰,加快响应速度。一般情况下,不用消息队列,客户端来的请求会直接写入数据库,在访问高峰期,高并发的情况下,会对数据库访问造成压力,响应发生延迟,造成数据库访问的瓶颈。使用队列后,用户的请求发给队列后会立刻返回,之后再由消息队列的消费者进程监听对应的队列,从消息队列中获取数据,异步写入数据库。消息队列的服务处理速度远快于数据库,因此用户的响应延迟可得到有效改善。

为什么不用多线程调用webservice接口方式进行通信?WebService:用来远程调用服务,达到打通系统、服务复用的目的。是SOA系统架构——面向服务架构的体现。ActiveMQ:一般用来做消息通信,特别是异步的消息处理,把同步的处理变成异步消息,使得系统解耦、消峰平谷。WebService与ActiveMQ的区别:Webservice近乎实时通信,而MQ却通常是延时通信;MessageQueue组件会把消息持久化放在本地,所以哪怕突然死机了,请求消息也是不会丢失的。

Active mq的应用场景?1.异步处理:用户注册后,需要发注册邮件和注册短信;引入active mq,注册信息写入数据库后,注册邮件和发送短信的消息写入消息队列后直接返回。会比串行和并行的做法更快捷。2.应用解耦:用户下单后,订单系统需要通知库存系统;3.流量削锋也是消息队列中的常用场景,一般在秒杀或团抢活动中使用广泛(https://blog.csdn.net/he90227/article/details/50800646)

九.分布式缓存:memcached/Redis

十.java基础

1.多线程问题:

11.Java中Runnable和Callable有什么不同?

Runnable和Callable都代表那些要在不同的线程中执行的任务。Runnable从JDK1.0开始就有了,Callable是在 JDK1.5增加的。它们的主要区别是Callable的 call() 方法可以返回值和抛出异常,而Runnable的run()方法没有这些功能。Callable可以返回装载有计算结果的Future对象。

1.2.Thread 类中的start() 和 run() 方法有什么区别?

start()方法被用来启动新创建的线程,而且start()内部 调用了run()方法,这和直接调用run()方法的效果不一样。当你调用run()方法的时候,只会是在原来的线程中调用,没有新的线程启 动,start()方法才会启动新线程。

1.3.你们用多线程吗?java中实现多线程的方法?说说项目中使用的多线程案例

用了,实现runable接口或者集成thread类,

场景一:一个业务逻辑有很多次的循环,每次循环之间没有影响,比如验证1万条url路径是否存在,正常情况要循环1万次,逐个去验证每一条URL,这样效率会很低,假设验证一条需要1分钟,总共就需要1万分钟,有点恐怖。这时可以用多线程,将1万条URL分成50等份,开50个线程,没个线程只需验证200条,这样所有的线程执行完是远小于1万分钟的。

场景二:需要知道一个任务的执行进度,比如我们常看到的进度条,实现方式可以是在任务中加入一个整型属性变量(这样不同方法可以共享),任务执行一定程度就给变量值加1,另外开一个线程按时间间隔不断去访问这个变量,并反馈给用户。

1.4sleep()和wait()的区别:

sleep释放资源但是不会释放锁,wait会释放资源和锁,使得其他线程可以使用同步控制块或者锁。

sleep需要捕获异常,wait不需要;

wait,notify,notifyAll 只能够在同步块或者同步方法中使用,sleep能够在任何地方使用

2.数据类型问题:

2.1string 和stringBuffer区别:

string是不可变类,StringBuffer提供字符串修改

解释:String str = 'abc';str = str + 'def';

‘abc’和‘def’是两个单独的对象,编译的时候会拜放到常量池中。然后执行String str = ‘abc’将str‘abc’指向这个常量,然后str = str + ‘def’会重新创建一个‘abcdef’的对象,并将str指向这个对象。所以以上的代码中,我们共创建了3个对象

new StringBuffer("abc").equals(new StringBuffer("abc"))   false    stringBuffer没有实现equals方法

2.2:String 是否可以被继承:

String不可以被继承,因为String是final的

2.3:ArrayList和Vector的区别

同步性:vector是线程安全的(同步的),arrayList是线程不安全的

数据增长:ArrayList和vector都有一个初始的容量大小,Vector增长原来的1倍,arrayList增长原来的0.5倍。

2.4:HashMap和HashTable的区别:

区别:

HashTbale是同步的(线程安全的),HashMap是线程不安全的

hashMap允许将null作为键或者值,而hashTable不允许

2.5:List和Map的区别:

List是存储单列数据的集合,map是存储双列数据的集合

List存储的数据是有序的并且能够重复,map存储的数据是无序的,其键是不能重复的,值是可以重复的。

2.6 List,Map,Set的三个接口,存取数据时候各有什么特点?

List和set都是单列元素的集合,他们有共同的父接口collection,list和set都通过add来存元素

set不允许有重复的元素,set取元素时只能以iterator取得所有的元素,再逐一遍历各个元素。

List允许重复元素,list通过get()方法获取元素

Map是双列集合,map通过put方法存储一对键值对,通过get(键)获取值,map不可以存储重复的键。

2.7:ArrayList,vector,LinkedList的存储性能和特点:

ArrayList和Vector都是数组方式存储数据,他们允许按序号索引元素,但插入数据要涉及数组移动等内存操作,所以插入慢而索引快。vector是线程安全的,arrayList是线程不安全的。

LinkedList使用双向链表方式存储数据,插入块,索引慢。

2.4 collection 框架的结构:

面试问题整理_第2张图片
(摘自https://blog.csdn.net/qq_28261343/article/details/52614411)

2.5说出常用的类、包、接口各五个:

类:Date,String,ArrayList,HashMap,StringBuffer;Object

包:java.Util;java.lang;java.oi;java.sql;org.hibernate

接口:List;Map;Set;Iterator;Runable

3.流:

3.1:java中有几种类型的流?Jdk为美中类型的流提供了一些抽象类供他们供他们继承,清说出他们分别是哪些?

两种:字符流和字节流;

字节流:inputStream,outputStream;

字符流:inputStreamReader;outputStreamWriter


字节流:


面试问题整理_第3张图片
摘自https://blog.csdn.net/qq924862077/article/details/52687487



面试问题整理_第4张图片
摘自https://blog.csdn.net/qq924862077/article/details/52687487

字符流:


面试问题整理_第5张图片
摘自https://blog.csdn.net/qq924862077/article/details/52687487


面试问题整理_第6张图片
摘自https://blog.csdn.net/qq924862077/article/details/52687487

3.算法:

3.1:快速排序:对于一组给定的记录,通过一趟排序后,将原序列分为两部分,其中前一部分的所有记录均比后一部分的所有记录小,然后再依次对前后两部分的记录进行快速排序,递归该过程,直到序列中的所有记录均有序为止。

public class QuickSort {

    public static void sort(int[] a, int low, int high) {

        if(low>=high)

            return;

        int i = low;

        int j = high;

        int key = a[i];

        while (i < j) {

            while (i < j && a[j] >= key)

                j--;

            a[i++] = a[j];

            while (i < j && a[i] <= key)

                i++;

            a[j--] = a[i];

        }

        a[i] = key;

        sort(a,low,i-1);

        sort(a,i+1,high);

    }


    public static void quickSort(int[] a) {

        sort(a, 0, a.length-1);

        for(int i:a)

            System.out.print(i+" ");

    }


    public static void main(String[] args) {

        int[] a = { 49, 38, 65, 97, 76, 13, 27, 50 };

        quickSort(a);

    }

}

3.2:冒泡排序:比较相邻的两个元素,值大的放置到右边

public class BubbleSort{

 int[] a ={3,6,1,9,32,67,56,21,4,5,10};

for(int i=0;i

  for(int j=i+1;j

  if(a[i]>a[j]){

 int temp =a[i];

a[i]=a[j];

a[j]=a[i];

   }


  }

}

}

十一:工具:eclipse/idea;svn/git ;maven;

十二:JVM调优

你可能感兴趣的:(面试问题整理)