java笔试开发基本知识

来源:互联网 发布:项目开发报价软件 编辑:程序博客网 时间:2024/05/21 17:29
1、http的6种请求方式


1.GET:GET可以说是最常见的了,它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。
2.HEAD:HEAD和GET本质是一样的,区别在于HEAD不含有呈现数据,而仅仅是HTTP头信息。有的人可能觉得这个方法没什么用,其实不是这样的。想象一个业务情景:欲判断某个资源是否存在,我们通常使用GET,但这里用HEAD则意义更加明确。
3.PUT:这个方法比较少见。HTML表单也不支持这个。本质上来讲, PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。举个例子:如一个用于提交博文的URL,/addBlog。如果用PUT,则提交的URL会是像这样的”/addBlog/abc123”,其中abc123就是这个博文的地址。而如果用POST,则这个地址会在提交后由服务器告知客户端。目前大部分博客都是这样的。显然,PUT和POST用途是不一样的。具体用哪个还取决于当前的业务场景。
4.DELETE:删除某一个资源。基本上这个也很少见,不过还是有一些地方比如amazon的S3云服务里面就用的这个方法来删除资源。
5.POST:向服务器提交数据。这个方法用途广泛,几乎目前所有的提交操作都是靠这个完成。
6.OPTIONS:这个方法很有趣,但极少使用。它用于获取当前URL所支持的方法。若请求成功,则它会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。


1XX:提供信息
2XX:连接管理相关应答
3XX:验证与用户相关应答
4XX:不固定的错误
5XX:文件系统相关应答


2、tcp的连接及基本知识


http://www.cnblogs.com/rollenholt/archive/2012/04/25/2469592.html


3、数据库锁机制




http://blog.csdn.net/github_36601823/article/details/60578044


4、台阶10级,小明最多跳3级,问有多少种方式
若所求方法为f(n),因为当台阶大于3时,可以看做f(n)=f(n-1)+f(n-2)+f(n-3);因为
public static void main(String[] args){int f1 = 1;int f2 = 2;int f3 = 4;int result = 0;for(int i = 4;i<=10;i++){result = f1+f2+f3;f1 = f2;f2 = f3;f3 = result;}System.out.println(result);}



5、单例模式


java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。
  单例模式有一下特点:
  1、单例类只能有一个实例。
  2、单例类必须自己自己创建自己的唯一实例。
  3、单例类必须给所有其他对象提供这一实例。
  单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。总之,选择单例模式就是为了避免不一致状态,避免政出多头。


第一种(懒汉,线程不安全):
 1 public class Singleton {   2     private static Singleton instance;   3     private Singleton (){}    4     public static Singleton getInstance() {   5     if (instance == null) {   6         instance = new Singleton();   7     }   8     return instance;   9     }  10 }  11 






这种写法lazy loading很明显,但是致命的是在多线程不能正常工作。


第二种(懒汉,线程安全):

 1 public class Singleton {   2     private static Singleton instance;   3     private Singleton (){} 4     public static synchronized Singleton getInstance() {   5     if (instance == null) {   6         instance = new Singleton();   7     }   8     return instance;   9     }  10 }  11 


这种写法能够在多线程中很好的工作,而且看起来它也具备很好的lazy loading,但是,遗憾的是,效率很低,99%情况下不需要同步。


第三种(饿汉):

1 public class Singleton {  2     private static Singleton instance = new Singleton();  3     private Singleton (){}4     public static Singleton getInstance() {  5     return instance;  6     }  7 }  8 


这种方式基于classloder机制避免了多线程的同步问题,不过,instance在类装载时就实例化,虽然导致类装载的原因有很多种,在单例模式中大多数都是调用getInstance方法, 但是也不能确定有其他的方式(或者其他的静态方法)导致类装载,这时候初始化instance显然没有达到lazy loading的效果。


第四种(饿汉,变种):


 1 public class Singleton {   2     private Singleton instance = null;   3     static {   4     instance = new Singleton();   5     }   6     private Singleton (){} 7     public static Singleton getInstance() {   8     return this.instance;   9     }  10 }  11

 
表面上看起来差别挺大,其实更第三种方式差不多,都是在类初始化即实例化instance。


第五种(静态内部类):
 1 public class Singleton {   2     private static class SingletonHolder {   3     private static final Singleton INSTANCE = new Singleton();   4     }   5     private Singleton (){} 6     public static final Singleton getInstance() {   7         return SingletonHolder.INSTANCE;   8     }   9 }  10 


 
这种方式同样利用了classloder的机制来保证初始化instance时只有一个线程,它跟第三种和第四种方式不同的是(很细微的差别):第三种和第四种方式是只要Singleton类被装载了,那么instance就会被实例化(没有达到lazy loading效果),而这种方式是Singleton类被装载了,instance不一定被初始化。因为SingletonHolder类没有被主动使用,只有显示通过调用getInstance方法时,才会显示装载SingletonHolder类,从而实例化instance。想象一下,如果实例化instance很消耗资源,我想让他延迟加载,另外一方面,我不希望在Singleton类加载时就实例化,因为我不能确保Singleton类还可能在其他的地方被主动使用从而被加载,那么这个时候实例化instance显然是不合适的。这个时候,这种方式相比第三和第四种方式就显得很合理。


第六种(枚举):
1 public enum Singleton {  2     INSTANCE;  3     public void whateverMethod() {  4     }  5 }  6 


这种方式是Effective Java作者Josh Bloch 提倡的方式,它不仅能避免多线程同步问题,而且还能防止反序列化重新创建新的对象,可谓是很坚强的壁垒啊,不过,个人认为由于1.5中才加入enum特性,用这种方式写不免让人感觉生疏,在实际工作中,我也很少看见有人这么写过。
 
第七种(双重校验锁):

 1 public class Singleton {   2     private volatile static Singleton singleton;   3     private Singleton (){}    4     public static Singleton getSingleton() {   5     if (singleton == null) {   6         synchronized (Singleton.class) {   7         if (singleton == null) {   8             singleton = new Singleton();   9         }  10         }  11     }  12     return singleton;  13     }  14 }  15 




6、用伪代码写出生产者消费者


http://blog.csdn.net/github_36601823/article/details/65948277


7、Java中的类库


https://wenku.baidu.com/view/25466255ad02de80d4d84014.html

1 0
原创粉丝点击