作者:小海胆
链接: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后端开发面试题大集合(三)的更多相关文章

  1. github后端开发面试题大集合(一)

    作者:小海胆链接:https://www.nowcoder.com/discuss/3614?type=0&order=0&pos=5&page=0?from=wb来源:牛客网 ...

  2. github后端开发面试题大集合(二)

    作者:小海胆链接:https://www.nowcoder.com/discuss/3615?type=0&order=0&pos=8&page=0来源:牛客网 7.非关系型数 ...

  3. 各大公司java后端开发面试题

    各大公司Java后端开发面试题总结 ThreadLocal(线程变量副本)Synchronized实现内存共享,ThreadLocal为每个线程维护一个本地变量.采用空间换时间,它用于线程间的数据隔离 ...

  4. 面试题:各大公司Java后端开发面试题总结 已看1 背1 有用 链接有必要看看

    ThreadLocal(线程变量副本)       --整理 Synchronized实现内存共享,ThreadLocal为每个线程维护一个本地变量. 采用空间换时间,它用于线程间的数据隔离,为每一个 ...

  5. 各大公司Java后端开发面试题总结

    ThreadLocal(线程变量副本)Synchronized实现内存共享,ThreadLocal为每个线程维护一个本地变量.采用空间换时间,它用于线程间的数据隔离,为每一个使用该变量的线程提供一个副 ...

  6. (最新)各大公司Java后端开发面试题总结

    ThreadLocal(线程变量副本) Synchronized实现内存共享,ThreadLocal为每个线程维护一个本地变量. 采用空间换时间,它用于线程间的数据隔离,为每一个使用该变量的线程提供一 ...

  7. iOS开发面试题整理 (三)

    1. 风格纠错题 修改完的代码: typedef NS_ENUM(NSInteger, CYLSex) { CYLSexMan, CYLSexWoman }; @interface CYLUser : ...

  8. 最新阿里Java后端开发面试题100道(P6-P7)

    面试题 1.什么是字节码?采用字节码的好处是什么?2. Oracle JDK 和 OpenJDK 的对比?3.Arrays.sort 和 Collections.sort 实现原理和区别4.wait ...

  9. php开发面试题---php面向对象详解(对象的主要三个特性)

    php开发面试题---php面向对象详解(对象的主要三个特性) 一.总结 一句话总结: 对象的行为:可以对 对象施加那些操作,开灯,关灯就是行为. 对象的形态:当施加那些方法是对象如何响应,颜色,尺寸 ...

随机推荐

  1. jq获取兄弟节点

    $('#id').siblings() 当前元素所有的兄弟节点$('#id').prev() 当前元素前一个兄弟节点$('#id').prevaAll() 当前元素之前所有的兄弟节点$('#id'). ...

  2. Python完成RF测试用例

    Robot Framework 框架是基于 Python 语言开发的,所以,它本质上是 Python 的一个库. from robot.api import TestSuite from robot. ...

  3. Centos7.2安装tomcat+Myeclipse(遇到的一些问题与总结)+web项目实战

    工作环境:centos7.2 PS:没有耐心的同学可以直接跳到后面的安装方法,对于安装方法大多是网上的,我只是做相关收集和总结 给个tomca和Myeclipset折腾的半死,现在做一些总结1.一定要 ...

  4. SPSS数据类型:测量字段、角色字段

    一:测量字段 • 默认值.具有未知存储类型和值的数据(例如,由于其尚未被读取)将显示为<默认值>. •  连续.用于描述整数.实数或日期/时间等数字值,如范围 0 - 100 或 0.75 ...

  5. CODEVS 2171 棋盘覆盖

    2171 棋盘覆盖 给出一张nn(n<=100)的国际象棋棋盘,其中被删除了一些点,问可以使用多少12的多米诺骨牌进行掩盖. 错误日志: 直接在模板上调整 \(maxn\) 时没有在相应邻接表数 ...

  6. python---基础知识回顾(五)(python2.7和python3.5中的编码)

    Unicode 和 UTF-8 有何区别? python基础之字符编码 以上两篇看懂即可,那下面的就不需要看了 python标准数据类型 Bytes python--数据类型bytes Python ...

  7. 应用jfinal时要注意区分Db.query和Db.find

    jfinal有一个特别好的地方,sql查询的时候可以直接查record.但是要注意query和find的区别. query返回的是List<object>,find返回的才是List< ...

  8. bzoj千题计划158:bzoj2406: 矩阵(有源汇上下界可行流)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2406 设矩阵C=A-B 最小化 C 一行或一列和的最大值 整体考虑一行或者一列的和 二分最大值 这样 ...

  9. Codeforces Round #477 (rated, Div. 2, based on VK Cup 2018 Round 3) D 贪心

    http://codeforces.com/contest/967/problem/D 题目大意: 有n个服务器,标号为1~n,每个服务器有C[i]个资源.现在,有两个任务需要同时进行,令他为x1,x ...

  10. linux netstat查看服务和端口状态

    netstat可以查看linux系统中正在使用的服务和端口情况 常见参数 -a (all)显示所有选项,默认不显示LISTEN相关-t (tcp)仅显示tcp相关选项-u (udp)仅显示udp相关选 ...