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面向对象详解(对象的主要三个特性) 一.总结 一句话总结: 对象的行为:可以对 对象施加那些操作,开灯,关灯就是行为. 对象的形态:当施加那些方法是对象如何响应,颜色,尺寸 ...
随机推荐
- [Android Studio] *.jar 与 *.aar 的生成与*.aar导入项目方法(转)
[Android][Android Studio] *.jar 与 *.aar 的生成与*.aar导入项目方法http://blog.csdn.net/qiujuer/article/details/ ...
- CentOS 6.5下Squid代理服务器的安装与配置
1.1 缓存代理概述 作为应用层的代理服务器软件,squid主要提供缓存加速,应用层过滤控制的功能. 1. 代理的工作机制 当客户机通过代理来请求web页面时,指定的代理服务器会先检查自己的缓存 ...
- 北京联通IPTV 数码视讯 Q1 破解过程
1. 买个usb转ttl的线,我买的是ch340g,3.8元包邮,店家貌似叫telesky,不重要,买到这货就行,里面有送杜邦线 2. 电脑上安装ch340g驱动,注意不要安装错了,注意电压的设置保持 ...
- bzoj1874 [BeiJing2009 WinterCamp]取石子游戏
1874: [BeiJing2009 WinterCamp]取石子游戏 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 925 Solved: 381[ ...
- codeforces.com/contest/251/problem/C
C. Number Transformation time limit per test 2 seconds memory limit per test 256 megabytes input sta ...
- Service Fabric Cluster Manager
作者:潘罡 (Van Pan)@ Microsoft 我们回到Service Fabric最底层的话题,谈谈Service Fabric是怎么工作的. 首先,我们回到下面的文档,看看Service F ...
- python基础之collections模块
Counter Counter是一个简单的计数器,可以统计一段字符串中各个元素出现的次数: import collections counter_1=collections.Counter('kjsd ...
- python中的模块及路径
python在import module的时候 是按照以下顺序去import一个module的: 1. 首先判断这个module是不是built-in即内建模块, 如果是则引入内建模块,如果不是则在一 ...
- IntelliJ IDEA中Java类注释
打开Idea,依次选择File-->Settings-->Editor-->File and CodeTemplates ,右侧tab选项卡点击Includes,选择File Hea ...
- CentOS 7快速入门系列教程(一)
基本命令 ls 列举当前目录下的所有文件夹 ls -l 查看文件还是文件夹 d表示文件夹 -表示文件 ls --help man ls 询问命令 man 3 malloc 查看函数 cd 跳转 ...