主要问到的问题
一、常见框架: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常用的协议?
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.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.算法:
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调优