网站首页> 文章专栏> 【中原银行-Java研发-郑州】收集的面试考题
【中原银行-Java研发-郑州】收集的面试考题
路人王 天津 2021-09-13 98 0 0

一、3.18 上午 中原银行一面 20分钟

1.数据库插入一条数据

insert into tablename (列1,列2,列3…) values(值1,值2,值3…)

2.事务ACID

原子性(Atomicity)
原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
一致性(Consistency)
事务前后数据的完整性必须保持一致。
隔离性(Isolation)
事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
持久性(Durability)
持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响

3.你怎么用的事务,注解还是配置文件?

声明式事务 编程时事务 在这里插入图片描述

4.注解基于什么?

一种应用在类、方法、参数、属性、构造器上的特殊修饰符
AOP
注解就是继承自Annotation的接口,他没有行为只有数据,让其实现行为必须有实现对象(代理对象)
基于反射实现【反向代理】

5.介绍项目,CRUD Boy

6.主键怎么设的?自增主键 Redis怎么自增,incr?

Redis Incr 命令将 key 中储存的数字值增一。

如果 key 不存在,那么 key 的值会先被初始化为 0 ,然后再执行 INCR 操作。

如果值包含错误的类型,或字符串类型的值不能表示为数字,那么返回一个错误。

本操作的值限制在 64 位(bit)有符号数字表示之内。

原子自增 线程安全
INCR page_view

7.索引了解吗?

8.synchronize加在静态和非静态。锁类锁对象

1.直接作用于实例方法,相当于给当前对象加锁,进入同步代码前要获得当前实例的锁。这个锁称为对象锁,加锁的对象是当前实例,两个线程使用的是同一个对象


public class Syn implements Runnable {
     static Syn syn=new Syn();
    static  int i=0;
    //synchronized直接作用于实例方法,需要拿到对象锁
    public synchronized  void increase() {
		// TODO Auto-generated method stub
       i++;
	}
	@Override
	public void run() {
		// TODO Auto-generated method stub
		for(int j=0;j<10000;j++)
		{
			increase();
		}
      
	}
	public static void main(String[] args) throws InterruptedException {
              //两个线程同时执行syn对象的run方法
		Thread thread=new Thread(syn);
		Thread thread1=new Thread(syn);
		thread.start();
		thread1.start();
		thread.join();
		thread1.join();
		System.out.println(i);
	}

}

2.2.直接作用于静态方法,相当于给当前类加锁,进入同步方法要获得当前类的锁。我们首先看这个例子,尽管加了synchronized这个关键字,依然是线程不安全的。因为这时两个不同的线程指向不同的对象。如果在synchronized加static ,就能够保持线程安全。此时请求是当前类的类锁。这个锁称为类锁。


public class Syn implements Runnable {
     //static Syn syn=new Syn();
    static  int i=0;
    public static synchronized  void increase() {
		// TODO Auto-generated method stub
       i++;
	}
	@Override
	public void run() {
		// TODO Auto-generated method stub
		for(int j=0;j<10000;j++)
		{
			increase();
		}
      
	}
	public static void main(String[] args) throws InterruptedException {
		Thread thread=new Thread(new Syn());
		Thread thread1=new Thread(new Syn());
		thread.start();
		thread1.start();
		thread.join();
		thread1.join();
		System.out.println(i);
	}
}

9.线程池参数。

在这里插入图片描述

10.等待队列可以一直放吗?不可以,会拖垮内存和线程。

简单的理解是同步队列存放着竞争同步资源的线程的引用(不是存放线程),而等待队列存放着待唤醒的线程的引用。

11.ThreadLocal 使用注意事项?【解决共享变量】

1.ThreadLocal叫做线程变量,意思是ThreadLocal中填充的变量属于当前线程,该变量对其他线程而言是隔离的,也就是说该变量是当前线程独有的变量。ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量
2.使得每个线程在某一时间访问到的并不是同一个对象,这样就隔离了多个线程对数据的数据共享。
3.ThreadLocalMap是ThreadLocal的内部静态类,而它的构成主要是用Entry来保存数据 ,而且还是继承的弱引用。在Entry内部使用ThreadLocal作为key,使用我们设置的value作为value
脏数据
由于线程池会复用Thread对象,南无与Thread绑定的类的static属性的ThreadLocal变量也会被复用,如果在现成的run()方法中不明显的代用remove()方法,就可能会get(重要的线程信息。)
内存泄漏
实际上 ThreadLocalMap 中使用的 key 为 ThreadLocal 的弱引用,弱引用的特点是,如果这个对象只存在弱引用,那么在下一次垃圾回收的时候必然会被清理掉。
ThreadLocal有三个方法,get set remove 最后 remove必须要进行执行,否则会发生内存泄漏,因为提示表明了static表明threadlocal修饰

12.redis幂等性。setnx对吗?

任意多次执行所产生得影响均与一次执行的影响相同,对数据库的影响只能是一次性的,不能重复处理。在实际项目中,在客户端没限制幂等性,重复调用接口,导致接口数据重复写入数据。
解决接口幂等性有多种方式,建立数据库唯一索引,乐观锁或悲观锁,程序先查询后判断,唯一标识机制等。本文介绍使用redis生成唯一标识来限制接口重复提交,实现接口幂等性。
主要使用redis数据存入,注解拦截处理,校验redis的key,实现逻辑比较简单,实现写入数据接口幂等性十分重要,在接口被客户端调用时,在不影响业务逻辑的情况,保证数据不重复写入数据数据库,防止脏数据和乱数据的写入。

13 .实习过吗?

14 .学习网站?

15. 等等等等....

都没深问,感觉他们时间挺紧张的,自己也没敢放开说。

二、中原银行:2021年9月10日

1.继承、继承的实现方式

继承描述的是一种能力:可以使用现有类的所有功能,并在无需重新编写原有类的情况下进行功能上的扩展。
子类 extends 父类。

2.介绍springboot

3.抽象类和接口

在这里插入图片描述

4.索引

5.三大范式

第一范式(确保每列保持原子性)
第二范式(确保表中的每列都和主键相关)
第三范式(确保每列都和主键列直接相关,而不是间接相关)

6.linux、查看某一进程号、路径

ps -aux | grep 进程

top命令经常用来监控linux的系统状况,是常用的性能分析工具,能够实时显示系统中各个进程的资源占用情况。

三、2021.8.28 做了笔试题

2021.9.9 收到一面邮件
2021.9.10 面试

腾讯会议,用了手机,面试大概15分钟

1、自我介绍

2、项目,内容、代码量

3、数据结构: 栈的应用场景,稳定算法哪些?

栈在表达式求值中的应用 : 编译器通过两个栈来实现,一个栈用来保存操作数,一个栈用来保存运算符
栈在括号匹配中的应用
如何实现浏览器前进和后退

4、网络:TCP,UDP

在这里插入图片描述

5、Linux: 查看进程,杀死进程 命令

管道符 top kill kill -9 进程号

6、数据库:三大范式,增删改查

7、Java:final, 接口与抽象类。

总体比较简单,两个面试官也挺好,可能岗位不合适...

祝大家好运!!!
零、2月25日投递简历。
投递成功后邮箱会受到回复。

四、一、笔试 3月2日 120min

在指定时间段进去答题就行,时间2小时,综合难度相较于一线大厂比较简单。

  1. 认知能力测试(10题)
  2. 计算机通识(10题)
  3. 岗位客观题(20题)
  4. 岗位主观题(2题,编程或简答)
  5. AI视频面试胜任力测评(7道题) 6 . 人岗匹配度( 4 题)

五、1面 3月5日 40min

两个技术面试官:

1.自我介绍。

2. 介绍项目。

3 . 熟悉的集合。

4. Map如何遍历。

在for循环中使用entries实现Map的遍历

Map <String,String>map = new HashMap<String,String>();
map.put("熊大", "棕色");
map.put("熊二", "黄色");
//key
for(String key : map.keySet()){
    System.out.println(key);
}
//value
for(String value : map.values()){
    System.out.println(value);
}

通过Iterator遍历

Iterator<Entry<String, String>> entries = map.entrySet().iterator();
while(entries.hasNext()){
    Entry<String, String> entry = entries.next();
    String key = entry.getKey();
    String value = entry.getValue();
    System.out.println(key+":"+value);
}

5. CourrentHashMap。

在这里插入图片描述

6 . 线程的实现方式,线程池主要参数。

在这里插入图片描述 1.第一种AbortPolicy:不执行新任务,直接抛出异常,提示线程池已满
2.第二种DisCardPolicy:不执行新任务,也不抛出异常
3.第三种DisCardOldSetPolicy:将消息队列中的第一个任务替换为当前新进来的任务执行
4.第四种CallerRunsPolicy:直接调用execute来执行当前任务

7. 解决多线程的方法。

8. MySQL事务、幻读的解决办法。

在这里插入图片描述

9 . 用过的Redis数据类型、分布式锁(set、Redisson)。

10. Redis持久化策略。

11 . 快排原理及时间复杂度空间复杂度。

下午面试,当天晚上就收到了面试通过的邮件,效率很快,赞!

六、2面 3月12日 30min

一个面试官,应该是小领导,态度很友好。

1. 自我介绍。

2. 介绍项目。

3 . JVM&GC。

4. 为什么不选择考研。

5 . 为什么想加入中原银行。

6. 未来的职业规划。

7 . 都去帝都了为什么想回河南老家。

8. 都投了哪些公司&手里的offer。

9 . 帮我分析了一波比较不错的河南企业(中移在线、中原银行、牧原集团...)。

10. 家庭情况。

11 . 主动给介绍了一下中原银行。

当天晚上同样收到面试通过的邮件。

七、3面 3月13日 30min

一个面试官,穿着正式,挺严肃的感觉。

1. 自我介绍。

2. 介绍项目。

3 . 为什么不考研......

4. 你相较于研究生的优势。

5. 在京实习半年的收获。

6 . 对中原银行的看法。

7. 为什么秋招的时候没有投简历。

8 . 手里有哪些offer,及offer薪资和期望薪资。

同样当天收到人事面试通过的通知,这反馈速度,爱了爱了。

五、测评 3月14日 40min
一些常见的性格测试
六、offer 3月15日
虽然轮数很多,但是总的来说面试体验很棒,面试官态度都很好,大赞。

评论

评论  分享  打赏