花旗银行——2020春招软件开发岗部分面试题
去年选择考研,决定之前想着最差不过是今年参加春招,结果现实只会比你想的更差,谁都预料不到天灾。个人原因三月决定放弃读研,参加春招。一直以来在CSDN得到了很多帮助,几乎各种问题都能得到解答,除了技术贴居然还有面经,技术帖我是写不出来了,所以希望面经能帮助到需要的人吧。
以下是花旗金融的软开部分面试题,花旗他们的岗位在招聘的时候并没有细分,问题也是比较基础。除了专业问题还会进行一些英语问答,面试之前一定一定要准备英文问答,不管这部分在面试中占比如何,可是支支吾吾的(比如我)会让HR印象非常不好。
好了,碎碎念结束,回忆了部分问题,然后搜集了部分答案,不完整,面试之前自己还是复习下相关内容吧。
目录
1、知道抽象类么?抽象类和虚拟类是什么?有什么关系?
- 抽象类是不可实例化的基类,用abstract声明,如有一个animal类,不希望实例一个没意义的animal,但可以从中继承dog、fox等;
- 抽象方法只能存在于抽象类或者接口中,但抽象类中却能存在非抽象方法,即有方法体的方法;
- c++虚类相当与java里面的抽象类,用virtual声明,含有虚函数。
2、接口是什么?Interface,有什么特点?
- 一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能);
- 解决Java无法使用多继承的一种手段;
- 用interface声明,implements(三人称单数)实现;
- 接口中存在的变量一定是public static final的。
抽象类、虚拟类、接口都不可实例化
3、熟悉的排序算法的实现
比如快排的过程:
- 选取一个key作为枢纽,一般为整组记录中的第一个/最后一个数;
- 设置两个index,分别为left=0、right=n-1;
- left从前往后,right从后往前,分别找到一个left区域比key大,right区域比key小的值,然后交换;
- 指导left与right“相遇”,将key值置于left,此时key在正确的位置上即完成一趟快排;
- 左右分别重复上述过程。
(关于排序算法需要具体去看相关的文章,比如https://blog.csdn.net/weixin_41190227/article/details/86600821)
4、Java多线程如何实现?
Java多线程实现方式主要有四种:
- 继承Thread类,重写run方法;
- 实现Runnable接口,重写run方法;
- 实现Callable接口,重写call方法,通过FutureTask包装器来创建Thread线程;
- 使用线程池,利用ExecutorService、Callable、Future实现有返回结果的多线程。
5、什么是单例模式,如何实现单例模式?
是什么:单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为。比如说一个系统只有一个登录弹窗入口,这个登录弹窗就适合用单例模式设计。
实现思路:一个类能返回对象一个引用(永远是同一个)和一个获得该实例的方法(必须是静态方法,通常使用getInstance这个名 称);当我们调用这个方法时,如果类持有的引用不为空就返回这个引用,如果类保持的引用为空就创建该类的实例并将实例的引用赋予该类保持的引用;同时我们 还将该类的构造函数定义为私有方法,这样其他处的代码就无法通过调用该类的构造函数来实例化该类的对象,只有通过该类提供的静态方法来得到该类的唯一实例。
- 饿汉式单例模式的实现,线程安全,调用效率高,但是不能延时加载。所谓饿汉式,就是在不管你用的用不上,一开始就建立这个单例对象。饿汉式单例实现线程安全。
- 懒汉式单例模式的实现,线程安全,调用效率不高,但是能延时加载。所谓“懒汉式”与“饿汉式”的区别,是在于建立单例对象的时间不同。“懒汉式”是在你真正用到的时候才去建这个单例对象。
- 静态内部类方式,线程安全,调用效率高,可以延时加载。这种方式外部类没有static 属性,不会像饿汉一样立即加载对象。只有真正调用getInstance()才会加载静态内部类,加载时是线程安全的,兼并延时调用和并发高效调用。
- 枚举实现,线程安全,调用效率高,不能延时加载,可以天然的防止反射和反序列化调用。通过内部静态enum的方法来实现,因为JVM会保证enum不能被反射并且构造器方法只执行一次。避免了反射和反序列化的漏洞,但没有延时加载的效果。
6、除了单例模式,还知道哪些设计模式?
首先区分设计模式和框架模式:
设计模式,是针对代码,如同修筑房屋时砖瓦的层叠方式,是软件开发的基石,如单例模式、工厂模式。
框架模式,是针对 “框架” 的,是面向某些应用场景的可复用的方案,如同医院、商场等不同功能建筑的布局,是比设计模式更宏观一些的概念,如MVC。
创建型模式:对象实例化的模式,创建型模式用于解耦对象的实例化过程。
结构型模式:把类或对象结合在一起形成一个更大的结构。
行为型模式:类和对象如何交互,及划分责任和算法。
设计模式
7、写SQL查询语句,查出XX的前10数据
Oracle:
-- 读取前10条select * from table1 where rownum<=10;
-- 读取后10条select * from table1 where rownum<=10 order by id desc;
MySQL:
-- 读取前10条select * from table1 where 1=1 limit 10;
8、指针和引用的区别
指针:数据类型,代表内存编号
引用:某一变量的别名,对引用的操作与变量的直接操作完全一样
指针 | 引用 | |
相同点 | 均可优化传参的效率,都是地址的概念 | |
不同点 | 占用内存 | 不占内存 |
可为空 | 不可为空 | |
可不初始化 | 必须初始化 | |
初始化后可改变 | 初始化后不可变 |
9、英文问答
- 用英语介绍自己的教育背景
- 家乡是哪儿?
- 家乡有什么特点?
- 大学期间有什么喜欢的运动?
- 大学期间有什么喜欢的电影?
- 在杭州一家软件开发工程师(java)的面试题部分
- gameloft(智乐)软件开发部分面试题 仅供参考
- Android 软件开发面试题 问答部分
- 2016 腾讯软件开发面试题(部分)
- 广发银行——2020春招软件开发工程师部分笔试知识点
- 软件开发asp.net面试题收集(二)
- 软件开发面试题(JAVA)2
- 2015 软件开发面试题
- 继续软件行业部分开发人员毛病的话题
- 使用.net开发手机管理软件 (九) 短信部分——PDU简介及其格式
- 中级Java软件开发面试题以及答案(二)
- 笔试面试题总结(四)--- 软件开发
- 软件测试面试题(含部分答案)
- 组态软件开发(仅限后台部分)
- 软件开发面试题(JAVA)1
- C语言 sizeof和strlen之间的那些事 C/C++软件开发求职面试题 必备考点(一)
- 2016腾讯软件开发面试题(不定项选择题【1-12】)
- 软件开发工程师面试题之三
- java软件开发工程师实习求职常见面试题
- 前端开发面试题收集(css部分)