github后端开发面试题大集合(三)
作者:小海胆
链接:https://www.nowcoder.com/discuss/3616
来源:牛客网
13.软件架构相关问题:
- 什么情况下缓存是没用的,甚至是危险的?
- 为什么事件驱动的架构能提高可扩展性(scalability)?
- 什么样的代码是可读性强的代码?
- 紧急设计(Emergent Design)和演化架构(Evolutionary
Architecture)之间的区别是什么? - 横向扩展(scale out) vs 纵向扩展(scale up): 有什么区别?分别在什么场景下使用?
- 分布式系统中如何处理"故障切换(failover)"和"用户会话(user
session)"? - 什么是CQRS(Command Query Responsibility
Segregation)?他和最早的Command-Query Separation原则有什么区别? - 什么是三层架构?
- 如何设计一个可扩展性高的系统?
- 处理C10k问题的策略有哪些?
- 如果让你来设计一个去中心化的P2P系统,你会如何设计?
- 为什么CGI的扩展性不好?
- 在设计系统时,你如何防止供应商依赖(Vendor
Lock-in)? - 在可扩展性上,发布/订阅(Publish-Subscribe)模式有什么缺点?
- 80年代以后,CPU有哪些变化?这些变化,对编程产生了什么影响?
- 性能生命周期(performace lifecycle)中,你认为哪个部分是需要考虑进去的? 如何管理?
- 除了恶意攻击造成的拒绝服务现象以外,哪些设计或者架构上的问题会导致拒绝服务?
- 性能和可扩展性之间有什么关系?
- 什么时候紧耦合是OK的?
- 一个系统要有什么特征才能适配云计算环境(Cloud Ready)?
- Does unity of design imply an aristocracy of architects?
14.面向服务架构相关问题:
- 在SOA中,为什么长期存活的事务(Long-lived transation)不被看好,而Saga却被看好?
- SOA和MicroService之间有什么区别?
- 我们来谈谈Web服务的版本管理、版本兼容性、重大变更管理这些事情吧.
- 在saga中事务和补偿操作(compensation operation)之间的区别是什么?在SOA中呢?
- 微服务不能做得太"微",你认为什么时候微服务太"微"了?
- MicroService架构的优劣是什么?
15.安全相关问题:
- 什么是双因素认证(Two Factor Authentication)?在一个已有的Web应用中,你如何实现这种机制?
16.比尔盖茨式问题:
- 如果你把一面镜子放在扫描仪上,会发生什么?
- 假设有一个和你完全一样的克隆人,而他是你的上司,你愿意和他工作吗?
- 现在请你面试一下我。
- 为什么Quora上的回答会比Yahoo Answer上的回答好?
- 对手是现代语言,你的任务是要为Cobol辩护,你会如何进行?
- 10年后的你是什么样子?
- 假设你是我老板,我被解雇了。你会如何通知我?
- 我想要重构一个系统,而你想要从头重写。我们来争论一下该怎么弄吧。然后我们反转角色,再争论一下。
- 老板要你对公司撒谎,你的反应是什么?
- 如果你可以穿越到以前,你会给年轻时候的你什么建议?
17.代码示例问题:
- 这段Javascript函数的输出是什么?
|
1
2
3
4
5
6
7
8
|
function hookupevents() { for (var i = 0; i < 3; i++) { document.getElementById("button" + i) .addEventListener("click", function() { alert(i); }); }} |
- 关于类型擦除(Type Erasure),这段Java代码的输出是什么?为什么?
|
1
2
3
4
|
ArrayList<Integer> li = new ArrayList<Integer>();ArrayList<Float> lf = new ArrayList<Float>();if (li.getClass() == lf.getClass()) // evaluates to true System.out.println("Equal"); |
- 你能指出哪儿有内存泄漏吗?
public class Stack {
private Object[] elements;
private int size = 0;
private static final int DEFAULT_INITIAL_CAPACITY = 16;
public Stack() {
elements = new Object[DEFAULT_INITIAL_CAPACITY];
}
public void push(Object e) {
ensureCapacity();
elements[size++] = e;
}
public Object pop() {
if (size == 0)
throw new EmptyStackException();
return elements[--size];
}
/**
* Ensure space for at least one more element, roughly
* doubling the capacity each time the array needs to grow.
*/
private void ensureCapacity() {
if (elements.length == size)
elements = Arrays.copyOf(elements, 2 * size + 1);
}
}
- if语句,或者更加通用点,条件表达式通常是过程式编程/命令式编程的形式。你能去掉这段代码中的switch语句,用面向对象的方式来修改这段代码吗?
public class Formatter {
private Service service;
public Formatter(Service service) {
this.service = service;
}
public String doTheJob(String theInput) {
String response = service.askForPermission();
switch (response) {
case "FAIL":
return "error";
case "OK":
return String.format("%s%s", theInput, theInput);
default:
return null;
}
}
}
- 你能去掉这里的if语句,将它改成更加面向对象吗?
public class TheService {
private final FileHandler fileHandler;
private final FooRepository fooRepository;
public TheService(FileHandler fileHandler, FooRepository fooRepository) {
this.fileHandler = fileHandler;
this.fooRepository = fooRepository;
}
public String Execute(final String file) {
final String rewrittenUrl = fileHandler.getXmlFileFromFileName(file);
final String executionId = fileHandler.getExecutionIdFromFileName(file);
if ((executionId == "") || (rewrittenUrl == "")) {
return "";
}
Foo knownFoo = fooRepository.getFooByXmlFileName(rewrittenUrl);
if (knownFoo == null) {
return "";
}
return knownFoo.DoThat(file);
}
}
- 如何重构这段代码?
function()
{ HRESULT error = S_OK; if(SUCCEEDED(Operation1()))
{ if(SUCCEEDED(Operation2()))
{ if(SUCCEEDED(Operation3()))
{ if(SUCCEEDED(Operation4()))
{
} else {
error = OPERATION4FAILED;
}
} else {
error = OPERATION3FAILED;
}
} else {
error = OPERATION2FAILED;
}
} else {
error = OPERATION1FAILED;
} return error;
}
github后端开发面试题大集合(三)的更多相关文章
- github后端开发面试题大集合(一)
作者:小海胆链接:https://www.nowcoder.com/discuss/3614?type=0&order=0&pos=5&page=0?from=wb来源:牛客网 ...
- github后端开发面试题大集合(二)
作者:小海胆链接:https://www.nowcoder.com/discuss/3615?type=0&order=0&pos=8&page=0来源:牛客网 7.非关系型数 ...
- 各大公司java后端开发面试题
各大公司Java后端开发面试题总结 ThreadLocal(线程变量副本)Synchronized实现内存共享,ThreadLocal为每个线程维护一个本地变量.采用空间换时间,它用于线程间的数据隔离 ...
- 面试题:各大公司Java后端开发面试题总结 已看1 背1 有用 链接有必要看看
ThreadLocal(线程变量副本) --整理 Synchronized实现内存共享,ThreadLocal为每个线程维护一个本地变量. 采用空间换时间,它用于线程间的数据隔离,为每一个 ...
- 各大公司Java后端开发面试题总结
ThreadLocal(线程变量副本)Synchronized实现内存共享,ThreadLocal为每个线程维护一个本地变量.采用空间换时间,它用于线程间的数据隔离,为每一个使用该变量的线程提供一个副 ...
- (最新)各大公司Java后端开发面试题总结
ThreadLocal(线程变量副本) Synchronized实现内存共享,ThreadLocal为每个线程维护一个本地变量. 采用空间换时间,它用于线程间的数据隔离,为每一个使用该变量的线程提供一 ...
- iOS开发面试题整理 (三)
1. 风格纠错题 修改完的代码: typedef NS_ENUM(NSInteger, CYLSex) { CYLSexMan, CYLSexWoman }; @interface CYLUser : ...
- 最新阿里Java后端开发面试题100道(P6-P7)
面试题 1.什么是字节码?采用字节码的好处是什么?2. Oracle JDK 和 OpenJDK 的对比?3.Arrays.sort 和 Collections.sort 实现原理和区别4.wait ...
- php开发面试题---php面向对象详解(对象的主要三个特性)
php开发面试题---php面向对象详解(对象的主要三个特性) 一.总结 一句话总结: 对象的行为:可以对 对象施加那些操作,开灯,关灯就是行为. 对象的形态:当施加那些方法是对象如何响应,颜色,尺寸 ...
随机推荐
- day6-python基础
- Python 爬虫入门(二)—— IP代理使用
上一节,大概讲述了Python 爬虫的编写流程, 从这节开始主要解决如何突破在爬取的过程中限制.比如,IP.JS.验证码等.这节主要讲利用IP代理突破. 1.关于代理 简单的说,代理就是换个身份.网络 ...
- Docker图形界面管理之DockerUI
DockerUI DockerrUI是一个基于Docker API提供图形化页面简单的容器管理系统,支持容器管理.镜像管理. 1.1 下载镜像 docker pull abh1nav/dockerui ...
- 怎么在.net里面解析JSON文件?
我在网上搜了好多的文章,讲了很多的方法.但是无一例外的都看不懂...可能是因为我在这方面是个白痴吧... 所幸的是,我搜到了一个博客,写的很是清晰,比我之前看的大片文章写的好多了,在这里:http:/ ...
- [Java] I/O底层原理之一:字符流、字节流及其源码分析
关于 I/O 的类可以分为四种: 关于字节的操作:InputStream 和 OutPutStream: 关于字符的操作:Writer 和 Reader: 关于磁盘的操作:File: 关于网络的操作: ...
- CAAnimation保持动画结束时的效果
配置动画时,加上一下两句 animation.removedOnCompletion = NO; animation.fillMode = kCAFillModeForwards;
- SPI、I2C、UART、I2S、GPIO、SDIO、CAN
总线,总线,总要陷进里面.这世界上的信号都一样,但是总线却成千上万,让人头疼. 总的来说,总线有三种:内部总线.系统总线和外部总线.内部总线是微机内部各外围芯片与处理器之间的总线,用于芯片一级的互连: ...
- 如何安装ioncube扩展对PHP代码加密
禅道专业版本的核心代码都是加密的(前端的html, css, js, 配置,语言项是开源的)的,使用的加密软件是 ioncube,因此要能运行禅道专业版本的软件,先要按照ioncube扩展. 一.下载 ...
- js便携小方法,你值得拥有
引言: 本章没有深奥的讲解js一些底层原理,比如this指针.作用域.原型啦,涉及的都是一些有利于平时开发时简化代码,提高执行效率,或者说可以当做一种经验方法来使用,篇幅都不长,小步快跑的让你阅读完整 ...
- 算法: 排序: 归并排序(Merge)
http://www.codeproject.com/Articles/805587/Merge-Sort