• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

关于java:Java后端初级面试题

java 搞代码 4年前 (2022-01-27) 43次浏览 已收录 0个评论
文章目录[隐藏]

Java面试题总结

Java语言

多线程

  • 什么是多线程:多线程指一个程序中蕴含多个线程,能够同时执行多个不同的工作。
  • 多线程优劣:长处是能够进步系统资源的利用率,进步程序效率。毛病是须要协调治理,须要进行同步。
  • 并发和并行的区别:并发是多个工作同时开启,在CPU的工夫片轮转中交替执行;并行是多个工作在多核CPU上同时执行,真正意义上的同时运行。
  • 并发编程三要素:原子性,可见性和有序性。原子:一个工作要么全副执行,要么全副不执行;可见:一个线程对共享变量操作后,后果对其余线程可见;有序:程序的执行程序依照代码先后顺序来执行。
  • 线程与过程区别:过程是操作系统资源分配的根本单位,线程是操作系统任务调度的根本单位。
  • 线程死锁:多个线程因为竞争资源而造成的循环期待的阻塞景象。
  • 造成死锁的条件:(1)互斥条件:一个资源每次只能被一个过程应用。(2)申请与放弃条件:一个过程因申请资源而阻塞时,对已取得的资源放弃不放。(3)不剥夺条件:过程已取得的资源,在未应用完之前,不能强行剥夺。(4)循环期待条件:若干过程之间造成一种头尾相接的循环期待资源关系。
  • 如何解决死锁:一个过程无奈申请到其余资源时,开释曾经领有的资源;按程序申请资源;一次性申请所有资源。
  • 创立线程的四种形式:继承Thread类;实现Runnable接口;实现Callable接口;应用Executors创立线程池。
  • run和start办法的区别:run办法只是一般办法,start能够启动线程,让其进入就绪状态期待调度;
  • 线程生命周期:新建,就绪,阻塞,期待,销毁;
  • sleep和wait的区别:sleep不开释锁,wait开释锁;sleep是Thread类的静态方法,wait是Object类的办法。
  • 如何在两个线程之间共享数据:共享变量。
  • 什么是线程平安:在多线程的环境中,通过同步的形式让共享变量可能被正确处理,就是线程平安。
  • 什么是线程池:提前创立若干个线程保留在一起,期待解决工作,处理完毕后不销毁,持续期待下一个工作,就是线程池。应用Executors接口创立线程池。
  • 四种线程池的创立:newCachedTheadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor。
  • 线程池的长处:重用存在的线程,防止对象创立和销毁的开销;管制最大线程数,防止资源竞争造成的阻塞。
  • 乐观锁和乐观锁:乐观锁不对操作的数据加锁,只在提交数据的时候验证是否被批改过;乐观锁在操作数据的期间加锁,等锁开释后其余线程能力对数据进行拜访批改。
  • 多线程同步有哪几种办法:synchronized关键字;手动上lock;分布式锁。
  • synchronized的底层实现原理:synchronized能够保障办法或者代码块在运行时,同一时刻只有一个办法能够进入到临界区,同时它还能够保障共享变量内存的可见性。

汇合框架

  • 什么是汇合:汇合是一种容器,用来寄存对象信息。
  • 数组和汇合的区别:数组长度不可变,汇合可动静扩容;数组元素能够是根本类型和对象,汇合只能保留对象。
  • Collections和Collection的区别:Collections是工具类,提供一系列静态方法用于对汇合元素进行排序、搜寻和线程平安等各种操作。Collection是汇合的顶级接口。
  • List、Set、Map区别:List有序,可反复,有索引;Set无序,不可反复;Map:键值对存储,无序,不可反复。
  • HashMap和Hashtable区别:HashMap线程不平安,效率高;Hashtable线程平安,效率低。
  • HashMap的数据结构:数组+链表+红黑树。
  • HashSet实现原理:底层由HashMap实现,HashSet的值寄存于key上,value对立为PRESENT。
  • ArrayList和LinkList的区别:ArrayList底层是数组,LinkList底层是链表。
  • ArrayList和Vector的区别:Vector线程平安,ArrayList非线程平安。
  • 哪些汇合是线程平安的:Vector,Hashtable,ConcurrentHashMap,Stack。

其余

  • 常见的Exception:NullPointException,SQLException,IOException,IndexOutOfBoundsException,FileNotFoundException。
  • String不是根本数据类型,而是一个类。
  • String和StringBuffer的区别:String是不可变对象,一旦被创立就不能批改它的值,对于曾经存在的String对象,批改值的外部实现是从新创立一个新的对象。StringBuffer是可变的对象,批改时候不会从新创建对象。
  • Int和Integer的区别:int是根本数据类型,Integer是援用数据类型。int默认值是0,integer默认值是null。
  • 运行时异样和个别异样的区别:运行时异样都是RuntimeException类及其子类,个别异样都是Exception类及其子类;运行时异样在程序中能够捕捉解决也能够不解决,个别异样必须捕捉解决,否则不能编译通过。
  • JDK是开发环境,蕴含JRE;JRE是运行时环境,不包含JDK。
  • 主动装箱:根本数据类型转换为包装器类型;主动拆箱:包装器类型转换为根本数据类型。
  • final,finally,finalize的区别:final是修饰符,表明变量不可批改或类不可继承;finally是异样捕捉后必然执行的语句块;finalize是办法名,用于在垃圾收集器将对象彻底清除前的清理工作。
  • Math.round()是四舍五入的意思。
  • i++是返回原来的值执行语句,再加一;++i是先返回+1后的值,再执行语句。
  • try finally问题:

    <code class="java">public class Demo {
      public static void main(String[] args) {
          Demo demo=new Demo();
          System.out.println(demo.test());
      }
    
      private int test(){
          try {
              System.out.println("try");
              return 0;
          }
          finally {
              System.out.println("finally");
          }
      }
    }

    最终执行后果是:

    try
    finally
    0

    也就是说,有return的话return最初执行,其余语句块按程序执行。

  • 一个变量的定义的修饰符的程序:private final static int i=1;

网络

  • TCP与UDP区别:TCP有连贯,UDP无连贯。TCP牢靠传输,UDP不牢靠传输。
  • 三次握手四次挥手:三次握手,客户端发送SYN数据包到服务器,服务器收到SYN后发送SYN+ACK数据包,客户端收到SYN+ACK再向服务器发送ACK实现三次握手,开始传输数据;四次挥手,被动发送到被动一个FIN,被动受到FIN发送ACK,被动发送FIN,被动收到FIN发送ACK。
  • 四层网络模型:应用层,传输层,网络层、链路层。
  • 什么是Socket:套接字,就是对网络中不同主机上的利用过程之间进行双向通信的端点的形象,应用IP地址+传输协定+端口号的形式创立连贯。
  • IO流:用于解决设施之间传输数据的流式管道。输出读取,输入写出。
  • BIO,NIO,AIO的区别:BIO是同步阻塞形式,NIO是同步非阻塞形式,AIO是异步非阻塞形式。
  • 网络层协定: IP协定,ICMP协定, ARP协定;传输层协定: TCP协定,UDP协定;应用层协定: FTP,SMTP,HTTP,DNS。
  • Session, Cookie, Token的区别:Session 和 Cookie 的次要目标就是为了补救 HTTP 的无状态个性。Session存储在服务器端,用于保留一次会话的状态。Cookie存储在客户端,用于保留用户的数据。token是验证令牌,用于向服务器验证本人的用户身份。

Redis

  • 什么是Redis:开源的、可基于内存也能够长久化的基于键值对的高性能非关系型数据库。
  • 为什么要应用Redis:高性能和高并发,基于内存速度快,数据结构简略,人造比关系型数据库反对更高的并发量和性能。
  • Redis反对的数据类型:能够存储键和五种类型的值的映射。键仅反对字符串,值反对String、List、Set、HashMap、ZSet。
  • 长处:读写性能强,反对长久化,反对主从复制;毛病:数据库容量受到物理内存的限度。
  • 什么是Redis长久化,Redis有哪些长久化形式:长久化就是将内存中保留的数据落在磁盘上,避免因内存断电导致的失落。形式:RDB,把以后数据生成快照保留。AOF,记录每次对数据的操作到硬盘。
  • 缓存异样:

    • 缓存雪崩:缓存同一时间大面积过期生效,导致前面的申请都落在数据库上,数据库接受大量申请崩掉。
    • 缓存穿透:申请缓存和数据库中都没有的数据,导致所有申请都落到数据库上。
    • 缓存击穿:缓存中没有但数据库中有的数据,因为并发用户多,同时读取缓存未读取到数据,同时去数据库读取数据,数据库压力过大。

nginx

  • 什么是nginx:是一种反向代理服务器。反向代理指能够代理内部网络拜访外部网络。
  • nginx长处:内存小,高并发,相应快。
  • 解决申请的过程:首先由listen和server_name指令匹配server模块,再匹配server模块里的location,location就是理论地址。
  • 正向代理和反向代理:正向代理代理客户端,反向代理代理服务端。

Spring框架

  • 什么是Spring:轻量级的Java开发框架,为了解决企业级利用开发的业务逻辑层和其余层耦合的问题。
  • Spring框架的外围:IOC容器,面向切片和依赖注入。
  • 依赖注入:依赖类不禁程序员实例化,而是通过Spring容器创立指定实例并且将实例注入到须要该对象的类中。
  • Spring框架中的设计模式:工厂模式(FactiryBean接口)和单例模式(Bean)。
  • Spring罕用注解:

    • 申明bean的注解:Component,Service,Controller
    • 注入bean的注解:AutoWired byType,Resource byName。
    • 配置类:Configuration申明以后类是配置类,bean申明以后办法的返回值是一个bean,ComponentScan用于对组件进行扫描。
    • @value为属性注入值。
    • SpringMVC:RequestMapping用于映射Web申请,ResponseBody反对将返回值放在响应体内,RequestBody容许申请的参数放在申请体中用于获取值,RestController为Controller的响应值放在响应体内。
    • 事务注解:Transaction
  • Spring框架的益处:解耦合,轻量,方便管理和配置。
  • IOC容器的了解:Spring IOC容器负责创立和治理对象,简化利用开发。
  • 不同形式的主动拆卸:byName:通过属性名主动拆卸,Spring容器在配置文件中发现bean的autowire属性被设置成bynam
    来源gaodai.ma#com搞##代!^码网

    e,之后容器试图匹配、拆卸和该属性具备雷同名字的bean。byType:通过参数类型主动拆卸,Spring容器在配置文件中发现bean的autowire属性被设置成byType,之后容器试图匹配、拆卸和该bean的属性具备雷同类型的bean。如果有多个bean符合条件,则抛出谬误。

  • Spring Boot是什么:是精简了配置的Spring。

Javaweb

  • Servlet:运行在服务器上的一个程序,用来解决对服务器的申请。
  • JSP和Servlet:JSP用于页面展现,Servlet用于逻辑管制。Servlet是一个残缺的Java类。
  • 数据库
  • 索引:索引是对数据库中一个或多个列进行排序的数据结构,帮忙咱们疾速检索数据库中的数据。

MQ

  • 音讯队列:是一种能够存储、传递音讯的容器,罕用于分布式系统中加重服务器间接压力。
  • 益处:解耦、异步、削峰。
  • RPC:近程过程调用。

数据库

  • 索引:应用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种构造。相似于书籍的目录。
  • HAVING 子句能够让咱们筛选分组后的各组数据。WHERE 子句在所选列上设置条件,而 HAVING 子句则在由 GROUP BY 子句创立的分组上设置条件。
  • PostgreSQL 中的 limit 子句用于限度 SELECT 语句中查问的数据的数量。
  • DISTINCT 关键字与 SELECT 语句一起应用,用于去除重复记录,只获取惟一的记录。
  • 索引不应该应用在较小的表上。索引不应该应用在有频繁的大批量的更新或插入操作的表上。索引不应该应用在含有大量的 NULL 值的列上。索引不应该应用在频繁操作的列上。
  • 视图是一张假表,只不过是通过相干的名称存储在数据库中的一个 PostgreSQL 语句。
  • 触发器是数据库的回调函数,它会在指定的数据库事件产生时主动执行/调用。

简历相干的面试题

  • Linux怎么样让终端程序在后盾执行?有两种形式。第一种是用Ctrl+Z让程序暂停,而后应用bg命令让程序在后盾继续执行,这种形式在退出终端后程序就会完结执行;第二种是在命令后加&符号,让命令一开始启动就在后盾运行。
  • docker run -it中的it是什么意思?-t让docker调配一个伪终端并绑定到容器的规范输出上, -i以交互模式运行容器,让容器的规范输出放弃关上。这样一个须要交互的容器实例才不会在启动后立即完结运行。
  • 以前的工作我的项目:以前是在永辉做业务中台,包含领取、订单、用户中台。
  • 什么是中台?前台的撑持零碎,基础设施层之上的通用业务层,这些业务能满足公共需要,将这些中台中的业务模块组合之后能够灵便的提供多种前台须要的能力。
  • 中台解决了什么问题?中台解决了反复造轮子的问题,比方在多个我的项目中须要操作用户和订单,那么不须要屡次对对应的模块进行开发,只需调用对应中台的接口即可。

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:关于java:Java后端初级面试题
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址