面试Java高级工程师之基础总结

【NVIDIA Jetson Orin系列 - 安装NVIDIA SDK Manager】 NVIDIA Jetson Orin - 安装NVIDIA SDK Manager 阅读详情
  1. 反射
    1. java中通过反射机制操作字节码文件
    2. 通过三种方式获取类实例
      1. Classs.forName
      2. 类.class
      3. 类.getClass
    3. 通过类实例操作类属性、方法,改变其值
  2. 多线程
    1. 线程和进程有什么区别
      1. 线程是最小单位,线程属于进程中
      2. 一个应用程序就代表一个进程,一个进程中包含多个线程
    2. 多线程怎么使用
      1. 通过继承thread类或实现Runnable接口
      2. 使用runnable好处,避免单继承局限性,更好的分离线程代码逻辑与程序业务逻辑,符合面向对象设计思想
    3. 为什么要用多线程,解决什么问题
      1. 如一个请求需要10s,但我如果创建10线程同时执行,那么最终只需要耗时1s。
      2. 使用场景可以是读取多个文件内容,大数据量使用多线程分批读取,达到资源最大化利用,以及提升系统响应性能
    4. 多线程怎么保证数据安全
      1. 通过sync关键字或lock锁来锁住共同访问的代码块,这样同时只有一个线程进行访问,操作数据
    5. 多线程生命周期有哪些
      1. 新建、就绪、(阻塞)、运行、终止
    6. 线程有哪些方法
      1. wait等待、notify唤醒线程、notifyAll唤醒所有睡眠线程
    7. 线程池有哪些,怎么使用,分别用在什么场景
      1. newSingleThreadExexcutor:单线程数的线程池(核心线程数=最大线程数=1)
      2. newFixedThreadPool:固定线程数的线程池(核心线程数=最大线程数=自定义)
      3. newCacheThreadPool:可缓存的线程池(核心线程数=0,最大线程数=Integer.MAX_VALUE)
      4. newScheduledThreadPool:支持定时或周期任务的线程池(核心线程数=自定义,最大线程数=Integer.MAX_VALUE)
      5. 上面四种线程池类都继承ThreadPoolExecutor,在创建时都是直接返回new ThreadPoolExecutor(参数),它们的区别是定义的ThreadPoolExecutor(参数)中参数不同,而ThreadPoolExecutor又继承ExecutorService接口类
      6. 线程池能够节约资源使用,能够使线程重复使用,统一管理。可以在多任务同时处理使用,如,查询商品详情,可以分多个线程同时去查询商品库存、商品基础信息、商品价格等
      7. 缺点:使用了LinkBlockQueue的链表型阻塞队列,当任务的堆积速度大于处理速度时,容易堆积任务而导致OOM内存溢出
  3. 集合
    1. 常用集合有哪些,哪些是安全的,哪些是不安全的
      1. ArrayList、LinkedList、Vector、HashTable、HashMap、HashSet、TreeSet
      2. 线程安全的:Vector、HashTable
      3. 线程不安全的:ArrayList、LinkedList、HashMap、HashSet、TreeSet
    2. 数组和集合有什么区别
      1. 数组长度是不可变的,集合可以
      2. 数组可以存基本数据类型和引用数据类型,集合只能存引用数据类型
    3. ArrayList、LinkdedList、Vector有什么区别
      1. ArrayList:底层数组实现,线程不安全,查找快
      2. LinkdedList:底层双向链表实现,线程不安全,增加、删除快
      3. Vector:底层数组实现,线程安全
    4. ArrayList底层使用什么数据结构,默认大小是多少
      1. 数组,初始容量10,每次扩容为当前大小1.5倍
    5. ArrayList和HashSet有什么区别
      1. ArrayList:值可以重复,通过下标访问,有序
      2. HashSet:值不可以重复,没有下标,无序
    6. HashSet和TreeSet有什么区别
      1. HashSet:底层数组,链表,红黑树实现
      2. TreeSet:底层红黑树实现,还实现了sortedSet接口,可以对插入的元素进行排序
    7. HashMap、HashTable、TreeMap区别
      1. HashMap:key不能重复,值可以重复,线程不安全的,底层使用数组+链表+红黑树实现,初始容量16,当存储的数量大于当前容量乘以0.75后,扩容为原来的2倍
      2. HashTable:线程安全的
      3. TreeMap:线程不安全的,底层使用红黑树实现,可以对key进行自动排序
  4. 锁、CAS
    1. cas原理是什么
      1. 用于实现多线程同步的原子指令。当多个线程对同一个资源进行cas操作时,只有一个线程会成功,其他线程会操作失败,但不会阻塞其他线程继续访问,cas也是一个乐观锁的实现
    2. 为什么要用,解决什么问题
      1. 解决多个线程操作同一个资源时,造成脏数据问题,如:有a=1,线程1获取a并加1,线程2同时获取a加1,然后线程1写入a变成2,线程2也写入a变成2,那么数据最终只加1,但实际最终结果是要3
    3. cas 是怎么实现的
      1. 利用unsafe 这个类提供的 cas 操作
      2. 依赖jvm 针对不同的操作系统实现的 Atomic
      3. Atomic 的实现使用了汇编的 cas 操作,并使用 cpu 硬件提供的 lock信号保证其原子性
    4. CAS存在什么问题
      1. ABA问题:原子类 AtomicStampedReference类compareAndSet方法,或追加版本号
      2. 循环时间长开销大:JVM能支持处理器提供的pause指令
      3. 只能保证一个共享变量的原子操作:一个变量可以使用cas保证原子性,如果是多个可以使用AtomicReference类把多个变量放到一个对象中进行cas操作,也可以通过合并多个变量变成一个来cas操作
    5. AQS是什么,运行原理是什么
      1. aqs是多线程同步器,提供了两种锁机制,分别是排它锁和共享锁。它的内部实现的关键就是维护了一个先进先出的队列以及state状态变量
  5. io流
    1. io流有哪些
      1. 按功能划分:输入流、输出流
      2. 按处理类型划分:字节流、字符流
        1. 字节流:
          1. InputStream
            1. FileInputStream
            2. FilterInputStream
              1. BufferedInputStream
          2. OutputStream
            1. FileOutStream
            2. FilterOutStream
              1. BufferedOutStream
        2. 字符流:
          1. Reader
            1. BufferReader
            2. InputStreamReader
              1. FileReader
          2. Writer
            1. BufferWriter
            2. OutputStreamWriter
            3. FileWriter
    2. io有什么用,解决什么问题
      1. 读取txt文本、excel表格内容
    3. io和nio有什么区别
      1. io是阻塞流,面向流,无选择器
      2. nio非阻塞流,面向缓冲,用到块,效率比io高,有选择器
    4. nio有什么缺点
      1. 每次数据处理要判断缓冲区数据是否完整或者已经读取完毕        
    5. nio使用场景有哪些
      1. nio:使用多个连接,但每次只发送少量数据场景
      2. io:使用少量连接,但发送大量数据场景
    6. nio组件有哪些
      1. channels、buffers、selectors,其他pipe、FileLock建立在基础组件上更好的使用工具类
  6. 事务
    1. 在JAVA中什么是事务?
      1. 使用java程序jdbc操作数据库增、删、改方法,称为事务。可以理解为是一组原子操作单元,从sql角度理解就是一组sql命令,要么都成功,要么都不成功
    2. 为什么要使用事务?
      1. 当我们处理数据时中间过程抛出异常,要保证数据一致性、完整性时
    3. 什么时候使用事务?
      1. 事务是为了解决数据安全操作而提出的,如:银行转账,a转账给b,a扣款成功后,由于网络中断b没有收到,那么整个业务是失败的,这时就需要事务要么全部执行成功,要么全部执行失败
    4. Java事务的类型
      1. jdbc事务,在一个数据库连接内
      2. 容器事务,j2ee应用服务器提供的事务管理
      3. jpa事务,可以跨多个数据库
    5. java事务原则
      1. ACID:原子性、一致性、隔离性、持久性
    6. springboot事务开启方式
      1. 启动类添加注解@EnableTransactionManagement开启事务,然后在使用事务的类或方法上面添加注解@Transactional(rollbackFor = Exception.class)
      2. 逻辑上手动回滚: TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  7. JVM虚拟机
    1. jvm内存结构是怎么样的
      1. 堆:用来存放对象、数组,所有线程都共享
      2. 栈:存放的是栈帧,每个栈帧对应一个调用的方法,在栈帧中包括局部变量表、方法返回地址、运行时常量池引用等
      3. 本地方法区:与java栈原理类似,区别就是java栈是为java方法服务的,而本地方法区是为执行本地方法服务的
      4. 方法区:所有线程都共享,存放了类的信息,包括类名称、方法名称、字段,静态变量、常量等
      5. 程序计数器:能够在线程切换后恢复到切换之前的程序执行位置,每个线程都一个独立程序计数器,并不会相互干扰
    2. jvm中怎么判断一个对象是否存活
      1. 引用计数法:给每个对象设置一个引用计数器,每次引用就加1,引用失效就减1,如果引用计数器为0时被垃圾回收
      2. 可达性算法:从GC Roots对象开始向下搜索,如果一个对象到GC Roots没有任何引用链相连时,则说明此对象不可用
    3. jvm调优参数有哪些,给你个8g内存怎么分配
      1. 在JVM中,主要是对堆(新生代)、方法区和栈进行性能调优
        1. 堆:-Xms、-Xmx
        2. 新生代:-Xmn
        3. 方法区(元空间):-XX:MetaspaceSize、-XX:MaxMetaspaceSize
        4. 栈(线程):-Xss
      2. 按照经验分配:java ‐Xms2048M ‐Xmx2048M ‐Xmn1024M ‐Xss512K ‐XX:MetaspaceSize=256M ‐XX:MaxMetaspaceSize=256M ‐jar xxx.jar
    4. jvm内存溢出怎么排查解决
      1. dump内存溢出日志进行分析
      2. 定位是堆内存满了、代码死循环、没有释放连接、多线程阻塞等问题
      3. 然后在排查项目调用链路,是在哪里引发内存溢出的
    5. java代码执行过程是怎么样的
      1. 加载.class文件
      2. 管理并分配内存
      3. 执行垃圾收集
    6. jvm生命周期是怎么样的
      1. jvm实例是一个进程级别的,是由启动、运行、消亡组成的生命周期
    7. jdk、jre、jvm是什么关系
      1. jdk是用来编译、调试程序用的开发包
      2. jre是java运行平台,用来运行java程序
      3. jvm是jre的一部分,是一个虚拟计算机,有完善的硬件架构,如寄存器、堆、栈、处理器等,而java最重要的特点就是跨平台,使用jvm就是为了跨平台。jvm在执行字节码时,最终会把字节码解释成具体平台机器指令执行
    8. jvm原理
      1. 通过编译器把源代码编译成字节码
      2. 由类加载器进行加载
      3. 在通过字节码校验器
      4. 然后在到解释器转成机器指令到硬件
    9. jvm双亲委派机制是什么?为什么要使用?
      1. 先使用父类加载器加载,如果找不到目标类,就使用子加载器自己加载
      2. 为了保证代码安全性,也就是沙箱安全机制,才使用双亲委派机制
    10. 类加载过程,以及加载类有哪些
      1. 加载、验证、准备、解析和初始化
      2. 引导类加载器:加载lib目录下jar包
      3. 扩展类加载器:加载ext目录下jar包
      4. 应用类加载器:加载用户类路径上所指定的类库
  8. 设计模式
    1. 常用设计模式有哪些
      1. 设计模式有23种,分为三大类:创建型模式、结构型模式、行为型模式
      2. 创建型模式:创建型模式用于解耦对象实例化过程
        1. 单例模式
        2. 工厂模式
        3. 抽象工厂模式
        4. 建造者模式
        5. 原型模式
      3. 结构型模式:把类或对象结合形成一个更大的结构
        1. 适配器模式
        2. 代理模式
        3. 桥接模式
        4. 组合模式
        5. 装饰模式
        6. 外观模式
        7. 享元模式
      4. 行为型模式:类和对象如何交互,及划分责任和算法
        1. 责任链模式
        2. 策略模式
        3. 访问者模式
        4. 命令模式
        5. 迭代器模式
        6. 解释器模式
        7. 观察者模式
        8. 备忘录模式
        9. 状态模式
        10. 模板模式
        11. 中介者模式
    2. 为什么要用,解决什么问题
      1. 提高代码可读性、可扩展性和可复用性,解决在写代码过程遇到的设计问题
    3. 设计模式有哪些原则
      1. 开闭原则:对扩展开放,对修改关闭
      2. 里氏替换原则:子类可以替换父类任何功能(体现父类的可扩展性)
      3. 依赖倒转原则:尽可能面向接口编程,依赖接口而不依赖类
      4. 接口隔离原则:一个类能实现多个接口,尽可能实现多个,为了降低依赖和耦合
      5. 最少知道原则:实体之间尽可能不要产生关联关系,能够将实体功能独立
      6. 合成复用原则:尽量使用合成、聚合的方式,而不使用继承

大模型训练和推理 大模型训练moe是指混合专家(Mixture-of-experts,简称MoE)的,这是一种用于提高大型神经网络性能的技术,它可以将模型的一部分替换为多个专家,每个专家只负责处理一部分输入数据,从而增加模型的参数量和表达能力,同时减少计算量和训练时间。指令可以作为模型的输入的一部分,也可以作为模型的输出的一部分,具体取决于任务的类型。上下文扩展技术的,这是一种用于提高大型语言模型(LLM)对长文本的处理能力的技术,它可以让模型在不增加参数量的情况下,扩展其注意力范围,从而提高模型的语言理解和生成能力。 阅读详情

相关推荐

Revit二次开发之双事件:空闲事件与DocumentChanged事件

对以下文章所展示的代码进行了修改,当前展示的代码可直接复制使用。 由于本人初学,下列语言为个人理解,如有错误请指正。   《引用1》中: 使用模态对话框,或者尽量保证事件在ExternalCommand的Execute函数或者ExternalApplication的OnStartup函数里面注册。 如果一定要使用非模态对话框,那么请使用ExternalEvent事件的Raise函数,强迫...

一个Revit二次开发的实习生 6124

个人总结的一个中高级Java开发工程师或架构师需要掌握的一些技能

近三年,其实都是在做一个项目,项目很大

gokeibi的专栏 1万+

CodeQL查询时遇到报错:A fatal error occurred: Could not process query metadata for...如何解决?

🏆本文收录于 《全栈Bug调优(实战版)》 专栏,该专栏专注于分享我在真实项目开发中遇到的各类疑难Bug及其深层成因,并系统提供高效、可复现的解决思路和实操方案。无论你是刚入行的新手开发者,还是拥有多年项目经验的资深工程师,本专栏都将为你提供一条系统化、高质量的问题排查与优化路径,助力你加速成长,攻克技术壁垒,迈向技术价值最大化与职业发展的更高峰🚀!

**My Coding Family** 1065

java高级工程师具备技能

码代码的小朋友 1071

个人总结的一个中高级Java开发工程师或架构师需要掌握的一些技能 ...

近三年,其实都是在做一个项目,项目是一个大型的多节点部署的项目,做了好几个版本,中间用到了很多技术和框架, 也用了一些管理工具和敏捷实践。我这里不是来说项目的,因为最近看了一些招聘信息,结合项目中用到的一些知识和 管理措施,作为一个程序员,需要去实时评估下自己当前的能力是否能跟...

weixin_33754913的博客 399

作为一名Java程序员一定要不断关注学习最前沿的技术 ...

无论做什么事情都不可能做到一蹴而就,很多事情都是水滴石穿。那么作为一名Java程序员当然也要保持不断学习的状态才能在这个领域站稳脚跟。那些工作了一定年限的技术人总有一天会感觉到自己遇到了职业瓶颈,这个时候如果你还是安于现状不去学习钻研的话只会被长江后浪推前浪 把你拍...

weixin_33922670的博客 1584

java高级工程师需要掌握的技术

1.你需要精通面向对象分析与设计(OOA/OOD)、涉及模式(GOF,J2EEDP)以及综合模式。你应该十分了解UML,尤其是class,object,interaction以及statediagrams。   2.你需要学习JAVA语言的基础知识以及它的核心类库(collections,serialization,streams,networking, multithreading,ref

BigHeart的专栏 500

Java高级工程师技术面试:从基础到高并发的全面挑战

模拟一场严肃专业的互联网大厂Java高级工程师技术面试,通过三轮递进式提问,结合实际业务场景,深入探讨Java核心、框架原理、分布式系统设计、高并发解决方案等技术要点。同时,通过幽默的方式展现求职者小兰的‘基础尚可但深度不足’的特点,最终提供详实的答案解析,帮助读者理解技术要点和业务落地的关键。

Ared 1133

Java高级工程师技术面试模拟:从基础到高并发的全面挑战

模拟一场严肃专业的互联网大厂Java技术面试,通过三轮递进式提问,从基础框架到高并发场景,结合实际业务挑战,揭示技术选型和架构设计的深度。面试官与求职者小兰的互动充满幽默感,同时答案部分提供详尽的专业解析,帮助读者理解技术要点和业务落地的关键。

Ared 1559

Java高级工程师面试模拟:从基础到高并发的全面挑战

本文模拟一场严肃专业的互联网大厂Java高级工程师技术面试,通过面试官与求职者小兰的互动,展现了从基础到高并发的技术深度。文章不仅提出了多个典型的面试问题,还提供了详尽的答案解析,帮助读者理解技术要点和业务场景中的最佳实践。

Ared 736

Java高级工程师技术面试:从基础到高并发的全面解析

本文模拟了一场严肃专业的互联网大厂Java技术面试,通过面试官与求职者小兰的互动,展现面试的深度与广度。文章不仅揭示了求职者在技术理解上的常见误区,还提供了详实的专业答案,帮助读者深入理解Java技术栈的核心原理、选型考量以及业务场景的落地实践。

Ared 1449

Java高级工程师技术面试:从基础到高并发实战

模拟互联网大厂Java高级工程师技术面试,通过三轮递进式提问,结合业务场景深入探讨技术原理、选型与实践。面试官与求职者小兰的互动既严肃又搞笑,揭示常见的技术误解,同时提供详尽的专业答案解析,帮助读者深化理解Java及其相关技术栈的核心要点。

Ared 1432

Java高级工程师技术面试:从基础到高并发的深度挑战

本文模拟了一次严肃专业的互联网大厂Java技术面试,通过面试官与求职者小兰的互动,深入探讨了Java核心语言、基础框架、数据库、分布式系统、微服务架构、高并发与高可用等关键话题。文章不仅展现了面试的深度与广度,还通过小兰的搞笑回答揭示了常见技术理解误区,并在面试后提供了详细的专业答案解析,帮助读者理解技术要点和业务落地的关键。

Ared 1029

Java高级工程师面试模拟:从基础到高阶的全面挑战

本文通过模拟一场严肃专业的互联网大厂Java技术面试,以幽默搞笑的方式展现了求职者小兰在面对深入技术问题时的应对情况,并提供了详尽的专业答案,帮助读者理解如何在实际业务场景中应用Java及相关技术栈解决复杂问题。

Ared 1011

Java高级工程师技术面试模拟:从基础到高并发实战

本文通过模拟一场严肃专业的互联网大厂Java技术面试,展现了从基础框架到高并发架构设计的全链条技术考察。面试官与求职者小兰的互动既揭示了常见的技术误区,又通过详实的答案解析为读者提供了深入理解Java技术栈与解决实际业务问题的宝贵知识。

Ared 811

Java高级工程师面试模拟:从基础到高并发的深度考察

本文模拟一场严肃专业的互联网大厂Java技术面试,通过面试官与求职者小兰的互动,全面考察Java基础、框架原理、分布式系统设计与高并发解决方案。小兰的回答通过幽默的方式揭示了常见的技术理解误区,而面试官则提供了详尽的专业答案,帮助读者理解技术原理与业务落地的关键,适合有Java基础的小白学习参考。

Ared 975

Java高级工程师技术面试:从基础到高并发的深度考验

本文模拟一场真实的互联网大厂Java高级工程师技术面试,通过面试官与求职者小兰的互动,展现从基础框架到高并发系统设计的层层递进。文章不仅包含面试过程中的幽默回答,还提供了详尽的技术解析,帮助读者理解技术要点和业务场景中的应用,适合Java基础开发者学习和参考。

Ared 687

Java高级工程师实战经验图谱

看看Java高级工程师都做过什么事情。

红目香薰 479

编译maven项目出现Could not find artifact org.restlet.jee:org.restlet.parent:pom:2.2.1问题

经过几天的折腾,问题最终解决了。 出现的问题: After correcting the problems, you can resume the build with the command mvn -rf :csmp-agent-plugin-fc 解决方式三种: 第一种:首先查看maven仓库中保存的版本是多少,再修改编译项目csmp-agent-plugin-fc下

CODE CRAFT 1万+

Git Pull Failed: Could not read from remote repository

git拉取代码错误: 9:22 Git Pull Failed: Could not read from remote repository. 9:22 Fetch failed: Could not read from remote repository. 解决: 1、准备git服务器地址密码 git clone git@10.111.111.11:/home/git/test/tes

CODE CRAFT 1万+

ERROR 1198 (HY000): This operation cannot be performed with a running slave; run STOP SL

mysql配置主从复制出现以下异常: slave服务器执行命令 CHANGE MASTER TO MASTER_HOST='192.168.116.101', MASTER_USER='root', MASTER_PASSWORD='Root1234', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=107; 出现异常信息 ERR...

CODE CRAFT 1万+

java读取写入文件几种方式效率比较

public class ReadTxtJson { public static String readTxtFile(String FileName) throws Exception { BufferedInputStream bufferedInputStream = null; ByteArrayOutputStream memStream = null; byte[] dat

CODE CRAFT 3482

UA-DETRAC BITVehicle车辆检测数据集 人工智能 - 深度学习.zip

UA-DETRAC BITVehicle车辆检测数据集 人工智能 - 深度学习.zip

MyData_readdate123_show_zygo_

read zygo date123 and show it.

上一篇: ERROR 1198 (HY000): This operation cannot be performed with a running slave; run STOP SL
下一篇: 面试Java高级工程师之应用框架总结
Code Space
博客等级 码龄14年 8粉丝 19原创
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值