2022年java开发工程师面试题、常用注解

string中的常用方法:字符串转换为int(Integer.parseInt(a))
     compareTo()比较两字符串的字典顺序(>为1,<为-1,等于为0)
     concat()拼接两个字符串
     contains()当包含指定的值时返回true
     equalsIgnoreCase()判断两个字符串是否相等,不区分大小写
     indexOf()返回字符在字符串中第一次出现的索引,以及从指定位置开始找,没有返回-1
     lastIndexOf()返回最后一次出现的索引
     length()返回字符串长度
     replace()把字符串指定的字符替换成为某某
     split()根据给定的正则表达式拆分字符串,返回一个字符数组
     substring()从某个下标开始到某个下标结束,截取字符串,得到新字符串,或者从某个位置开始,到最后结束
     trim()去左右空格
     valueOf()将任意类型的值转换为字符串
string buffer  效率高安全性低和stringbuilder   安全性高 效率低   存值是存入堆中空间,一个是value(是数组)和count(数组中的个数)
instanceof 运算符只能用作对象,判断对象是否属于此类   接口是interface
iterator 迭代器
jre和jdk的区别
怎么上传文件
shiro  安全框架  AuthorizationInfo:授权信息  AuthenticationInfo:认证信息
session和cookie的区别
http和https的区别
vue中怎么实现跨组件传值使用vuex
        vuex的核心概念:store、state、getters、mutations、actions
堆和栈    对象创建是放在推还是栈
算法的理解和使用场景
你碰到的异常  throws(声明)  throw(抛出)   try(捕获)
多态:多种形态,同一个引用,根据对象不同,展现的效果不同(里式替换原则)
stringbuffer  线程安全(当变量是一个共享变量的时候,而且是多线程的环境要保证数据的一致性)和stringbuilder线程不安全(优限考虑)
jsp   <%=new  Date() %> 表达式   <%! %>声明   <%  %>小脚本
list(ArrayList+vector+LinkList) ArrayList+vector基于数组  LinkList基于链表  用equals去重
set (hashset (哈希表)+treeset(二叉树))   去重是根据先比较hashcode值如果相等在用equals 如果都相等就是重复的
set无序是指跟存入的顺序不同,它会自己根据内部哈希码排序(HashSer+TreeSet)用 hashCode       
map(hashMap 不安全,效率高 +hashtable  安全,效率低+treeMap 有序  每一个键值做为红黑树的节点,升序排序)  
红黑树是一个更高效的检索二叉树    每个节点只能是红色或者黑色,根节点永远是黑色的
map遍历,forec  1.拿到所以的键set   2.拿到所有的值conllection,拿到键值Enry
(动态数组,双向链表,哈希表(数组加链表),二叉树(左是小于根的值,右边是大于根的值))
三个集合的参数
集合排序用到了什么样子的算法
jvm内存分配机制
jvm是怎么加载类的
new 的对象怎么开辟空间的怎么存的
git 的版本回退  git reset --hard id
nginx的策略模式
qps如何预估
支付接口幂等性解决方案
redis库存数量怎么保证原子性
反射
  反射的概念
      java的反射机制是指在程序的运行状态中,可以构造任意一个类的对象
      可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法
      可以调用任意一个对象的属性和方法。
  获取对象  
      Class.forName(完整类名)
      类名.class
      对象.getClass()
线程池的工作原理
    1.主线程通过线程池创建核心线程如果核心线程数满了,会放入任务队列中。
    2.如果任务队列也满了的话,然后会去看最大的连接线程数满了没。
    3.如果最大线程数也满了,然后就会进入饱和策略进行任务拒绝。
线程创建方式,线程池 
  通过继承Thread类创建线程类
    劣势:因为线程类已经继承了Thread类,所以不能再继承其他父类。
  通过实现Runnable接口创建线程类
  通过实现Callable接口创建线程
优势:线程类只是实现了Runnable接口与Callable接口,还可以继承其他类。
劣势:编程稍稍复杂,如果需要访问当前线程,则必须使用Thread.currentThread()方法。
线程池参数有哪些
线程池的创建方式
newSingleThreadExecutor():它的特点在于工作线程数目被限制为 1,操作一个无界的工作队列,所以它保证了所有任务的都是被顺序执行,最多会有一个任务处于活动状态,并且不允许使用者改动线程池实例,因此可以避免其改变线程数目;
newCachedThreadPool():它是一种用来处理大量短时间工作任务的线程池,具有几个鲜明特点:它会试图缓存线程并重用,当无缓存线程可用时,就会创建新的工作线程;如果线程闲置的时间超过 60 秒,则被终止并移出缓存;长时间闲置时,这种线程池,不会消耗什么资源。其内部使用 SynchronousQueue 作为工作队列;
newFixedThreadPool(int nThreads):重用指定数目(nThreads)的线程,其背后使用的是无界的工作队列,任何时候最多有 nThreads 个工作线程是活动的。这意味着,如果任务数量超过了活动队列数目,将在工作队列中等待空闲线程出现;如果有工作线程退出,将会有新的工作线程被创建,以补足指定的数目 nThreads;
newSingleThreadScheduledExecutor():创建单线程池,返回 ScheduledExecutorService,可以进行定时或周期性的工作调度;
newScheduledThreadPool(int corePoolSize):和newSingleThreadScheduledExecutor()类似,创建的是个 ScheduledExecutorService,可以进行定时或周期性的工作调度,区别在于单一工作线程还是多个工作线程;
newWorkStealingPool(int parallelism):这是一个经常被人忽略的线程池,Java 8 才加入这个创建方法,其内部会构建ForkJoinPool,利用Work-Stealing算法,并行地处理任务,不保证处理顺序;
ThreadPoolExecutor():是最原始的线程池创建,上面1-3创建方式都是对ThreadPoolExecutor的封装。
2.thread的基本方法(了解一下,面试问的多)里面的方法
   yield()方法是让当前抢到cpu的线程退出cup从新进行等待队列
   join()方法超级VIP,直接抢占资源
   interrupt()方法中断sleep线程
   m.suspend()将线程挂起,不用了,因为容易造成死锁的状态
   m.resume();将线程恢复执行
  只能在方法同步中使用的方法
   wait()等待
   notify()唤醒,notifyAll()唤醒全部
redis中的持久化机制
redis中的缓存击穿穿透雪崩
redis 数据的类型以及使用场景
rpc的使用原理。
mysql的锁   
行级锁
开销大,加锁慢,会出现死锁。发生锁冲突的概率最低,并发度也最高。
表级锁
开销小,加锁快,不会出现死锁。发生锁冲突的概率最高,并发度也最低。
页级锁
开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。
共享锁 
排他锁 
意向锁
mysql的持久化机制 
    redo  log(差不多,但redo log会记录操作,当事务提交时会调用fsync接口对redo  log 进行刷盘,可以在这个里面读取)   
    buffer Pool(读数据时去磁盘缓存会先到buffer pool读取,先写入到这里面)
sql的执行计划  explain
    为了帮助开发人员根据数据表中现有索引情况,了解自己编写的SQL的执行过程、优化SQL结构,MySQL提供了一套分析功能叫做SQL执行计划(explain)。
mysql中where和having的区别   where 是条件     having   是分组后的筛选  只能放group by  / where  后面
求姓氏  用  left(name,1)  函数   union  多行插入
mysql (limit   起始行, 取多少行 )和orcale 分页的方法
sql的优化
mysql索引的使用场景和注意事项
     索引的设计原则
           1.更新频繁的字段不适合建立索引
           2.适合索引的列是出现在where子句中的列或者连接子句中指定的列
           3.基数比较小的表索引效果较差。
           4.使用短索引,如果对长字符串列进行索引,应该指定一个前缀的长度,减少索引空间(如果超过前缀长度,则使用索引排除不匹配的行)
           5.不要过度使用索引,索引需要额外的空间,并降低写操作的性能。
           6.对哪些查询中很少涉及的列,重复值比较多的列不要建立索引。
           7.定义外键的数据列一定要建立索引。
mysql几种索引的建立场景
海量的数据,你会怎么建索引
mysql引擎
   1.myisam
      不支持事务,但是每次查询都是原子的
      支持表级锁,即每次操作是对整个表加锁
     有三个文件:索引文件,表结构文件,数据文件
   2.innoDB
     支持ACID的事务,支持事务的四种隔离级别
     支持行级锁及外键约束:因此可以支持写并发
mysql存储过程    create procedure
mysql的正则表达式
三月份建了一张a表海量的数据,然后四月份增加了一个字段tet,查出五月份tet不为1或者2的
select * from a where tet!=1 or tet!=2 and data=5

mysql的日志有哪几种
utc时间  格林时间
谈谈你对mysql的优化
mysql常用的函数
    now  获取当前日期和时间
    length  获取字符串长度
    round  四舍五入
    substring  从具有特定长度的位置开始的最 一个子字符串
    union  
group by   分组查  男女各多少人
select  sex,COUNT(*) from  表  group  by  sex;

hibernate  事务用session开启事务管理
hibernate /mybatis (加载策略  get -->持久状态     new -->  临时状态  --  save --> 持久状态 --close-->游离状态 --update--> 持久状态  --delete-->临时状态 )
springboot,springmvc在项目中常用的注解
有父类子类,静态变量,静态代码块,构造函数,成员变量,他们的一个执行顺序是什么样的
nacos怎么检测服务的
过滤器拦截器aop的使用场景
springboot 搭建项目的一个优势
spring boot启动的一个过程
spring  boot  初始化环境变量,初始化容器的上下文,初始化配置属性  他们的一个顺序是什么样的
spring boot是如何读取配置文件的   如果在不同路径同一文件会以哪个为准
springmvc和MVC三层架构的区别
resultMap和resultType的区别     resultMap赋值实体类中必须有构造函数
autowired和resource注解的区别
@coertlloer和@restcoertller的区别
怎么接收前端传过来的参数
springcloud的五大组件
服务的熔断和降级。
mybatis的一二级缓存。
mybatis #{}和${}
mybatis常用的标签
   if     trim(prefix 拼接前缀 suffix 拼接后缀)    foreach  (open 什么开始  close  什么结束)
mpper中方法可以重载嘛
mpper的一个工作原理
docker的常用命令。
spring是什么
javabean生命周期
spring boot 注入的东西你怎么在普通的类调用他  (普通类调用自动注入的类)
spring事务处理机制
      1.编程式事务管理  (private  TransctionTemplate)
                   编程式事务使用TransctionTemplate
      2.声明式事务管理(@Transction)
          spring在aop基础的事务实现机制,最优点不需要在业务代码中添加事务管理的代码
           只需要在配置文件做相关的事务规则声明就可以了,但是声明式事务只能针对方法级别,无法控制代码级别的事务管理。
spring 事务的传播级别    propagation
     1.PROPAGAION_RFQUIRED:默认传播行为,如果当前没有事务就创建一个新事务,如果当前存在事务,就加入到事务中。
     2.PROPAGAION_SUPPORTS:如果当前存在事务,就加入到该事务,如果当前不存在事务就以非事务方式运行。
     3.PROPAGAION_MANDATORY:如果当前存在事务,就加入该事务,如果当前不存在事务就抛出异常。
     4.PROPAGAION_REQUIRES_NEW:无论当前存不存在事务都创建新的事务进行执行。
     5.PROPAGAION_NOT_SUPPORTED:以非事务方式运行,如果当前存在事务,就讲当前事务挂起。
     6.PROPAGAION_NEVER:以非事务方式运行,如果当前存在事务,就抛出异常。
     7.PROPAGAION_NESTED:如果当前存在事务,则在嵌套事务内执行,如果当前没有事务则按REQUEIRED属性执行
spring中事务的隔离级别
     1.ISOLATION_DEFAULT:使用数据库默认的事务隔离级别
     2.ISOLATION_READ_UNCOMMTTED:读未提交,容许事务在执行过程中读取其他事务未提交的数据。
     3.ISOLATION_READ_COMMITTED:读已提交,容许事务在执行过程中读取提前事务已提交的数据。
     4.ISOLATION_REPEATABLE_READ:可重复读,在同一个事务内任意时间的查询结果是一致的.
     5.ISOLATION_SERALIZABLE:所有事务依次执行。
spring boot事务
springMVC的工作流程
什么是微服务 
单例模式怎么实现的  
   就我想实现对象创建是内存地址都是同一个
   在那个内中先定义一个静态的本类的属性  static  Pig  p;
   再定义一个私有化本类的构造函数  private  Pig()  {};
   在提供一个公开的静态的方法来创建对象,并且把对象返回    p=new  Pig()
   就可以实现都是同一个
服务调用失败时得处理手段   熔断
eureka和zookper的区别
c  一致性   zk   他是一个主(写请求)从(读请求)节点,就是当你服务倒了,他会选举,的一个期间是没有反应的
a  高可用   eK  当他发现一个服务调用不了了,他会自动的切换其他服务,只要有一台服务,他都能保证注册服务的可用,但不一定查询到最新的信息
p 分区容错 有多个节点如果网络中断了,要保证这个服务还是可以用的  就是当p这个出现时 c 和 a 不能兼得
dubbon类似于sprngCloud

秒杀的一个流程
 流程A:点击秒杀按钮后将订单消息直接推送到订单消息队列,然后通过订单队列的监听器进行业务处理,
   将订单信息保存到数据库中生成订单记录
流程B:下单成功后,将订单信息发送到死信队列,死信队列中的消息会在十五分钟后进入到支付队列,
   最后通过支付队列的监听器进行业务处理,根据订单ID判断是否支付成功:
   1)若支付成功,则更新订单的状态为已支付(???);
   2)若未支付成功,则更新订单状态为已取消,并回滚库存+1

@EnableDiscpveryClient (地利啵嘚spv快得)   容许别人发现他
@configuration   (瑞省) 把这个类作为spring的配置类
@componentscan   (康抛恋次堪) 组件扫描
@springBootAppliscation  springboot的启动注解
@EnableFeignClients (地利啵飞看s)  微服务之间的调用
@Transactional  (穿塞克醒搂) 放在service接口层 设置一个读的操作(就比如是修改前读还是后)修改之后读   声明事务
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")  前端到后端的时间转换
@Repository (瑞破z追) 放在mpper层
@EnableTransactionManagement  (E能播 穿塞克醒 麦了机猛t)  开启事务
@component  注解的类变成了spring上下文的一个零件  spring启动他就启动
@Aspect (啊死摆可t)   aop注解面向切面  只要aop起作用了  这个类就会起作用
@Pointcut  (坡台特)   切入点
@RequestMapping标注的方法前执行,如果有返回值,则自动将该返回值加入到ModelMap中
@ModelAttribute  只要这个类运行了这个方法就会运行
@Around  (袄润得)  什么时候触发   放正则
@restcontroller    返回值都为json对象   controller+responsebody
@NoArgsConstructor   提供无参构造函数
@AllArgsConstructor   提供有参构造函数
@Data    提供 get set方法
@ToString   提供tostring方法
@Controller 在展现层使用,控制器的声明
@Service 在业务逻辑层使用(service层)
@Repository(弱破瑞追)在数据访问层使用(dao层)
@RabbitListener(queues="deadQueue" ) (勒省蕾)  //监听指定队列
@RabbitHandler        //交给这个方法来操作
@Bean    把返回值放入spring上下文中
@requertMapping    设置访问这个方法的请求地址
@FeignClient   (快得)声明你要调谁
@PathVariable (怕丝歪瑞博) 支持/传参
@RefreshScope (瑞f死扣得)  //自动刷新  nacos的配置中心内容改变时 自动读取刷新
@MapperScan(value = "com.zking.proivder.mapper")      (死盖)  扫描mapper
@RequestParam("name")   (拍润) 一到n个参数
@RequestBody     传参时使用    对象
@ResponseBody   返回json对象
@NotBlank   //非空
@Valid  当不符合要求时就会在方法中返回message 的错误提示信息。
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM dd HH:mm:ss")
自定义注解
@Retention:(瑞疼机)定义注解的保留策略
@Retention(RetentionPolicy.SOURCE)             //注解仅存在于源码中,在class字节码文件中不包含
@Retention(RetentionPolicy.CLASS)              //默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得,
@Retention(RetentionPolicy.RUNTIME)            //注解会在class字节码文件中存在,在运行时可以通过反射获取到
@Target:指定被修饰的Annotation可以放置的位置(被修饰的目标)
      @Target(ElementType.TYPE)                      //接口、类
      @Target(ElementType.FIELD)                     //属性
      @Target(ElementType.METHOD)                    //方法
      @Target(ElementType.PARAMETER)               //方法参数
      @Target(ElementType.CONSTRUCTOR)          //构造函数
      @Target(ElementType.LOCAL_VARIABLE)     //局部变量
      @Target(ElementType.ANNOTATION_TYPE)           //注解
      @Target(ElementType.PACKAGE)                   //包 
@Inherited:(int太瑞铁得)指定被修饰的Annotation将具有继承性 
@Before  类似于 @RequestMapping

@RestControllerAdvice (袄得坏死)   全局异常
@Autowired  @Resource:将自动在代码上下文找与其匹配(默认是类型匹配)的Bean,并自动注入到相应的地方
@Autowired和@Resource两个注解的区别:
   1)@Autowired默认按照byType方式进行bean匹配,@Resource默认按照byName方式进行bean匹配
   2)@Autowired是Spring的注解,@Resource是J2EE的注解,这个看一下导入注解的时候这两个注解的包名就一清二楚了
   Spring属于第三方的,J2EE是Java自己的东西,因此,建议使用@Resource注解,以减少代码和Spring之间的耦合。
@CrossOrigin   (夸死喔g)容许跨域
先分流再限流 (用的是令牌桶算法)
熔断
nacos配置中心在需要使用配置中心才导入依赖
导入getway依赖,具有路由转发请求过滤(权限校验限流监控) 默认的不用写端口要写方法名
网关自定义路由,类似于对暗号

秒杀
实现 InitializingBean  初始化bean  实现方法预加载

swagger  api接口文档的生成
@Api:用在类上,说明该类的作用。
@ApiOperation:注解来给API增加方法说明。
@ApiImplicitParams : 用在方法上包含一组参数说明。
@ApiImplicitParam:用来注解来给方法入参增加说明。
@ApiResponses:用于表示一组响应
@ApiResponse:用在@ApiResponses中,一般用于表达一个错误的响应信息
@ApiModel:描述一个Model的信息(一般用在请求参数无法使用@ApiImplicitParam注解进行描述的时候)
@ApiModelProperty:描述一个model的属性


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值