面经学习(北京商越网络实习)

个人评价

 比较简单的面试题,不知道 nacos和gateway这块有没有深问,如果深问的话,那难度就升级了。一直对io的八股文不感冒,io这块的知识还得加强,该面经最后一问我是没有如何思路的,算是长知识了欸。

1.你说说对java集合的理解吧?


  集合主要就是 List,Set,Map三种结构,List存储有序的集合,Set存储不重复的集合,map存储键值对。

2.在List中,你说说ArrayList和LinkedList的区别吧?

 

  1.   从结构方面,ArrayList使用动态数组,LikedList使用双向链表,ArrayList实现了RandomAccess接口是可以实现快速的随机访问。
  2.   从线程安全方面,ArrayList和LinkedList都是线程不安全的,可以使用SynchronziedList包装。
  3.   从使用方面,在插入时ArrayList的时间复杂度为O(n),如果在队尾的话就是O(n),但是插入涉及扩容的话时间复杂度就为O(n)。而LinekdList的时间复杂度为O(n),队尾和对头的话时间复杂度为O(1)。查询的二者的时间复杂度为O(n)。
  4.   基本上在开发的时候,推荐使用ArrayList。

3.在Set中,你说说HashMap和HashSet的区别吧?


  HashSet底层就是使用HashMap实现的,硬要说区别的话,在数据的存储上HashSet存储不重复的数据,HashMap存储键值对。HashSet还实现了Set接口。

4.在Map中,你说说HashTable和HashMap的区别?

  1.   线程的安全方面,HashMap不是线程安全的,hashTable是线程安全的,其底层是使用Synchronzied实现的,所以效率上比HashMap低。
  2.   键值对的存储方面,HashMap支持key和vlaue为null的情况,但是Key的null只能存在一个。而HashTable的键值都不能为null。
  3.   底层结构方面,HashMap主要基于 hash表+链表+红黑树实现的,HashTable基于数组+单链表实现的。在解决Hash冲突的时候,当表大于等于64且链表节点大于等于8的时候HashMap就会将链表转为红黑树。而HashTable则是使用拉链法。在扩容时,HashMap会扩容为2的n次幂(2^n),HashTable会扩容为 2n+1。

5.StringBuffer和StringBuilder的区别?


  主要就是线程安全的区别,StringBuffer是线程安全的,而StringBuilder,因为StringBuilder底层使用Synchronzied来实现的,所以在效率上StringBuilder会高很多。

6.接口和抽象类的区别?

 

  1.   抽象类是个基类,是可以不会被实现,只能被继承,而接口既可以被继承有可以被实现。并且一个类可以实现多个接口。
  2.   抽象类中可以存在非抽象方法,但是接口只能存在抽象方法。
  3.   抽象类中可以存在普通的变量,但是接口中的变量必须是静态的变量。

7.Spring的核心是什么?

 

  1.   主要就是 IOC和AOP。
  2.   IOC就是控制反转,用户不再需要手动的创建实例,而是从IOC容器中直接获取时候,也保证了类创建的安全性。
  3.   AOP就是面向切面,通过切面的方式进行方法的增强,不会修改原代码,保证了代码的封装性。

8.Spring常用的注入注解有哪些?

 

  1.   主要就是使用@AutoWired进行注入,通过ByClass的方式。
  2.   也可以通过@Qualifier进行注入,通过ByName的方式。
  3.   在被@Bean修饰的方法中,如果参数就一个的话,就会进行自动注入。

9.Nacosp配置中心有了解过吗?


  Nacos既可以作为注册执行也可以作为配置中心,可以通过分组的方法进行模块化的配置,就可以通过编写bootstrap配置文件编写共享配置。

10.Gateway网关了解过吗?


  在微服务项目中,请求会先进入网关中,进行校验后路由到对应的服务中。通过的配置进行限流,Gateway中最典型的就是令牌桶算法来限流。

11.说说你对令牌桶算法的理解?


  请求访问服务需要携带令牌,从令牌桶中获取,令牌桶中的令牌生成的是速率是固定的。主要就是通过RequestRateLimiter进行配置的。

12.熟悉Linux哪些指令?


cd :进入
cat file 查康文件信息
vim file 修改文件信息
ll: 查看目录结构
top:查康进程
touch file 创建一个文件
等等

13.熟悉哪些设计模式?


  在项目中主要就是使用到 工厂模式和策略模式。
  在我的电影项目中,为了动态的控制Reddison通过不同的分布式锁和策略,就使用到了 自定义注解+AOP+工厂模式+策略模式实现的。
  自定义注解其中的属性主要就是 锁的名字,锁的类型,锁的策略。
  AOP使用环绕通知用来控制上锁和解锁的顺序。
 工厂模式,工厂类主要就是一个enumMap属性,key为锁类型的枚举,value即使reddison通过的不同类型的锁实现,通过对应的锁类型的枚举来获取对应的锁。
 策略模式,策略类中主要就是抽象策略方法,内部子类去重写该抽象方法,这些子类就是一个一个的策略,通过策略的枚举返回对应的策略方法。

14.JVM的内存模型?

 

  1.   主要就是堆和栈结构。
  2.   堆用来存储类的实例和数组,且是线程共享的。
  3.   栈主要即使存储局部变量和调用方法的内存,且是线程私有的。
  4.   在jdk8之前的时候还存在方法区,主要就是存储类的信息,常量等信息,在jdk8之后为了防止OOM,移除了方法区在本地内存中创建了元空间存储这些数据。

  
15.垃圾回收算法有哪些?

 

  1.   标记回收法,通过可达性分析算法也就是通过GC Root标记存活的对象,将其他对象进行回收。但是呢,缺点很明显,会导致空间碎片话,在极端条件小可能会导致无法创建长数组。
  2.   标记整理法,通过可达性分析算法,将标记的对象移动到内存的一端然后进行回收,缺点就是涉及到大量数据的移动,效率很低。
  3.   复制算法,将内存空间分为两个部分,将当前一侧存活的对象复制到另一侧中,将旧一侧对象进行回收,一此此规则进行垃圾回收,缺点就是空间利用率太低了。

16.垃圾回收器有哪些?


  主要就是串行垃圾回收器,并行垃圾回收器,并发垃圾回收器,G1垃圾回收器,其中G1垃圾回收器是目前最主流的。

17.听你说到G1垃圾回收器,那你说说该垃圾回收器的理解吧?

 

  1.   其结构主要就是 新生代和老年代,其中新时代分为Eden区,to幸存者区和from幸存者区。
  2.   采用的垃圾回收算法就是复制算法。
  3.   回收流程主要就是 新时代的回收,并发标记那些需要被回收的老年代。混合回收主要就是将标记的老年代和可以晋升的新时代存储到新的老年代中,如果老年代中的对象过于庞大的话就会这些数据复制存储到巨型区(humongous)中。

18.有了解过线程的周期吗?(其实就是要问线程的状态有哪些)

  1.   在线程被创建的时候就是线程的新建状态。
  2.   在线程获取对象锁的时候就是线程的可执行状态。
  3.   在线程获取锁失败的时候线程就会进入堵塞状态。
  4.   在线程主动调用wait方法线程就会进入睡眠状态,此时需要被notify或notifyAll进行唤醒。
  5.   在线程主动调用sleep方法线程就会进入计时睡眠状态。
  6.   在线程运行完之后就会进入终止状态。

19.java中的并发工具类有哪些?

 

  1.     CountDownLatch:允许一个或多个线程等待其他线程执行完之后再执行。
  2.     CyclicBarrier:允许一组线程相互等待,直到所有线程到达每隔屏障后继续执行。
  3.     Semaphore:允许控制同时访问特定资源的线程数量,可以用来限制并发访问的数量。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/806380.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SVN的介绍

首先SVN是什么: Apache下的一个开源的项目Subversion,通常缩写为 SVN,是一个版本控制系统。 版本控制系统是一个软件,它可以伴随我们软件开发人员一起工作,让我们编写代码的完整的历史保存下来。 目前它的各个版本的…

实现鼠标在页面点击出现焦点及大十字星

近段时间,在完成项目进度情况显示时候,用户在操作鼠标时候,显示当鼠标所在位置对应时间如下图所示 代码实现步骤如下: 1.首先引用 jquery.1.7.js 2.再次引用raphael.js 3.然后引用graphics.js 4.最后引用mfocus.js 其中mfocu…

3. DAX 时间函数-- DATE 日期--一生二,二生三,三生万物

在数据分析过程中,经常需要从一个数据推到另外一个数据,日期数据也是如此,需要从一个日期推到另外一个相关的日期,或者从一群日期推到另外一个相关的日期/一群相关的日期。这一期说的就是日期之间彼此推衍的函数,会比之…

Linux:自动化构建 - make

Linux:自动化构建 - make make基本概念makefile语法变量PHONY make基本概念 make是一个用于自动化编译和构建过程的工具。它主要用于管理大型软件项目的构建过程,帮助开发者更高效地编译和部署代码,并减少人为错误的发生,这使得软件的编译和…

Scala - 高阶函数

高阶函数(Higher-Order Function)就是操作其他函数的函数。 Scala 中允许使用高阶函数, 高阶函数可以使用其他函数作为参数,或者使用函数作为输出结果。 以下实例中,apply() 函数使用了另外一个函数 f 和 值 v 作为参数&#xf…

电商技术揭秘十八:电商平台的云计算与大数据应用小结

电商技术揭秘相关系列文章 电商技术揭秘一:电商架构设计与核心技术 电商技术揭秘二:电商平台推荐系统的实现与优化 电商技术揭秘三:电商平台的支付与结算系统 电商技术揭秘四:电商平台的物流管理系统 电商技术揭秘五&#xf…

【STL】list的模拟实现

目录 前言 list概述 list的节点 list的迭代器 list的结构 构造与析构 拷贝构造与赋值 list的元素操作 insert() push_back() push_front() erase() pop_back() pop_front() clear() swap() size() 完整代码链接 前言 如果你对链表还不熟悉或者忘了的话…

Harmony鸿蒙南向驱动开发-PWM

PWM(Pulse Width Modulation)即脉冲宽度调制,是一种对模拟信号电平进行数字编码并将其转换为脉冲的技术,广泛应用在从测量、通信到功率控制与变换的许多领域中。通常情况下,在使用马达控制、背光亮度调节时会用到PWM模…

微信小程序实现输入appid跳转其他小程序

前言 本文记录wx.navigateToMiniProgram打开另一个小程序API使用方法&#xff0c;并封装为组件。 wxml 部分 输入框用来记录appid&#xff0c;按钮用来查询并跳转。 <view class"container"><input class"input" placeholder"请输入要查…

Flutter Your project requires a newer version of the Kotlin Gradle plugin

在开发Flutter项目的时候,遇到这个问题Flutter Your project requires a newer version of the Kotlin Gradle plugin 解决方案分两步: 1、在android/build.gradle里配置最新版本的kotlin 根据提示的kotlin官方网站搜到了Kotlin的最新版本是1.9.23,如下图所示: 同时在Ko…

ISO27017云服务安全管理体系认证介绍!

云服务信息安全管理体系&#xff08;简称“CSISMS”&#xff09;&#xff0c;以ISO/IEC 27017:2015为认证依据。ISO/IEC 27017标准是建立在ISO/IEC 27001信息安全管理体系框架和ISO/IEC 27002作为最佳实践控制设置的坚实基础之上&#xff0c;通过ISO/IEC 27017标准认证&#xf…

python如何写入csv

在使用python对文件操作的过程中&#xff0c;你肯定碰到过对csv文件的操作&#xff0c;下面就python对csv文件的操作进行详述。 CSV&#xff08;Comma-Separated Values&#xff09;逗号分隔符&#xff0c;也就是每条记录中的值与值之间是用分号分隔的。 打开CSV文件并写入一…

实战项目——智慧社区(一)

1、项目介绍 系统功能 登录、修改密码、登出 &#xff08;1&#xff09;首页 &#xff08;1.1&#xff09;数据统计&#xff1a;小区人员统计对比图&#xff0c;占比图 &#xff08;2&#xff09;物业管理 &#xff08;2.1&#xff09;小区管理&#xff1a;小区数据的增删改…

C++ sort函数

头文件 <algorithm> 使用 #include <iostream> //#include <vector> #include <algorithm> using namespace std; struct student {int sno;string name; }; //此处值得注意的是&#xff1a;如果要将形参定义为引用类型&#xff0c;则必须先定义为…

在开发过程中使用 git rebase 还是 git merge

在开发过程中使用 git rebase 还是 git merge Merge(合并)的优点和缺点Rebase(变基)的优点和缺点总结&#xff1a; Git merge 和rebase的目的是一样的&#xff0c;它们都是将多个分支合并成一个。 虽然他们最终的目标是一样的&#xff0c;但这两种方法实现的方式是不同的。那么…

富足--改变固有的行为模式分清幻想与现实

科学不等于我们所说的科技。 科学研究就是把钱变成知识&#xff0c;⽽技术开发就是把知识变成钱&#xff0c;这样⼀说&#xff0c;⼤家就知道它们不是⼀回事了。 技术开发的⽬的或者说创新的⽬的 是赚钱&#xff0c;不是创造知识。 创新要基于现有的⼈类知识&#xff0c;或者…

leetcode73 矩阵置零

题目描述 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用原地算法。 输入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&#xff1a;[[1,0,1],[0,0,0],[1,0,1]] 输入&#xff1a;matrix [[0,1,2,0],[3,4…

【Go】go mod初始化

遇到问题 创建go项目时使用 go mod init 命令提示如下错误&#xff1a; go: cannot determine module path for source directory /Users/easton/go/basic-go (outside GOPATH, module path must be specified) 解决方案一 这是因为go mod init 初始化项目时&#xff0c;需要…

【数据结构】单链表(一)

上一篇【数据结构】顺序表-CSDN博客 我们了解了顺序表&#xff0c;但是呢顺序表涉及到了一些问题&#xff0c;比如&#xff0c;中间/头部的插入/删除&#xff0c;时间复杂度为O(N);增容申请空间、拷贝、释放旧空间会有不小的消耗&#xff1b;增容所浪费的空间... 我们如何去解…

蓝桥杯刷题 二分-[99]分巧克力(C++)

题目描述 儿童节那天有 K 位小朋友到小明家做客。 小明拿出了珍藏的巧克力招待小朋友们。 小明一共有 N 块巧克力&#xff0c;其中第 i 块是 HiWi 的方格组成的长方形。 为了公平起见&#xff0c;小明需要从这 N 块巧克力中切出 K 块巧克力分给小朋友们。 切出的巧克力需要…