高级软件工程师(面试题)

高级软件工程师(面试题)

出题者:netkiller

出处:http://www.netkiller.cn/

高级软件工程师

下面的面试题不分语言,适用于所有编程语言,更多偏向设计。

设计一个分类功能

该功用于行政区域划分,商品分类,等等 例如中国->广东-深圳 .....

要求:

  1. 无限极分类,层次深度不限
  2. 快速检索,不能使用递归
  3. 只能使用一个数据库表实现
  4. 可以生成树形目录

商品以及属性功能的设计

一个商品有很多属性,例如尺寸,颜色这些属性有固定的值,而另一些属性如重量,体积是需要填写具体数值的,并且还有对应的单位。

要求:

  1. 商品分类(上一个问题中已经实现)
  2. 商品属性,有多个属性,且数目不确定,所以需要设计成可以无限添加
  3. 商品属性即可下拉选择,也可以填写具体数值

问题:

  1. 商品搜索怎么解决,包含商品名称,属性,属性值,描述的搜索
  2. 商品的库存怎么设计
  3. 分类搜索,怎样列出所有子分类以及子分类下的所有分类(无限深度)

用户注册的功能需求

场景模拟: 用户开户注册时常常填写了一部分资料,就离开了,有几种情况

  1. 用户放弃注册
  2. 网络连接失败
  3. 提交出错
  4. 其他链接吸引了用户点击

等等原因......

需求:

  1. 要求记录用户填写资料,再次回来(数日/数月后)点击注册的时候,用户不用重新填写所有资料,只需完成未完成的部分即可。
  2. 重要资料例如手机,电邮,即时通讯号码等等需要记录到数据库,已被公司回访客户。
  3. 在用户成功注册后应该删除之前保留在数据库中的手机,电邮,即时通讯等等。

请问如何实现?资料怎样保存?

事务处理相关

简述什么是事务处理?

在不能使用数据库的事务处理以及锁(表锁/行级锁)时,怎么保持数据一致性?怎么解决数据库并发操作?

  1. 怎样解决避免多个用户读读取同一条数据记录?
  2. 怎样避免多个用户更新同一条数据

模拟题一

例如有一个电商网站每个小时有100个用户下单,公司需要有10个客服处理用户的订单。

问题:

  1. 当10位员工进入admin后台,查看订单会出现什么问题?
  2. 怎样防止一个订单被一个以上的人看到?
  3. 如果两个员工同事看到同一个个订单,怎样避免员工,重复审批同一张订单?
  4. 如果订单X最先被员工A点开,这是员工A去忙其他事情,X定点就会一直挂起,怎样将订单重新分配?

开发框架

  1. 简述 MVC 原理以及实现
  2. 怎样实现 URL 路由
  3. 怎样实现类,方法访问权限控制

请问下面代码怎么实现?

用你最熟悉的语言实现。

{% highlight java %}

DB db = new DB() db.select(new field("name","age"...)).from("user").where(new And("xxx=xx", "xxx=xxx")).limit(10).offset(10).orderby("id",DESC)

{% endhighlight %}

进程与多线程

  1. 什么是阻塞,什么是非阻塞?
  2. 什么是同步,什么是异步?
  3. 什么情况下使用线程锁?
  4. 进程与线程的区别?
  5. 进程间通信有那几种,线程通信有那几种,以及各自的优势?

消息队列

消息有哪些瓶颈?

序列化

  1. 什么是序列化
  2. 常用序列化方式都有哪些

CDN应用

  1. CDN 缓存的原理?
  2. CDN 都可能缓存那些内容?
  3. 网站首页90%的内容是静态的,但是用户登录状态,消息状态是动态的怎么解决?
  4. JSON 可能缓存吗?
  5. 浏览器缓存与CDN缓存的关系,怎样实现用户浏览器与CDN同时缓存?

面向对象试题?

编写一个求和程序

s = new Sum();
s.add(10).add(5).add(6)

s.add(10).add(5).add(6)......add(3) 可以无限的写下去

obj = new Object()
obj.a()
obj.b()
obj.c()......obj.z()

obj.a().b().c() ... z()

与上面类似

这是 一个简单的 OOP 面试题,在做多年的面试经验中,发现很多人不知道怎样实现上面的问题

Restfull 试题

Restfull 是基于HTTP协议的RPC系统,对于公共服务不存在安全上面的考虑,调用方法也多是ajax,所以公共系统是开放的。

如果是私有服务,就需要考虑安全问题了,试题如下:

CQRS 问题

  1. 什么是 CQRS
  2. 可以在那些地方处理 CQRS

请为 Restful 增加 HTTP Auth

  1. 怎样为 Restful 增加 HTTP 认证
  2. 增加 http 认证有哪些方式
  3. 用户与密码安全吗?

使用 SSL 加密 Restful

  1. 购买的证书与自己生成的证书有什么区别
  2. SSL 怎样配置,在哪里配置
  3. 访问 SSL 的 Restful 需要注意什么

数据库应用

数据库分割问题

  1. 什么是顺平分割,什么是垂直分割
  2. 分表,分库有需要主要那些事项
  3. 分表,分库后怎么解决夸库查询
  4. 分表,分库后怎么创建索引

数据库复制问题

  1. 数据库复制有哪几种?
  2. 简述主从复制,主主复制,环形复制
  3. 当选择主从复制是软件开发上有哪些注意事项
  4. 主主如何应用

软件弹性设计

编译语言的弹性设计问题

背景模拟: 有一个电商平台已经开发完毕,编译打包,上线,运营。 由于市场瞬息万变,原有的打折系统设计已经不能满足现在的需求,如果不修改可会会给公司带来经济随时。 现在需要重新修改程序逻辑,但问题来了。目前正在做推广促销活动,系统访问量大不能中断现有服务,哪怕30都会给公司带来不可挽回的损失。

我的问题:

  1. 怎样在这个系统的设计之初解决后面遇到的问题
  2. 如何设计一个弹性打折系统
  3. 在不重启的情况下怎样改编编译语言的内部运行逻辑

问题延伸: 这个问题可以延伸到苹果IOS,例如发布app到苹果appstore至少需要半个月,半个月可能存在很多变数,很可能应用被审批通过,程序已经不在适合当前的情况了。

高可用设计

  1. 什么是高可用
  2. 什么是双机热备,双机热备有那些缺陷
  3. 什么是双活
  4. 请简述实现软件高可用要考虑那些因素

软件设计中的灾备问题

请简述设计一个远程异地灾备系统

  1. 两个机房怎样设计灾备系统
  2. 三个机房怎样设计灾备系统
  3. 跨境情况需要考虑那些影响因素

软件灾备开发问题

  1. 数据库怎样实现灾备
  2. 缓存怎样实现灾备
  3. 应用服务器怎样实现灾备
  4. Web 服务器怎样实现灾备
  5. 计划任务、定时周期运行的程序怎样灾备
  6. 消息队列怎样实现灾备
  7. 双活的软件怎样实现同一时刻只能一个运行,或者交替运行

软件部署问题

  1. 怎样实现软件自动化部署,实现自动化部署的关键几点是什么?
  2. 怎样处理配置文件
  3. 怎样排除不必要或者不希望部署的文件
  4. 怎样实现增量部署
  5. 怎样实现差异部署
  6. 怎样部署大文件,例如视频等。问题:有一个文件有500M,内容随时有修改,也会不定期追加,怎样实现差异部署,而不是再次发布一个500M的文件。
  7. 怎样部署编译软件
  8. 怎样备份
  9. 怎样部署windows程序
  10. 怎样快速回撤,切换时间点或者指定的版本。

以上不允许使用GIT/SVN实现自动部署。要求自动化不是在30秒内完成。

软件开发框架

插件的实现原理

  1. 插件有几部分组成
  2. 如何实现插件安装,卸载,启用,禁用?
  3. 安装,卸载,启用,禁用怎样实现不停机,不关闭服务的情况进行?

口述如何设计一个MVC框架

  1. 怎样实现 URL 路由
  2. 怎样实现控制器
  3. 怎样实现视图
  4. 怎样实现模型

口述如何设计一个SOA框架

  1. 框架分为几个部分?
  2. 采用什么协议与框架通信?
  3. 如果考虑到性能使用二进制协议你怎样实现?
  4. 如何解决并发冲突?
  5. 如何支持事务?
  6. 你怎样与消息队列集成或者通信?

口述设计一个分布式计划任务系统

背景:计划任务即周期或定时运行的程序,我们要解决单点故障问题与负载均衡的问题,在一个分布式系统中单节点是不允许的。

设计要求:能够实现高可用,负载均衡,横向扩展

  1. 怎样处理同时运行产生的冲突问题?
  2. 怎样排队运行?
  3. 任务如何持久化?
  4. 一个节点宕机,另一个节点怎么接管没有完成的任务?
  5. 如何横向扩展?
  6. 扩展,收缩,维护如果能做到不停机,不影响业务?

原文发布于微信公众号 - Netkiller(netkiller-ebook)

原文发表时间:2016-09-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏沃趣科技

sysbench的lua小改动导致的性能差异

最近在配合某同事做一项性能压测,发现相同数据量、相同数据库参数、相同sysbench压力、相同数据库版本和sysbench版本、相同服务器硬件环境下,我和同事的...

943
来自专栏机器人网

以太网不可用于机器人控制?来看看我们的测试结果

以太网是世界上最普及的通信标准。然而,由于其假定的非确定性行为,很少应用在机器人上。在本文中,我们将展示以太网的确定性一面,它可以为机器人通信提供灵活可靠的解决...

3064
来自专栏freesan44

加载RAM磁盘编译Xcode项目

每次对Xcode iOS项目进行clean、build或者在iOS虚拟机上launch,Xcode都会在DeriveData文件夹中进行读写操作。换句话说,就是...

542
来自专栏51CTO技术栈的专栏

记一次流量暴增造成的“生产事故”优化经历!

“在一次正常的活动促销之后,客服开始陆续反馈有用户反应在抢标的时候打不开网页或者 APP,在打开的时候标的就已经被抢光了。

3290
来自专栏java达人

众里寻她千百度,蓦然回首,那bug却在灯火阑珊处

今天发现consul上的A服务处于failed状态,幸运的是服务部署了两份,以预防单点故障,做负载均衡,连忙查看http://ip:port/health输出,...

2029
来自专栏.NET开发者社区

(码友推荐)2018-07-12 .NET及相关开发资讯速递

1.Optimization Thresholds – Grouping and Aggregating Data, Part 4

1093
来自专栏腾讯技术工程官方号的专栏

高并发性能调试经验分享(上)

4月份的时候看到一道面试题,据说是腾讯校招面试官提的:在多线程和高并发环境下,如果有一个平均运行一百万次才出现一次的bug,你如何调试这个bug?遗憾的是知乎很...

6302
来自专栏Java学习网

Web项目使用缓冲技术提高应用的稳定性及性能

生活中熟悉的天气预报信息为我们提供了及时的天气信息,给人们带来了很多的便利;从天气数据分析出来到人们看到这之间进行了大量的处理,一个网站显示的天气信息,需要访问...

3305
来自专栏美团技术团队

基于 KIF 的 iOS UI 自动化测试和持续集成

客户端 UI 自动化测试是大多数测试团队的研究重点,本文介绍猫眼测试团队在猫眼 iOS 客户端实践的基于 KIF 的 UI 自动化测试和持续集成过程。 测试框架...

4166
来自专栏架构师之路

feed留,单聊群聊,系统通知,状态同步,到底是推还是拉?

可以理解为一个发布订阅业务,典型业务是微博(朋友圈)。你关注了姚晨的微博,姚晨发布了消息,你的主页能看到她最新发布的消息,这个场景是推送,还是拉取呢?

983

扫描关注云+社区