软件开发岗面试

面试问题

自我介绍

你在项目中遇到的最大的挑战和难点是什么?怎么去解决的?

你刚接触一个项目的时候,你是如何去做的,具体做了些什么

http 协议如何保证可靠性

  • http 协议建立在 TCP 协议之上
  • TCP 协议通过连接管理、确认应答、超时重传、拥塞控制、流量控制等手段来保证传输的可靠性

讲讲 java 的语言特性

  • 简单性:Java语言继承了C++语言的优点,去掉了C++中学习起来比较难的多继承、指针等概念,所以Java语言学习起来更简单,使用起来也更方便
  • 面向对象:Java是一种面向对象的编程语言
  • 分布性:Java设计成支持在网络上应用,它是分布式语言。所以只要用Java编写了一个程序,就可以到处应用
  • 编译和解释性:Java编译程序生成字节码,而不是通常的机器码,这使得Java开发程序比用其他语言开发程序快很多
  • 稳健性:Java刚开始被设计出来就是为了写高可靠和稳健的软件的。所以用Java写可靠的软件很容易。目前许多第三方交易系统、银行平台的前台和后台电子交易系统等都会用Java语言开发
  • 安全性:Java的存储分配模型是它防御恶意代码的主要方法之一。所以很多大型企业级项目开发都会选择用Java开发
  • 可移植性:Java并不依赖平台,用Java编写的程序可以运用到任何操作系统上
  • 高性能:Java是一种先编译后解释的语言,所以它不如全编译性语言快。但Java设计者制作了“及时”编译程序,这样就可以实现全编译了
  • 多线程:Java是多线程语言,它可以同时执行多个程序,能处理不同任务
  • 动态性:Java语言设计成适应于变化的环境,它是一个动态的语言

介绍一下 B 树和 B+ 树

  • B树,概括来说是一个节点可以拥有多于2个子节点的二叉查找树

  • B和B+树的区别在于,B+树的非叶子结点只包含导航信息,不包含实际的值,所有的叶子结点和相连的节点使用链表相连,便于区间查找和遍历
    在这里插入图片描述
    在这里插入图片描述

  • B树和B+树广泛应用于文件存储系统以及数据库系统中

分布式了解吗,微服务有没有接触过

  • 分布式一般来说就是将程序和数据通过网络分布在多台计算机上执行,起分散压力的作用
  • 微服务一般指将应用程序构造为一组松散耦合的服务,对偶来说,就是分散能力.
  • 有关分布式和微服务另请参见参考文献.

类加载和双亲委派

  • 加载指的是将类的class文件读入到内存,并为之创建一个java.lang.Class对象
  • 问题:当Java虚拟机要加载一个类时,到底派出哪个类加载器去加载呢?
  • 首先当前线程的类加载器去加载线程中的第一个类(假设为类A)。
    注:当前线程的类加载器可以通过Thread类的getContextClassLoader()获得,也可以通过setContextClassLoader()自己设置类加载器。
  • 如果类A中引用了类B,Java虚拟机将使用加载类A的类加载器去加载类B。
  • 还可以直接调用ClassLoader.loadClass()方法来指定某个类加载器去加载某个类。
  • 另请参见参考文献《jvm之java类加载机制和类加载器(ClassLoader)的详解》

银行家算法

  • 在操作系统中,一般需要研究死锁的避免、检测和解除. 银行家算法是操作系统中避免死锁的著名算法. 在银行中,客户申请贷款的数量是有限的,每个客户在第一次申请贷款时要声明完成该项目所需的最大资金量,在满足所有贷款要求时,客户应及时归还。银行家在客户申请的贷款数量不超过自己拥有的最大值时,都应尽量满足客户的需要。在这样的描述中,银行家就好比操作系统,资金就是资源,客户就相当于要申请资源的进程. 银行家算法是一种最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态地申请资源,但系统在进行资源分配之前,应先计算此次分配资源的安全性,若分配不会导致系统进入不安全状态,则分配,否则等待. 细节另请参见参考文献.

LRU

  • 最近最少使用:利用局部性原理,根据一个作业在执行过程中过去的页面访问历史来推测未来的行为。它认为过去一段时间里不曾被访问过的页面,在最近的将来可能也不会再被访问。所以,这种算法的实质是:当需要淘汰一个页面时,总是选择在最近一段时间内最久不用的页面予以淘汰。
  • 手撕 LRU 代码:https://leetcode-cn.com/problems/lru-cache-lcci/

函数后面加const的作用是什么

  • 函数后加 const 指示这个函数不对成员变量进行修改,是一个只读函数.

map和set有什么区别,它们分别又是如何实现的

  • map 中的元素是 K-V 对,关键字起到索引的作用,值则表示与索引相关联的数据;set 与之相对就是关键字的简单集合,set中每个元素只包含一个关键字
  • set的迭代器是const的,不允许修改元素的值;map允许修改value,但不允许修改key
  • map支持下标操作,set不支持下标操作
  • 底层都通过红黑树实现,另请参见参考文献 [3]

STL由什么基本组成的

  • 通常认为,STL 是由容器、算法、迭代器、函数对象、适配器、内存分配器这 6 部分构成
    在这里插入图片描述

虚函数和纯虚函数的区别是什么?

  • 虚函数和纯虚函数是 C++ 实现多态的基础;允许通过基类指针调用子类的这个函数
  • 虚函数:在基类中定义为 virtual 且有函数体的方法,子类可以重写虚函数,也可以不重写 (看需求)
  • 纯虚函数:在基类中定义为 virtual 且没有函数体的方法,子类必须实现纯虚函数.

对数据库的索引有了解么,加上索引后有什么好处

  • 数据库索引一般有 B+ 树索引、哈希索引和顺序索引
  • 良好的索引可以使数据库的查询变得高效,当然,同时也增加了插入、删除的开销,因为这些操作需要同时对索引进行操作
  • 一般选择在主键上建立索引

你项目中是否接触过多线程编程,运用场景是什么?在当前大数据环境下,多线程的优势

  • 提高资源的利用效率
  • 在某些情况下简化了编程
  • 加快程序的响应速度

你对Web开发是否有了解,是否有接触相关的实际项目,你是怎么做的?

你对Mysql优化了解多少,你都采取过哪些优化方法

  • 关于MySQL优化的方式太多了,这里没法做一一陈述,有需要的另请参见参考文献进行学习,这里列出几条
  • 一般考虑在WHERE和ORDER BY命令上涉及的列建立索引
  • 字符字段最好不要做主键
  • 使用合理的字段属性长度,固定长度的表会更快。使用enum、char而不是varchar
  • 避免select *,将需要查找的字段列出来
  • 不用函数和触发器,在应用程序实现
  • 尽量避免在WHERE子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描

你是如何实现数据从后端到前端展示的

  • 这个问题的答案见仁见智,小到 前端PHP 调用一个存储过程,通过一定的逻辑渲染到 Web 页面上;大到现在非常流行的前后端分离,后端提供数据接口,前端拿到接口之后采用一定手段展示,最常见的就是 vue + spring 组合,有兴趣可以自行学习.

是否愿意接受加班

是否愿意接受工作城市的调剂

对自己投递的部门有什么了解

反问

参考文献

  • TCP协议-如何保证传输可靠性 (https://www.cnblogs.com/taoxiaoxin/p/13836206.html)
  • 【经典数据结构】B树与B+树的解释 (https://www.cnblogs.com/makai/p/10861296.html)
  • AVL树和红黑树(map和set的底层实现)(https://blog.csdn.net/weixin_44826356/article/details/105750262)
  • C语言中文网 - STL (http://c.biancheng.net/view/6593.html)
  • 虚函数和纯虚函数的区别 (https://blog.csdn.net/Hackbuteer1/article/details/7558868)
  • 腾讯2017校招实习生面试总结 腾讯实习生面试经验 (已拿offer) (https://blog.csdn.net/doleria/article/details/71699154?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.baidujs&dist_request_id=5b49d992-d7eb-4cab-a621-0128c353f89b&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.baidujs)
  • 腾讯2016实习生面试经验(已经拿到offer) (https://blog.csdn.net/oNever_say_love/article/details/51223886?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.baidujs&dist_request_id=f4d5a8d6-e14c-47f4-b852-16fe99a5d288&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.baidujs)
  • 腾讯!阿里!大二男生斩获4家头部科技公司实习offer!完整经验总结!(https://blog.csdn.net/Datawhale/article/details/106935063)
  • 最全 MySQL 优化方法,从此优化不再难 (https://zhuanlan.zhihu.com/p/59818056)
  • jvm之java类加载机制和类加载器(ClassLoader)的详解 (https://blog.csdn.net/m0_38075425/article/details/81627349)
  • 面试时怎样自我介绍比较好?(https://www.zhihu.com/question/20602526/answer/950289279)
  • 程序员未来职业发展路线 (https://baijiahao.baidu.com/s?id=1602401857064691889&wfr=spider&for=pc)

附录:HR 面

题目来源:https://blog.csdn.net/doleria/article/details/71699154

  • 讲讲自己每天的安排
  • 看了哪本书对自己影响比较大,怎么体现?
  • 大概多久看完一本书?
  • 朋友或者外人对自己的评价?
  • 有哪些优势,不足?
  • 本科保研大概排名多少?
  • 之前实习怎么处理优先级?
  • 为什么想来我司?
  • 父母对工作地点的看法?
  • 有没有女朋友?
  • 对加班的看法?
  • 最有成就感的一件事,最受挫败的一件事?
  • 有没有投递竞争对手公司的实习生招聘?
  • 有没有意向的事业群以及额外要补充的条件?
  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值