java面试点小分享

111 阅读4分钟

这是我参与8月更文挑战的第31天,活动详情查看:8月更文挑战

设计模式有哪些?(23种)

  1. 单例模式,即一个类有且仅有一个对象,就像生活中仅有一个太阳、月亮。模式结构分为饿汉式和懒汉式。
  2. 工厂模式,用一个方法来代替new关键字。相当于一个容器,用来生产对象,spring的核心就是工厂模式。
  3. 代理模式(porxy),为了方便对象的访问提供了代理商。我们买东西时如果每个人都去相应的工厂去买,不仅对工厂还是对消费者来说都很麻烦,因此就有了代理商的出现,Spring Aop中就是用代理模式(动态代理、静态代理)
  4. 适配器模式、策略模式、模板模式。

http和https的区别?

  1. https协议需要到ca申请证书,需要一定费用。
  2. http是超文本传输协议,信息是明文传输,https则具有安全性的ssl加密传输协议。
  3. http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
  4. http的连接很简单,是无状态的;https协议是由ssl+http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。

项目部署?

Tomcat是轻量级的服务器,项目部署在上边供外界访问操作,但dubbo的项目部署在zookeeper中。

jdk 1.8.0的新特性?

  1. 接口的默认方法:jdk1.8.0中允许我们给接口添加一个非抽象的方法实现,只需要使用default关键字即可,这个特征又叫做扩展方法。
  2. 增加了Lambda表达式。
  3. Java 8为函数式接口引入了一个新注解@FunctionalInterface,主要用于编译级错误检查,加上该注解,当你写的接口不符合函数式接口定义的时候,编译器会报错。

byte的取值范围?

-128~127

  • 编译java的命令是:javac 文件名.java
  • 运行java的命令是:java 文件名
  • 产生java文档的命令是:javadoc

String、StringBuffer和StringBuilder的区别?

  1. String通常用来定义字符串常量,StringBuffer和StringBuilder是可变类,StringBuffer和StringBuilder类基本相似,主要区别在于StringBuffer类的方法是多线程的、安全的;StringBuilder类的方法是单线程的、非安全的。但在单线程中的性能StringBuilder的速度更快。StringBuffer和StringBuilder通常用来对字符的拼接。
  2. String也可进行拼接,但它的底层是不可变字符串,如果String arr=a1+a2;所创建的三个对象都会占用内存,jvm无法清理垃圾,造成内存的大量浪费。
  3. String适用于少量的字符串操作的情况,StringBuilder适用于单线程下在字符串缓冲区进行大量数据操作,StringBuffer适用于多线程下在字符串缓冲区进行大量操作(同步锁)。

final、finally和finalize的区别?

  1. final可修饰变量,方法和类。
  2. finally是异常处理结构的一部分,表示总是执行。
  3. finalize是一个方法,在垃圾对象回收之前调用。

char和vchar的区别?

  1. 都是用来存储字符串的,只是存储方式不同。
  2. char的长度是固定的,而vchar的长度是可变化的。(例如“abc”存储char(10)长度为10,而vchar(10)的长度为3).
  3. char的效率比vchar效率高,但vchar比char节省空间。

什么是反射机制,它的作用?

当类加载之后,jvm会自动生成一个class类对象,并且每个类仅产生一个class对象,由class对象反向获取类的信息的过程叫反射。

  • between相当于>= AND <=

Map和List的区别?

由于存储结构的不同将集合分为了两大类,一类是单列集合collection,一类是双列集合Map,其中collection有两个子接口,List和Set,要说List和Map的区别:

  1. 他们两者都属于接口不能被实例化。
  2. List继承Collection,Map与Collection无关。
  3. List为单列,Map为双列,存储key-value。

什么场景下使用List、Set、Map?

  • 如果经常会使用索引来对容器中的元素进行访问,那么List是 最好的选择,如果已经知道索引的话,Arraylist更容易查找,linkedlist更适合插入和删除。
  • 如果要保证插入元素唯一性用Set。
  • 如果以key-value形式选择Map。

多线程实现的方法? 两种方法的区别?

  1. 第一种是继承Thread类,覆写Thread类的run()方法。
  2. 第二种是是实现Runnable接口,重写Runnable中的run()方法。
  • Thread是Runnable接口的子类,实现Runnable接口的方式解决了Java单继承的局限。
  • Runnable接口实现多线程比继承Thread类更加能描述数据共享的概念。
  • 注意:通过实现Runnable接口解决了Java单继承的局限,所以不管其他的区别联系是什么,这一点就决定了多线程最好是通过实现Runnable接口的方式。

区别:相同程序代码的线程去处理同一资源(例售票) Runnable避免由于Java的单继承带来的局限性(一个类继承了一个父类就无法再继承Thread的)。

面向对象与面向过程的区别?

  1. 万物皆对象,面向对象的特征有封装性、继承性、多态性。面向对象更加注重于重用。
  2. 而面向过程注重于做事的过程与步骤。

举例来说:学生起床之后干的事,(1)起床 (2)穿衣 (3)洗脸刷牙 (4)去学校。面向过程的设计思路为:将四件事分为四个子程序,然后主程序按照这四步一步步的执行;而如果是面向对象的化,只抽象出学生这个类即可,它会包含这四种方法,顺序不会体现。

sql语句查表的出去前10和后10的中间部分?

  • 升序 order by asc
  • 降序 order by desc

select * from sc where sc.id not in (select t.id from(select sc.id from sc order by sc.id asc limit 0,10)as t) and sc.id not in (select t.id from (select sc.id from sc order by sc.id desc limit 0,10) as t)

get和post

  1. get是从服务器上获取数据,post是向服务器发送数据。
  2. 在客户端,get方式通过URL提交数据,数据可在URL中看到。post方式则放在HTML header内提交,因此,get不安全,post安全。
  3. get提交的数据只能有1024字节,而post则没有此限制。

登陆时Session如何用,如何将有效时间设为7天?

request.getSession.SetAttribute("User",user);
 
Session.SetMaxInactiveInterval(30*60);

以秒为单位。

自定义日期格式(模式化)

simpleDateFormat df =new simpleDateFormat("YYYY-MM");
df.format(new Date());

jdbc是什么?jdbc的工作过程?

jdbc是Java和关系数据库之间的桥梁,是一种用于执行SQL语句的Java API,可以为多种数据库提供统一的访问工作原理: 加载驱动->创建链接->执行SQL语句->返回执行结果->关闭相关连接。

svn和git的各自优缺点?

  • Git是分布式的,svn不是。Git允许每个人都克隆一个自己的版本库,即使在无网的条件下也可进行提交文件,查看历史版本记录,创建项目分支。
  • Git速度快、灵活,适合分布式开发,但保密性差。
  • svn易于管理,保证安全,适合人说不多的项目开发,但svn必须有服务器,且必须有网。