首页 > 其他分享 >吉祥航空和绿盟科技的面试

吉祥航空和绿盟科技的面试

时间:2023-11-17 14:33:00浏览次数:29  
标签:绿盟 变量 Spring 链表 面试 线程 内存 子类 吉祥

1.吉祥航空

1.1. HashMap实现,线程安全方式

答:1)HashMap不安全性,效率高,允许key和value为空,默认初始容量为16,之后每次扩充为2的倍数为2倍数是因为取余能提升hash&(length-1)预算效率底层是有数组+链表/红黑树构成。

2)关于哈希冲突(存储的不同值由于哈希表计算的哈希值相同而造成的),在JDK1.8之后,当链表长度超过阈值8时,将链表转为红黑树(但在链表转为红黑树之前,先判断数组的长度是否小于64,如果小于,

那么选进行数组扩容,如果数组长度大于64,则转为红黑树),减少搜索时间。

3)HashMap通过key的hashcode经过扰动函数(hash方法)得到hash值,然后通过(n(数组长度)-1)&hash判断元素存放位置,若当前位置存在元素,判断该元素与要存入元素的hash值以及key是否相同,若相同则覆盖,

不同则通过拉链法解决冲突。拉链法:创建一个链表数组,数组每一格就是一个链表,若遇到哈希冲突,将冲突值放到链表中存放位置。

1.2 ConcurrentHashMap

一种安全,效率较HashMap低,不允许key和value为空的哈希表结构底层也是由数组+链表/红黑树实现,在JDK1.7之前通过在每个数组的Segment部分加锁保证线程安全,在JDK1.8之后使用,使用数组的Node头结点加锁

1.3 Spring中用到的设计模式,在自己项目如何实现的

Spring是一款轻量级的Java开发框架,旨在提高开发人员的开发效率以及系统的可维护性。Spring是很多模块的融合,支持IOC(控制反转)和AOP(面向切面编程),可方便地对数据库访问,方便集成第三方组件(邮件,任务。调度,缓存等),支持单元测试,支持Restful Java应用程序开发

  • 单例:Spring中的Bean默认都是单例模式(创建分页对象);
  • 代理:Spring中AOP的实现(AOP实现日志记载);
  • 工厂:Spring通过BeanFactory、ApplicationContext创建bean对象(避免重复创建对象);
  • 模板(行为):Spring中的jdbcTemplate、hiberateTemplate等以Template借我的对数据库操作的类Spring通过Callback模式和模板方法配合灵活地实现代码复用 ;
  • 包装器:项目需要连接多个数据库,不同客户在每次访问中需要访问不同数据库,使得该模式可根据客户需求动态切换不同数据源 ;
  • 观察者(行为):Sprin事件驱动模型即观察者模式经典应用 ;
  • 适配器模式:使用接口转换成客户希望的另一个接口,适配器模式使接口不兼容的类一起工作Spring AOP的增强或通知使用到适配器,SpringMVC用适配器适配Controller ;
  • 装饰器:动态给对象添加一些额外的属性或行为。相比于继承更加灵活。如我们需要原有功能,但又不愿去修改原有代码。可设计一个Decorator套在原有代码外面。如InputStream家族,InputStream类下有FileInputStream、
  • BufferedInputStream(在不修改InputStream代码下增加缓存,提升读取文件速度)Spring自动加载即通过注解或配置在SpringBoot下实现某块功能。

1.4 JVM是什么,JMM是什么

JVM是Java虚拟机包含三个部分类加载器、运行时数据区、执行引擎 。

JMM是Java内存模型,包含主内存和工作内存,JMM主要有八种操作分别是read、load、stoge、write、use、assign、lock、unlock

  • read:作用域主内存,将共享变量从主内存传送到线程的工作内存;
  • load:作用域工作内存,将主内存传送的变量存储在工作内存的副本变量中 ;
  • stoge:将工作内存存储的变量传送给主内存write:将工作内存传送的变量写入到主内存的变量中;
  • use:作用域工作内存,将工作内存的值传给执行引擎,当执行引擎遇到需要使用的这个变量时,则执行该操作;
  • assign:作用于工作内存,当从执行获取到的值服药赋值时,通过栈来对该变量进行赋值;
  • lock:作用于主内存,将变量标记为独享状态;
  • unlock:作用域主内存,释放独占状态。

1.5 事务中如何避免两个线程同时修改同一个表

读未提交隔离级别:每个语句执行前生成一个Read View,只有在Read Viewe中的事务执行完后,才能对其他事务进行操作

1.6 实际中的单元测试用过吗

没有,用过集成测试。其实自己之前在test包中的Junit就是单元测试,测试每个部分的有效性小结:简历中项目与实际公司项目在性能和QPS方面相对较大。后面需要考虑在项目中使用Jmeter压测项目

2 绿盟

2.1 父类和子类静态代码块、非静态代码块、构造函数执行顺序

答:父类静态代码块-》子类静态代码块-》父类非静态代码块-》子类非静态代码块-》父类构造函数-》子类构造函数

2.2 父类子类成员变量赋值与构造方法赋值执行顺序

答:父类成员变量赋值-》子类成员变量赋值-》父类构造方法赋值-》子类构造方法赋值

2.3 创建线程方式

  1. new一个Thread类;
  2. 实现一个Runnable接口;
  3. 实现Callable接口(带返回值);
  4. 线程池创建线程;

2.4 三个线程实现三个依赖关系的三个安装任务

创建三个线程,将依赖关系理清楚,通过加锁来逐步执行,或者将依赖关系放入共享变量池中,通过判断依赖关系之间的关系分派三个线程执行三个安装任务

3.小结

自己对基础面试题看的挺多,但是实际领悟不深,对于多线程题目做的不多,没有多应用,后面继续巩固多线程基础,在项目中尽量应用多线程知识点。



标签:绿盟,变量,Spring,链表,面试,线程,内存,子类,吉祥
From: https://blog.51cto.com/u_15839058/8445425

相关文章

  • 如何搞砸一场面试?
    秋招最近陆续结束了,所以今天我们来盘点一下,有哪些行为会直接搞砸一场面试?不求大家能从失败中吸取教训,就看一乐呵也不错。1.面试迟到无论是面试官迟到,还是应聘者迟到,都是一件令人感到不悦的事。从面试官的角度来看,你小子还没来上班,就能面试迟到,那(后面)入职之后,不得天天迟到啊。......
  • 1.面向对象基础面试题小结
    面向对象基础1面向对象三大特点封装、继承、多态面向过程是将解决问题的过程拆分为一个个方法执行;面向对象是先抽象出对象,由对象执行方法的方式解决问题。1)封装:将一个对象的属性封装在对象内部,不允许外部对象直接访问对象内部信息。2)继承:不同类型对象,相互之间经常有......
  • 3、HTTP常见面试题
    HTTP是什么?Http是超文本传输协议,一种在通信双方之间指定的规则。其中超文本是指数据格式可以是文本、图片、视频等等各种类型的数据;HTTP常见的状态码1xx:提示信息,传输协议处理的中间状态2xx:请求成功。客户端发起的请求被服务端正确处理并返回响应数据3xx:资源重定位。客户端请......
  • [左神面试指南] 字符串[上]篇
    CD95判断两个字符串是否互为变形词/*模拟*/publicclassCD95_1{publicstaticbooleansolution(Strings1,Strings2){if(s1.length()!=s2.length())returnfalse;int[]temp=newint[256];for(charch:s1.toCharArray())......
  • Android并发编程高级面试题汇总(含详细解析 五)
    Android并发编程高级面试题汇总最全最细面试题讲解持续更新中......
  • 同程面试:说一下多态的实现原理?
    前段时间朋友去同程旅行面试,被问到了一个看似简单,实则“有点东西”的问题:“了解多态的实现原理吗?”,所以今天我们就来聊一聊这个问题。和朋友的聊天截图:为了保护朋友隐私,所以这里只把咱们今天讨论的问题展示给大家,如果有需要整个面试题的,可以单独找我获取:gg_stone【备注:同程】......
  • Mysql面试题
    1、MySQL有哪些数据库类型?数值类型有包括TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT,分别表示1字节、2字节、3字节、4字节、8字节的整数类型。1)任何整数类型都可以加上UNSIGNED属性,表示无符号整数。2)任何整数类型都可以指定长度,但它不会限制数据的合法长度,仅仅限制了显示......
  • 每天5道Java面试题(第12天)
    1. 为什么要ArrayList扩容要不是固定值?扩容固定容量,很难决定到底取多少值合适,取任何具体值都不太合适,因为所需数据量往往由数组的客户端在具体应用场景决定。所以依赖于当前已经使用的量*系数,才比较符合实际应用场景。2. Vector为什么是线程安全的集合?Vector的所有方法加上了s......
  • 如何准备2024年的系统设计面试?
    1前言如果你正在准备软件工程师或软件开发人员的面试,那么你可能知道由于其开放性质和广泛性,准备系统设计是多么困难,但同时你也不能忽略它。在软件工程界,如果你正在申请高级工程师/主管/架构师或更高级别的角色,系统设计是最受追捧的技能,也是整个过程中最重要的环节之一。如......
  • 一个关于 i++ 和 ++i 的面试题打趴了所有人
    我嘴欠问了下这个面试题:i++和++i有什么区别,谁的效率更高?并解释出原因。没错,我竟然答不上来,贼尴尬,心想早知不问了。主管有些意外,又问了几个别的同事,没一个答上来的。他脸黑了……前言都说大城市现在不好找工作,可小城市却也不好招人。我们公司招了挺久都没招到,主管......