1v1面试题汇总JAVA【持续更新中】

JAVA系列:

  1. 聊一下类加载器

     类加载器是用于加载类文件的类。Java源码通过javac编译器编译成类文件,
     然后JVM来执行类文件中的字节码来执行程序。
     类加载负责加载文件系统、网络或其他来源的类文件。有三种默认使用的类加载器:
     Bootstrap类加载器、Extension类加载器和System类加载器(又称Application类加载器)
     1. Bootstrap类加载器负责加载JDK类文件,是所有类加载器的父加载器。
     另外Bootstrap类加载器是唯一一个大部分是由C语言实现的,其他类加载器都是通过java实现的
     2. Extension类加载器将加载类的请求先委托Bootstrap,若未成功加载,
     再从其他目录进行加载。
     3. System类加载器,负责从classpath环境中加载应用相关的类
     
     类加载器的工作原理基于三个机制:委托、可见性和一致性
     委托: 假设有一个类需要加载,首先由System类加载器委托Extension类加载器加载,
     Extension再委托Bootstrap类加载器进行加载。Bootstrap进行查找,若存在这个类则加载,
     若没有这个类可以加载,再回到Extenstion类加载器查找,若找不到再回到System类加载器加载
     可见机制:子类加载器可以看到父类加载器加载的类,反之不行
     单一性:父类加载器加载过的类不能被子加载器加载第二次
    
  2. 介绍restfult规范

     1. 使用标准方法(GET、POST、PUT、PATCH、DELETE)操作资源
     2. 尽量采用https协议
     3. 请求体与响应体 统一使用json格式承载,json使用驼峰命名,
     媒体类型媒体类型需设置为 ”application/json"
     4. 请求响应统一使用UTF8格式,时间使用UTC格式:年月日时分秒
     5. 消息响应对应的状态码
    
  3. 介绍整个JAVA虚拟机的构造(知道多少说多少)

  4. 介绍一下GC机制

  5. 聊一下Java中的数据结构

    Java中常见的数据结构,主要分为Collection 和 map 两个主要接口
    1. 常用类:
    a. ArrayList
    b. Vector (线程安全)
    c. LinkedList
    d. HashMap
    e. HashTable(线程安全)
    2. 区分Vector、ArrayList和LinkedList
    性能上来说ArrayList最好,但如果集合中元素需要频繁插入删除时LinkedList表现会更好,
    Vector适合用于线程同步的:
    a. 如果能用数组尽量用数组
    b. 如果没有频繁增删,优先用ArrayList
    c. 多线程时,考虑用Vector
    d. 频繁增删考虑用LinkedList
    
  6. SpingCloud组件

  7. 客户端和服务端使用socket进行连接,客户端向服务端发送一条信息,并显示发送成功,服务端收到了吗

  8. 讲一下Java的HashMap实现

     HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。
     HashMap底层是一个数组结构,数组中的每一项又是一个链表,
     当新建一个HashMap时,就会初始化一个数组。
     进入Map的KV,会根据hash值得到这个元素在数组中的位置(数组下标),
     若该位置已存放了其他元素,那么这个位置上的元素将以链表形式存放,
     新加入的放在链头(头插法)。
     当用户试图将一个KV存入HashMap中时,程序首先根据key的hashCode返回值决定Entry的存储位置。
     先遍历该位置链表的key,是否存在相同的key,若存在则进销覆盖value,不存在则插入
    
  9. 线程之间如何进行通讯

     1.  同步:通过Synchronized关键字来实现线程通信。
     线程A和线程B需要调用同一个类中两个不同的Synchronized方法,
      尽管调用的方法不同,但是需要等待其中一个线程执行完对应方法,其他线程才能执行(相当于共享变量)
     3. while轮询:线程A在使用资源,线程B不断使用while循环去查看资源是否到位
     4. wait/notify:线程A需要调用资源1,而资源1未到位,则线程A调用wait()放弃CPU,
     当资源1到位了,线程B调用notify()唤醒线程A,线程A进入就绪状态 
     5. 管道通信
    
  10. 进程之间的通信:

    1. 管道(Pipe)
    2. 命名管道(FIFO)
    3. 消息队列
    4. 信号量
    5. 共享内存
    
  11. 简介Volatile

    1. volatile是一种比sychronized更轻量的同步机制
    2. 当一个变量定义为volatile后, 此变量对所有线程可见当一个变量定义为volatile后, 此变量对所有线程可见
    3. 用volatile修饰的变量会被存到内存中而非cpu缓存中,相当于多了一层内存屏障
    
  12. ThreadLocal

  13. 跨域问题

    跨域问题即同源问题,解决方法有jsonp、利用nginx反向代理、修改请求头等
    
  14. 比较int和Integer

    1. Integer是int 类型的包装类,int则是java的基本数据类型
    2. Integer必须实例化后才能使用,int不需要
    3. 当new一个Integer时,实际上是生成一个指针指向对象,而int则是直接存储数据值
    4. Integer默认值为null, int 默认值为0
    5. Integer通过new生成两个值相同的对象是不相等的,因为内存地址不同
    6. java对-128到127之间的数会进行缓存,即Integer i = 127时会进行缓存,
    下一次再写Integer j = 127会直接从缓存中取出,不会再new一次
    
  15. 一个进程可以允许最大的线程数

    默认情况下,一个线程栈大概要预留1M的空间,而一个进程可用的内存空间为2G,理论上
    一个进程中最多可以开2048个线程,但是内存不可能完全用于做线程栈,所以实际数目应该
    比这个值要小。
    

计算机网络系列:

  1. 七层OSI及对应的协议

  2. 三次握手和四次挥手

  3. 如果客户端和服务端建立了tcp连接,突然将客户端网线拔掉,服务器端知道吗?

    当客户端与服务端建立正常TCP连接后,若客户端主机断开网线、电源掉电或系统崩溃,
    服务器进程将永远不会知道(通过我们常用的select,epoll监控不到断开或错误时间),
    如果不主动处理或重启系统的话服务端会一直维持这个连接,这种情况称为半开连接。
    除非我们配置了系统的SO_KEEPALIVE选项,或应用层的心跳检测。
    若网线断开时间短暂,在SO_KEEPALIVE探测时间内,当连上网线此TCP连接会自动恢复。
    反之,连上网线后要重新建立连接
    
  4. 聊一下常见的状态码

    302重定向、304服务器无法满足请求资源、400参数错误、401鉴权失败、404无法找到网页、
    403服务器拒绝访问、500服务器响应错误、503服务器故障
    
  5. 一条请求从浏览器发出后经过什么到达服务器(假设后端使用SpringMVC):

    浏览器请求 -> 应用层 -> 显示层 -> 会话层 -> 传输层 -> 网络层 -> 链路层 -> 物理层
    -> 链路层 -> 网络层 -> 传输层 -> 会话层 ->  显示层 -> 应用层 -> dispatch Servlet ->
    Controller -> Model -> View -> 回流
    

操作系统系列:

  1. 进程、线程、协程之间的关系

       1. 进程是操作系统资源分配的最小单位
       2. 线程是CPU调度的最小单位。一个进程可以由多个线程,多个线程共享进程资源
       3. 协程被称为轻量级线程, 调度完全由用户控制,拥有自己的寄存器上下文和栈
       4. 线程的执行过程可以理解为一个自上而下执行的程序,可以将这个程序切分成多个部分,
       如A 、B、C.而协程,可以认为一个程序由A、B、C多个部分组成。
       现在执行到A的某一行,先暂停执行将其保存,转而去执行B,如A 、B、C.而协程,
       可以认为一个程序由A、B、C多个部分组成。现在执行到A的某一行,先暂停执行将其保存,
       转而去执行B,等一定时间再回来接着执行A
    
  2. 死锁场景

MySQL :

  1. 数据库为什么要用B+树:

       文件很大,需要存储到磁盘,使用B+树可以减少访问磁盘的次数  
    
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自动控制节水灌溉技术的高低代表着农业现代化的发展状况,灌溉系统自动化水平较低是制约我国高效农业发展的主要原因。本文就此问题研究了单片机控制的滴灌节水灌溉系统,该系统可对不同土壤的湿度进行监控,并按照作物对土壤湿度的要求进行适时、适量灌水,其核心是单片机和PC机构成的控制部分,主要对土壤湿度与灌水量之间的关系、灌溉控制技术及设备系统的硬件、软件编程各个部分进行了深入的研究。 单片机控制部分采用上下位机的形式。下位机硬件部分选用AT89C51单片机为核心,主要由土壤湿度传感器,信号处理电路,显示电路,输出控制电路,故障报警电路等组成,软件选用汇编语言编程。上位机选用586型以上PC机,通过MAX232芯片实现同下位机的电平转换功能,上下位机之间通过串行通信方式进行数据的双向传输,软件选用VB高级编程语言以建立友好的人机界面。系统主要具有以下功能:可在PC机提供的人机对话界面上设置作物要求的土壤湿度相关参数;单片机可将土壤湿度传感器检测到的土壤湿度模拟量转换成数字量,显示于LED显示器上,同时单片机可采用串行通信方式将此湿度值传输到PC机上;PC机通过其内设程序计算出所需的灌水量和灌水时间,且显示于界面上,并将有关的灌水信息反馈给单片机,若需灌水,则单片机系统启动鸣音报警,发出灌水信号,并经放大驱动设备,开启电磁阀进行倒计时定时灌水,若不需灌水,即PC机上显示的灌水量和灌水时间均为0,系统不进行灌水。
智慧农业是一种结合了现代信息技术,包括物联网、大数据、云计算等,对农业生产过程进行智能化管理和监控的新模式。它通过各种传感器和设备采集农业生产的关键数据,如大气、土壤和水质参数,以及生物生长状态等,实现远程诊断和精准调控。智慧农业的核心价值在于提高农业生产效率,保障食品安全,实现资源的可持续利用,并为农业产业的转型升级提供支持。 智慧农业的实现依赖于多个子系统,包括但不限于设施蔬菜精细化种植管理系统、农业技术资料库、数据采集系统、防伪防串货系统、食品安全与质量追溯系统、应急追溯系统、灾情疫情防控系统、农业工作管理系统、远程诊断系统、监控心、环境监测系统、智能环境控制系统等。这些系统共同构成了一个综合的信息管理和服务平台,使得农业生产者能够基于数据做出更加科学的决策。 数据采集是智慧农业的基础。通过手工录入、传感器自动采集、移动端录入、条码/RFID扫描录入、拍照录入以及GPS和遥感技术等多种方式,智慧农业系统能够全面收集农业生产过程的各种数据。这些数据不仅包括环境参数,还涵盖了生长状态、加工保存、检验检疫等环节,为农业生产提供了全面的数据支持。 智慧农业的应用前景广阔,它不仅能够提升农业生产的管理水平,还能够通过各种应用系统,如库房管理、无公害监控、物资管理、成本控制等,为农业生产者提供全面的服务。此外,智慧农业还能够支持政府监管,通过发病报告、投入品报告、死亡报告等,加强农业产品的安全管理和质量控制。 面对智慧农业的建设和发展,存在一些挑战,如投资成本高、生产过程标准化难度大、数据采集和监测的技术难题等。为了克服这些挑战,需要政府、企业和相关机构的共同努力,通过政策支持、技术创新和教育培训等手段,推动智慧农业的健康发展。智慧农业的建设需要明确建设目的,选择合适的系统模块,并制定合理的设备布署方案,以实现农业生产的智能化、精准化和高效化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值