Java初级面试一般问题

  1. java语言的基本特性?

    面向对象、跨平台、多线程、异常处理机制、自动垃圾回收机制。

  2. java程序的执行过程?

    编译、运行—将java原码(.java文件)通过编译器(javac.exe)编译成JVM文件(.class文件) 将JVM文件通过java.exe执行输出结果。

  3. java中的数据类型?

    基本数据类型(byte、short、char、int、long、float、double、boolean)。

    引用数据类型(类-class、接口-interface、数组-[])。

  4. int 与Integer的区别?

    int基本数据类型,Integer是int的封装类。

    int变量不需要实例化,Integer变量需要实例化后才可以使用。

    int默认值是0,Integer默认值是null。

    int只在栈区开辟内存空间,Integer在栈区和堆区都有内存分配。

  5. ±*/与++/-- 的运算优先级?

    ++与—优先运算,谁在前先运算谁,变量在前先用后算,符号在前先自身+1或者-1再运算。 (+ - * /)正常运算,先算(* /)后算(+ -)。

  6. break 与continue的区别?

    遇到break跳出结束循环,遇到continue结束本次循环进入下次循环。

  7. java中for/while /do…while循环的区别?

    For循环有明确的循环次数,先判断循环条件后执行循环体。

    While没有明确的循环次数,先判断循环条件在执行循环体,可能一次也不执行。

    Do…while没有明确的循环次数,先执行do后面的语句,在判断循环条件,最少执行一次循环。

  8. java中类和对象的关系?

    类是抽象的,对象是具体的。类是对象的抽象化,对象是类的实例化。没有类就没有对象,没有对象类就没有意义。

  9. java中静态元素与实例元素的区别?

    静态变量属于类级别,实例变量属于对象级别。

    静态变量有static修饰,实例变量没有static修饰。

    静态变量可以使用类名调用,实例变量只能通过对象调用。

    静态变量是在运行前分配内存,实例变量是在运行时分配内存。

  10. java中基本类型与其对应的封装类的区别?

    基本类型只能按值传递,封装类是按引用类型进行传递。

    基本数据类型内存只分配在栈区,封装类内存在堆区,栈区引用。

    基本数据类型速度快,封装类可以更好的处理数据之间的转换。

  11. java中接口与抽象类的区别?

    接口使用interface修饰,抽象类是用abstract修饰。

    接口的实现使用implements,继承抽象类使用extends

    接口不能有构造函数,抽象类可以有构造函数。

    一个类可以实现多个接口,只能继承一个抽象类。

    接口只能使用public修饰,抽象类可以使用public和Protected修饰。

  12. java中常见的内部类有几种,有什么特点?

    静态内部类、成员内部类、局部内部类、匿名内部类。

    静态内部类:static修饰,不能访问外部类的普通成员变量,只能访问外部类的静态变量和静态方法。

    成员内部类:没有static修饰,可以自由访问外部类的属性和方法。

    局部内部类:定义在代码块内,不能被public、protected、private、static修饰。只能访问方法中定义的为final类型的局部变量。

    匿名内部类:不能有class、extends、implements,必须继承其他类或者其他接口。

  13. 子类可以继承父类的那些元素?

    子类可以继承父类除private修饰符修饰的属性,其他修饰符修饰的都可以继承。

  14. ==和equals 的区别是什么?

    ==是运算符号,equals是方法。==比equals运行速度快。

    ==对于基本数据类型是值比较,对于引用类型是引用比较,equals本质是引用比较,被Integer、String、Date重写equals方法就变成的值比较。

  15. collection与collections的区别?

    Collection是一个集合接口,提供集合对象基本操作通用接口方法。

    Collections是一个工具类,提供一系列静态方法对于集合元素进行排序、搜索、线程安全操作

  16. java中异常处理的过程?

    try{}中放可能出现异常的代码catch{}对捕获异常的处理。

    throw真实抛出一个异常、throws声明将要抛出一个异常。谁调用谁处理

  17. java中Error与Exception的区别?

    Error是错误,不可处理。Exception是异常,可捕获处理。

  18. 解释java中异常处理常用的关键字的作用?

    try、catch、throw、throws、finally

    try包含可能出现异常的保护代码

    catch捕获保护代码的异常。

    throw明确抛出一个异常。

    throws声明可能抛出任何异常。

    finally确保无论出现什么异常,都被执行的一段代码。

  19. String、StringBuffer 与StringBuilder 之间区别?

    String不可变字符串,每次操作都会产生一个新的字符串,指针将指向新的字符串。

    StringBuffer和StringBuilder继承自AbstractStringBuilder是可变字符串,内部有自动扩容机制。

    StringBuffer是线程安全,StringBuilder是线程非安全。

    执行效率:StringBuilder>StringBuffer>String

  20. list. Set. Map之间的区别是什么?

Java初级面试一般问题_第1张图片

  1. HashMap和Hashtable有什么区别?

    HashMap继承自AbstractMap。

    Hashtable继承自Dictionary。

    HashMap支持key-value为null,Hashtable不支持key-value为空。

    HashMap非线程安全,Hashtable线程安全。

    HashMap初始容量为16,每次扩容2倍,Hashtable初始容量为11,内次扩容2n+1。

  2. HashMap的原理

    HashMap基于Hash算法实现,put(key-value)存储,get(key)获取。

  3. ArrayList和LinkedList 的区别是什么?

    ArrayList是动态数组数据结构实现,LinkedList是双向链表数据结构实现。

    ArrayList比LinkedList随机访问效率高。

    频繁读取集合数据使用ArrayList,插入和删除数据使用LinkedList。

  4. java中字节流与字符流的区别?

    字节流以8位2进制字节输入输出,字符流以16位2进制字符输入输出。字节流可以传输任何形式的文件,字符流只能传输文本文件

    字节输入流InputStream,字节输出流OutputStream

    字符输入流reader,字符输出流writer

  5. 说一说tcp协议的3次握手?

    Tcp三次握手客户端服务器建立连接,可以保证通信传输的安全,减少内存消耗。

  6. 动态代理是什么?有哪些应用?怎么实现动态代理?

    运行时动态生成的代理类,SpringAop、hibernate数据查询

    jdk原生动态代理、cglib动态代理

  7. jdk动态代理,cglib动态代理

    jdk原生动态代理基于接口, 基于当前类的子类。

  8. JSP和servlet 有什么区别?

    Servlet是运行在服务器上,处理用户请求做出相应的java程序。

    Jsp是在HTML文件中嵌套java程序形成的一种页面。

Servlet主要用于逻辑控制,jsp侧重于视图。

  1. servlet生命周期

    实例化、初始化、处理请求、销毁

    1. forward和rediret的区别?
次数 地址栏 数据共享 效率 /
forward 转发 1 URL地址栏不会变 共享Request里数据 效率高 可有可无 /
rediret 重定向 2 URL地址栏会变 不共享数据 效率低 一定不能有 /
  1. java中什么是序列化和反序列化,如何操作?

    序列化:将java对象转换成字节序列。

    反序列化:将字节序列转换成java对象。

    把内存中的对象状态保存到文件中或者数据库中、用套接字网络上传输对象、通过RMI传输对象。

  2. 什么是多线程,有几种创建方式,有什么区别?

    一个程序至少一个进程,一个进程至少一个线程或者多个线程,多个线程就是多线程。

    继承Thread类、实现Runnable接口、实现Callable接口。

    继承Thread类和实现Runnable重写run方法返回的是void,返回值为null。

    实现Callable接口和创建线程池重写call方法,返回Object,有返回值。

  3. 线程池的创建方式?

    newSingleThreadExecutor、newCachedThreadPool、newFixedThreadPol、newSingleThreadSchedExecutor、newScheduledThreadPool、newWorkstealingPool、ThreadPoolExecutor

  4. 线程中sleep方法与wait方法的区别?

    Sleep来自Thread,wait来自Object。

    Sleep 释放锁,wait会释放锁。

    Sleep时间到会自动恢复,wait需要调用notify()或者notifyAll()唤醒线程。

  5. 说一说线程中的生命周期?

    新建、就绪、运行、阻塞、死亡

    线程状态:初始、运行、阻塞、等待、超时等待、死亡

  6. 什么是线程同步,为什么会有线程同步,具体的实现方式有几种?

    线程同步:当一个线程对内存操作时,其他线程不能对这个内存地址进行修改,直到该线程完成操作,其他线程才可以对该内存进行操作。

    当多线程同时读写一份共享数据资源时,可能会发生冲突,这时需要使用线程同步。

    同步方法、同步代码块、使用volatile、使用重入锁、使用局部变量。

  7. 什么是TCP,什么是UDP,他们各自的优缺点是什么?

    TCP和UDP是OSI模型中运输层中的协议。

    TCP面向连接,UDP面向非连接。

    TCP提供可靠的传输,UDP无法保证传输安全。

    TCP面向字节,UDP面向报文。

    TCP传输效率慢,UDP传输效率快。

  8. 什么是反射,如何得到一个java类的反射对象?

    在运行状态中对于任意一个类都能够知道这个类中的属性和方法,对于每个对象都可以调用它的任何属性和方法。这种动态获取信息和动态调用方法就是反射。

    Class.getClass();

  9. 什么是泛型?

    不确定的数据类型<>表示定义

  10. RequestDispatcher与sendRedirect的区别?

次数 地址栏 数据共享 效率 /
forward 转发 1 URL地址栏不会变 共享Request里数据 效率高 可有可无 /
rediret 重定向 2 URL地址栏会变 不共享数据 效率低 一定不能有 /
  1. get与post的区别?

    get被浏览器主动缓存,post不会被浏览器缓存。

    get参数被明文限制URL上不安全,post参数传输安全。

    get传输参数大小有限制,post传输参数大小没有限制。

  2. JSP中的9大内置对象分别是什么?

    Request、response、session、application、pageContext、page、out、config、exception

  3. session和cookie区别

  • session存储在服务器,cookie存储在浏览器、Redis、数据库中。
  • Session存储安全,cookie存储不安全。
  • Session有容量限制,cookie容量没有限制。
  1. 会话跟踪技术,HTTP三次握手
  • URL重写、隐藏表单域、cookie、session
  • 三次握手http基于Tcp协议,通信安全,不浪费服务器资源。
  1. MyBatis中实现对一查询/一对多查询的配置方式有几种,分别是什么?

​ 嵌套resultMap、嵌套select

  1. 通常一个Xml映射文件:都会写一个Dao接口与之对应,请问,这个Dao接口的工作原理是什么? Dao接口里的方法,参数不同时,方法能重载吗?
  • ORM 核心对象 动态SQL

  • Dao 接口就是Mapper接口,接口的全限名就是映射文件中namespace,接口方法名就是接口Mapper的Statement的id值,接口方法内的参数就是传给SQL的参数。

  • 不能重载。因为使用全限名+方法名的保存寻找策略。Mapper接口的工作原理是JDK动态代理,MyBatis运行时会使用JDK动态代理,Mapper接口生成代理对象proxy,代理对象会拦截接口方法转而执行MapperStatement所代表的SQL,然后返回SQL执行结果。

    1. 说一下MyBatis 的一级缓存和 二级缓存?
  • 一级缓存:基于PerpetualCache的HashMap的本地缓存,它的声明周期和SQLSession一致,当有多个SQLSession或者分布式的环境中数据库操作可能会出现脏数据。当Session flush或close后,该Session中所有Cache将清空,默认开启一级缓存。

  • 二级缓存:也是基于perpetualCache的Mapper本地缓存,存储作用域为Mapper级别,多个SQLSession之间需要共享缓存,需要使用二级缓存,二级缓存可自定义存储源。

  1. MyBatis分页原理
  • MyBatis分页原理分为逻辑分页和物理分页
  • 逻辑分页:使用MyBatis自带的RowBounds进行分页,它是一次性查询很多数据,然后在数据中在进行检索。(select * from student limit #{currIndex} , #{pageSize})
  • 物理分页:自己手写SQL分页或者使用分页插件PageHelper,去数据库查询指定条数的分页数据的形式。
  1. #{}与${}之间的区别

    #{}是预编译处理(占位符)可以防止SQL注入,${}字符串替换

  2. 为什么要使用spring?

  • Spring提供IOC技术,可以帮助我们创建和管理依赖的对象,实现程序解耦。
  • Spring提供事物支持,操作事物更加方便。
  • Spring提供面向切面编程,方便处理某一类问题。
  • Spring支持Junit4方便程序测试。
  • Spring集成各种框架,如MyBatis、Hibernate
  1. FactoryBean与BeanFactory

    两个都是接口

    FactoryBean是一个bean,也归BeanFactory管理

    BeanFactory是spring顶层接口,返回的是一个工厂。

  2. Spring的loc是什么?

​ Spring IOC控制反转是spring的核心,负责控制对象的生命周期和对象间的关系。

  1. 实现依赖注入的常见方式有几种?

​ 构造方法注入、setter注入、注解注入

  1. 说一下spring mvc运行流程?

    前置控制器 DispatcherServlet。
    映射控制器 HandlerMapping。
    处理器 Controller。
    模型和视图 ModelAndView。
    视图解析器 ViewResolver。
    Java初级面试一般问题_第2张图片

  2. 什么是AOP,为什么要使用AOP,常见的AOP的实现方式有几种分别是什么?

  • AOP是面向切面编程通过预编译方式和运行时动态代理实现功能统一维护的一种技术。
  • AOP采取横向抽取机制,取代传统纵向继承体系重复性代码编写(性能监视、事物管理、记录日志、安全检查、缓存)。
  • AOP实现方式有两种分别是:基于xml、基于注解。
  1. 说说SpringMVC中的常用注解有哪些,有什么作用?
  • @Controller—表示这是一个处理请求的控制器类
  • @RequestMapping—设置控制器类/请求处理方法的访问路径
  • @RequestParam—定义在方法上,获取请求通过key-value方式传递参数数据
  • @ResponseBody表示返回客户端一个json数据
  1. 什么是spring boot?
  • SpringBoot是帮助我们快速创基于Spring的应用程序。
  • SpringBoot优点:嵌入式servlet容器无需打成war包、starters自动依赖与版本控制、大量自动配置简化开发、无需配置xml无代码生成开箱即用、准生产环境的运行时应用监控、与云计算天然集成。
  1. spring boot自动配置原理
  • @SpringBootApplication
  • SpringBoot启动的时候加载主配置类,开启了自动配置功能@EnableAutoConfifiguration
  • @EnableAutoConfifiguration作用:利用EnableAutoConfifigurationImportSelector给容器中导入一些组件。
  • 可以查看selectImports()方法的内容。
  • List confifigurations=getCandidateConfifigurations(annotationMetadata,attributes);获取候选的配置。
  1. spring boot核心配置文件是什么?
  • Application、bootstrap
  • .properties、.myl(.yaml)
  1. spring boot常用的启动器有哪些,干什么用的?
  • spring-boot-starter:这是Spring Boot的核心启动器,包含了自动配置、日志和YAML。
  • spring-boot-starter-aop:支持面向方面的编程即AOP,包括spring-aop和AspectJ。
  • spring-boot-starter-jdbc:支持JDBC数据库。
  • spring-boot-starter-mobile:支持spring-mobile。
  • spring-boot-starter-redis:支持Redis键值存储数据库,包括spring-redis。
  • spring-boot-starter-security:支持spring-security(安全框架)。
  • spring-boot-starter-test:支持常规的测试依赖,包括JUnit、Mockito以及spring-test模块。
  • spring-boot-starter-web:支持全栈式Web开发,包括Tomcat和spring-webmvc。
  • spring-boot-starter-ws:支持Spring Web Services。
  1. 什么是spring cloud?

    SpringCloud是一个微服务框架,是一系列框架的有序集合。

  2. Spring Boot、Spring MVC和Spring 有什么区别?

  • SpringBoot包含SpringMVC和Spring,spring是SpringBoot的核心之一,SpringMVC只是Spring处理Web层请求的一个模块。
  • Spring最重要的是依赖注入和控制反转,SpringMVC提供一种分离式的方法开发web应用,SpringBoot快速开发Spring程序,自动配置简化开发。
  1. Dubbo是什么? RPC是什么?
  • Dubbo是一款高性能、轻量级、开源的java RPC(远程过程调用)框架。
  • RPC是远程过程调用,支持负载均衡、容灾、集群。
  1. Redis是什么,说说你对Rides的认识?

​ Redis是一个开源基于C语言编写、高速缓存、支持网络、基于内存可持久化日志型、高性能key-value存储的数据库。

  1. Spring Data Redis中的常见消息类型有哪些,以及操作这些类型的常用方法
数据类型 结果存储的值 结构读写能力
String 可以是字符串、整数或者浮点数 对整个字符串或者字符串的其中一部分执行操作;对象和浮点数执行自增(increment)或者自减(decrement)
List 一个链表,链表上的每个节点都包含了一个字符串 从链表的两端推入或者弹出元素;根据偏移量对链表进行修剪(trim);读取单个或者多个元素;根据值来查找或者移除元素
Set 包含字符串的无序收集器(unorderedcollection),并且被包含的每个字符串都是独一无二的、各不相同 添加、获取、移除单个元素;检查一个元素是否存在于某个集合中;计算交集、并集、差集;从集合里卖弄随机获取元素
Hash 包含键值对的无序散列表 添加、获取、移除单个键值对;获取所有键值对
Zset 字符串成员(member)与浮点数分值(score)之间的有序映射,元素的排列顺序由分值的大小决定 添加、获取、删除单个元素;根据分值范围(range)或者成员来获取元素
  1. Spring Data Solr是什么,说说他的操作原理。

​ Solr是基于Lucene(全文检索引擎)开发,它是一个独立系统,运行在Tomcat或Jetty上。

  1. Spring security是什么,说说他的执行原理。

    security是Spring中提供安全认证服务框架

  2. 常见的消息中间有哪些,ActiveMQ 发送消息的原理?

​ RabbitMQ、RocketMQ、ActiveMQ、Kafka

  • ActiveMQ支持同步、异步两种发送模式将消息发送到broker上。同步发送过程中,发送者发送一条消息会阻塞直到broker反馈一个确认消息,表示消息已经被broker处理。这个机制提供了消息的安全性保障,但是由于是阻塞的操作,会影响到客户端消息发送的性能。异步发送的过程中,发送者不需要等待broker提供反馈,所以性能相对较高。但是可能会出现消息丢失的情况。所以使用异步发送的前提是在某些情况下允许出现数据丢失的情况。
  • 默认情况下,非持久化消息是异步发送的,持久化消息并且是在非事务模式下是同步发送的。但是在开启事务的情况下,消息都是异步发送。由于异步发送的效率会比同步发送性能更高。所以在发送持久化消息的时候,尽量去开启事务会话。
  1. 介绍一下你简历中最熟悉的一一个项目?

  2. 在完成这个项目的时候你使用了哪些主要的技术?

  3. 在完成这个项目的过程中你得到了哪些?.

  4. 你在项目开发的过程中是是怎么调优的?说说你们公司开发软件的具体流程是什么样的?

  • 1.首先从系统设计层面,去看看是否有改进的可能,是不是可以引入一些设计模式、是不是可以引入缓存机制等方法,来屏蔽潜在的性能问题。
  • 2.然后从代码层面,看看代码是否有优化的可能。
  • 3.接着去看看 Java 程序运行的环境,也就是通过调整 JVM 的参数来提升一下性能。
  • 4.接着到数据库层面,看看是否有调优的可能。
  • 5.最后到操作系统层面,看看是否可以进行调优
  • 1.起始阶段(Inception)具体构想出终于产品的设想和它的业务案例,确定项目的范围 。
  • 2.细化阶段(Elaboration)计划必要的活动和所需资源,具体确定功能并设计构架 。
  • 3.构建阶段(Construction)构建产品, 发展最初的设想、构架和计划,直到一个能够交付给用户的产品(完毕后的设想)完毕。
  • 4.移交阶段(Transition)将产品移交用户使用,包含:制造、交付、培训、支持、维护,直到用户惬意。
  1. 如何进行SQL调优?

  2. 避免全表扫描

  3. 避免索引失效

  4. 避免排序,不能避免,尽量选择索引排序

  5. 避免查询不必要的字段

  6. 避免临时表的创建,删除

  7. 你们公司开发软件的时候有哪些文件?

  8. Dubbo里面有哪几种节点角色?

  • Registry注册中心,用来发布订阅
  • Consumer 服务的消费者,就是服务的客户端
  • provider服务的提供者, 就是服务端.
  • container容器. Dubbo技术的服务端(Provider), 在启动执行的时候, 必须依赖容器才能正常启动.
  • monitor监控中心. 是Dubbo提供的一个jar工程.
  1. 介绍项目?

tion)计划必要的活动和所需资源,具体确定功能并设计构架 。

  • 3.构建阶段(Construction)构建产品, 发展最初的设想、构架和计划,直到一个能够交付给用户的产品(完毕后的设想)完毕。
  • 4.移交阶段(Transition)将产品移交用户使用,包含:制造、交付、培训、支持、维护,直到用户惬意。
  1. 如何进行SQL调优?

  2. 避免全表扫描

  3. 避免索引失效

  4. 避免排序,不能避免,尽量选择索引排序

  5. 避免查询不必要的字段

  6. 避免临时表的创建,删除

  7. 你们公司开发软件的时候有哪些文件?

  8. Dubbo里面有哪几种节点角色?

  • Registry注册中心,用来发布订阅
  • Consumer 服务的消费者,就是服务的客户端
  • provider服务的提供者, 就是服务端.
  • container容器. Dubbo技术的服务端(Provider), 在启动执行的时候, 必须依赖容器才能正常启动.
  • monitor监控中心. 是Dubbo提供的一个jar工程.
  1. 介绍项目?

你可能感兴趣的:(面试题,笔记,java,spring,boot,spring)