一。Java基础 1。抽象类和接口的区别。 答:(1)。抽象类有默认的方法实现。接口是完全抽象的,不存在方法的实现。 (2)。抽象类子类需要extends关键字继承。接口使用关键字Implements来实现接口。 (3)。抽象类有构造器。接口没有。 (4)。抽象类可以用多种修饰符。接口只能是public。 (5)。抽象方法可以继承一个类和实现多个接口。接口只能继承一个或多个其他接口。 (6)。抽象方法速度快。 (7)。添加新方法,抽象类可以给它提供默认的实现,不需要改变现在的代码。接口必须改变现在的接口的子类 2。Java中是否可以覆盖(override)一个private或者是static的方法?为什么? 答:不可以。 static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。也不可以覆盖private的方法,因为private修饰的变量和方法只能在当前类中使用,如果是其他的类继承当前类是不能访问到private变量或方法的,当然也不能覆盖。 3。解释内存中的栈(stack)、堆(heap)和方法区(methodarea)的用法。 答:定义一个基本数据类型的变量,一个对象的引用,还有就是函数调用的现场保存都使用JVM中的栈空间。通过new关键字和构造器创建的对象则放在堆空间。方法区和堆都是各个线程共享的内存区域,比如常量池。 4。super()与this()的区别? 答:super从子类中调用父类的构造方法,this()在同一类内调用其它方法。 5。ArrayList和LinkedList有什么区别。 答:ArrayList是动态数组结构,有索引,查询快,增删慢(因为要移动索引),LinkedList是链表结构,无索引,有指向前后的指针,查询需要从头开始向下寻找,增删快(只需要修改链表中指针的指向,不需要移动其他)。 6。怎么去掉一个集合中的重复数据,请列举两种以上的办法。 答:(1)。使用set集合。 (2)。使用java8中的contains()方法。 7。集合的泛型有什么优点? 答:达到元素类型明确的目的,提高了代码的复用性,减少了工作量 8。说说Java创建线程几种方法。 答:通过实现Runnable接口。通过继承Thread类本身。通过Callable和Future创建线程。 9。Java回调如何实现异步。 答:使用sleep方法,可实现先返回后执行方法。 10。JAVA中Exception和Error的区别。 Exception可以是可被控制或不可控制的,一般是程序错误。Error是不可控制的,一般是系统错误。 11。以下代码运行输出是(C)publicclassPerson{privateStringnamePerson;intage0;}publicclassChildextendsPerson{publicStringgrade;publicstaticvoidmain(String〔〕args){PersonpnewChild();System。out。println(p。name);}} A)输出:Person B)没有输出 C)编译出错 D)运行出错 12。在使用super和this关键字时,以下描述正确的是(A) A)在子类构造方法中使用super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行,否则编译不通过 B)super()和this()不一定要放在构造方法内第一行 C)this()和super()可以同时出现在一个构造函数中 D)this()和super()可以在static环境中使用,包括static方法和static语句块 13。Java中的集合类包括ArrayList、LinkedList、HashMap等类,下列关于集合类描述错误的是(C)(单选) A)ArrayList和LinkedList均实现了List接口 B)ArrayList的访问速度比LinkedList快 C)添加和删除元素时,ArrayList的表现更佳 D)HashMap实现Map接口,它允许任何类型的键和值对象,并允许将null用作键或值 14。下列哪个方法可以使线程从运行状态进入其他阻塞状态(A) A。sleepB。waitC。yieldD。start 15。以下对异常描述正常的有(ABD) A。异常分为Error和ExceptionB。Throwable是所有异常类的父类 C。Exception是所有异常类父类D。Exception包括RuntimeException和RuntimeException之外的异常二。Spring 1。简单说明Spring的俩大特性。 IOC:控制反转AOP:面向切面 一个spring项目启动,先有控制反转,后有面向切面。例如,先得注入控制层(controller),业务层(service),数据访问层(dao)之后,才能使用面向切面,例如对service进行事务处理Transactional,或者日志打印等等,对其进行横切。 2。简要说明SpringMVC运行流程。 客户端(浏览器)发送请求,直接请求到DispatcherServlet。 DispatcherServlet根据请求信息调用HandlerMapping,解析请求对应的Handler。 解析到对应的Handler后,开始由HandlerAdapter适配器处理。 HandlerAdapter会根据Handler来调用真正的处理器开处理请求,并处理相应的业务逻辑。 处理器处理完业务后,会返回一个ModelAndView对象,Model是返回的数据对象,View是个逻辑上的View。 ViewResolver会根据逻辑View查找实际的View, DispaterServlet把返回的Model传给View。 通过View返回。 3。列举Spring中的常用注解,并说明用处。 Controller定义表现层组件,Service定义业务逻辑层组件,Repository定义数据访问层资源库组件,Component定义其它组件。Autowired和Resource自动装配;Transactional大家都知道用于开启事务以及设置传播性、隔离性、回滚条件等;Configuration用于标注配置类,启用Java配置方式的Bean配置,Bean用于配置一个Bean;RequestBody从请求体(处理复杂数据,比如JSON),ResponseBody我们实现Restful接口的时候最常用了,把返回内容(序列化后)输出到请求体。 4。用过Springboot吗?我同时配置了xml和properties文件,会使用哪个文件呢? 先加载properties文件,再加载yml文件。三。SQL 1。请说明having和where的区别。 having是先分组在进行筛选,而where是先筛选再进行分组 2。如何同时查询两张没有关联的表。 使用unionall。 3。请说明不使用外键的好处。 保证数据的完整性和一致性;级联操作方便;将数据完整性判断托付给了数据库完成,减少了程序的代码量 4。hrstudent表 course表 studentcourse表 查询平均分低于80的学生,列出学生名字和平均分selects。name,avg(sc。score)asavgscorefromstudentcoursescleftjoinstudentsons。idsc。sidgroupbysc。sidhaving(avgscore80); 查询每个学生的总成绩,结果列出学生姓名和总成绩selectname,sum(score)totalfromstudent,studentcoursewherestudent。idstudentcourse。sidgroupbysid; 查出各科成绩的前三名,列出学生姓名和成绩,还有科目。selects。name,c。name,x。scorefromstudentcoursexleftjoinstudentsonx。sids。idleftjoincourseconc。idx。cidwhere3(selectcount()fromstudentcourseywherey。cidx。cidandy。scorex。score)orderbycid,scoredesc;