![java高级软件工程师面试](https://i-blog.csdnimg.cn/blog_migrate/baff03834a97508736570f7345c600cf.png)
java高级软件工程师面试
I'm putting together some practice interview questions for a friend who lost his job. I thought it'd be useful to crowd-source some questions from you, Dear Reader.
我正在为一个失去工作的朋友整理一些练习面试问题。 亲爱的读者,我认为将您的一些问题众筹是很有用的。
These questions should be more software design focused, less technical trivia like my previous two lists of interview questions:
这些问题应该更注重软件设计,而不像我前面的两个访谈问题列表那样,不涉及技术琐事:
What Great .NET Developers Ought To Know (More .NET Interview Questions)
ASP.NET Interview Questions (7 years ago, can you believe it?)
ASP.NET面试问题(7年前,您相信吗?)
UPDATE: I think we all agree (or at least we should) that if you go into an interview tomorrow and you look across the table and the interviewer has simply printed out this list and is reading from it, that you should excuse yourself and run. This isn't a "guide to how to interview" nor is this meant to me a "best practices for engineers" list. It's simply a collective brain-dump of stuff that someone who's been in the business of developing software for money for 10 or so years should have some passing familiarity with. Of course, it's assumed that the interviewer is able to detect BS. This isn't, and shouldn't be, a trivia contest. If you're going to get a job (or you're looking for hire someone for a job) it's ultimately more important to understand if someone can Solve Problems and if Their Head is Screwed on Straight. Take it with a grain of salt, friends, remember, you found it on the Internet. - @shanselman
更新:我认为我们所有人都同意(或至少我们应该),如果明天您去面试,并且您对着桌子看,而面试官只是简单地打印出了这份清单并从中读取,您应该原谅自己并逃避。 这不是“面试指南”,对我而言,这也不是“工程师最佳实践”列表。 这只是一个集体的脑力转储,对于从事金钱开发软件已有10年以上经验的人应该有所了解。 当然,假设访问者能够检测到BS。 这不是,也不应该是琐事竞赛。 如果您要找到工作(或正在寻找雇用某人的工作),那么最终最重要的是要了解某人是否可以解决问题以及他们的头脑是否直截了当。 随便带一点盐,朋友,记住,您是在Internet上找到它的。 -@ shanselman
Here's what I have so far.
到目前为止,这就是我所拥有的。
- What is something substantive that you've done to improve as a developer in your career? 作为职业发展者,您做了什么实质性的改进?
- Would you call yourself a craftsman (craftsperson) and what does that word mean to you? 您会称自己为工匠吗?这个词对您意味着什么?
- Implement a <basic data structure> using <some language> on <paper|whiteboard|notepad>. 在<paper | whiteboard | notepad>上使用<some language>实现<basic data structure>。
- What is SOLID? 什么是SOLID?
- Why is the Single Responsibility Principle important? 为什么单一责任原则很重要?
- What is Inversion of Control? How does that relate to dependency injection? 什么是控制反转? 这与依赖注入有什么关系?
- How does a 3 tier application differ from a 2 tier one? 3层应用程序与2层应用程序有何不同?
- Why are interfaces important? 为什么界面很重要?
- What is the Repository pattern? The Factory Pattern? Why are patterns important? 什么是存储库模式? 工厂模式? 模式为何重要?
- What are some examples of anti-patterns? 反模式的一些例子是什么?
- Who are the Gang of Four? Why should you care? 谁是四人帮? 你为什么要在乎呢?
- How do the MVP, MVC, and MVVM patterns relate? When are they appropriate? MVP,MVC和MVVM模式如何关联? 什么时候合适?
- Explain the concept of Separation of Concerns and it's pros and cons. 解释关注点分离的概念及其优缺点。
- Name three primary attributes of object-oriented design. Describe what they mean and why they're important. 列出面向对象设计的三个主要属性。 描述它们的含义以及它们为什么重要的原因。
- Describe a pattern that is NOT the Factory Pattern? How is it used and when? 描述不是工厂模式的模式? 如何使用以及何时使用?
- You have just been put in charge of a legacy code project with maintainability problems. What kind of things would you look to improve to get the project on a stable footing? 您刚被负责具有可维护性问题的旧代码项目。 您希望通过哪些方面的改进来使项目稳定下来?
- Show me a portfolio of all the applications you worked on, and tell me how you contributed to design them. 向我展示您使用过的所有应用程序的投资组合,并告诉我您是如何设计的。
- What are some alternate ways to store data other than a relational database? Why would you do that, and what are the trade-offs? 除了关系数据库以外,还有哪些替代方法可以存储数据? 您为什么要这样做,权衡是什么?
- Explain the concept of convention over configuration, and talk about an example of convention over configuration you have seen in the wild. 解释约定优于配置的概念,并讨论您在野外看到的约定优于配置的示例。
- Explain the differences between stateless and stateful systems, and impacts of state on parallelism. 解释无状态系统与有状态系统之间的差异,以及状态对并行性的影响。
- Discuss the differences between Mocks and Stubs/Fakes and where you might use them (answers aren't that important here, just the discussion that would ensue). 讨论Mocks和Stubs / Fakes之间的区别以及您可以在哪里使用它们(答案在这里不是那么重要,只是随后的讨论)。
- Discuss the concept of YAGNI and explain something you did recently that adhered to this practice. 讨论YAGNI的概念,并解释您最近遵循此做法所做的事情。
- Explain what is meant by a sandbox, why you would use one, and identify examples of sandboxes in the wild. 说明沙箱的含义,为什么要使用沙箱,并找出野外的沙箱示例。
Concurrency
并发
- What's the difference between Locking and Lockless (Optimistic and Pessimistic) concurrency models? 锁定和无锁(乐观和悲观)并发模型之间有什么区别?
- What kinds of problems can you hit with locking model? And a lockless model? 锁定模型会遇到什么问题? 还有无锁模型?
- What trade offs do you have for resource contention? 您在资源争夺方面有哪些权衡?
- How might a task-based model differ from a threaded model? 基于任务的模型与线程模型有何不同?
- What's the difference between asynchrony and concurrency? 异步和并发之间有什么区别?
- Are you still writing code? Do you love it? 您还在编写代码吗? 你喜欢它吗?
- You've just been assigned to a project in a new technology how would you get started? 您刚刚被分配到一项采用新技术的项目中,如何开始?
- How does the addition of Service Orientation change systems? When is it appropriate to use? 服务导向的添加如何改变系统? 什么时候适合使用?
- What do you do to stay abreast of the latest technologies and tools? 您如何做才能跟上最新的技术和工具?
- What is the difference between "set" logic, and "procedural" logic. When would you use each one and why? “设置”逻辑和“过程”逻辑之间有什么区别? 您什么时候使用每个,为什么?
- What Source Control systems have you worked with? 您与哪些源代码管理系统一起使用?
- What is Continuous Integration? Have you used it and why is it important? 什么是持续集成? 您是否使用过它,为什么它很重要?
- Describe a software development life cycle that you've managed. 描述您所管理的软件开发生命周期。
- How do you react to people criticizing your code/documents? 您对批评您的代码/文档的人有何React?
- Whose blogs or podcasts do you follow? Do you blog or podcast? 您关注谁的博客或播客? 您是博客还是播客?
- Tell me about some of your hobby projects that you've written in your off time. 告诉我一些您在业余时间写的爱好项目。
- What is the last programming book you read? 您最近读过的编程书是什么?
- Describe, in as much detail as you think is relevant, as deeply as you can, what happens when I type "cnn.com" into a browser and press "Go". 尽可能详尽地描述我在浏览器中键入“ cnn.com”并按“ Go”时发生的情况。
- Describe the structure and contents of a design document, or a set of design documents, for a multi-tiered web application. 描述多层Web应用程序的设计文档或一组设计文档的结构和内容。
- What's so great about <cool web technology of the day>? <当下的酷网络技术>有什么优点?
- How can you stop your DBA from making off with a list of your users’ passwords? 您如何才能阻止DBA窃取用户密码列表呢?
- What do you do when you get stuck with a problem you can't solve? 当遇到无法解决的问题时该怎么办?
- If your database was under a lot of strain, what are the first few things you might consider to speed it up? 如果您的数据库承受着很大的压力,那么您可能会考虑在哪些方面加快它的速度呢?
- What is SQL injection? 什么是SQL注入?
- What's the difference between unit test and integration test? 单元测试和集成测试有什么区别?
- Tell me about 3 times you failed. 告诉我大约3次失败。
- What is Refactoring ? Have you used it and it is important? Name three common refactorings. 什么是重构? 您使用过它并且很重要吗? 列举三种常见的重构。
- You have two computers, and you want to get data from one to the other. How could you do it? 您有两台计算机,并且想要从一台计算机获取数据。 你怎么能做到
- Left to your own devices, what would you create? 留给自己的设备,您将创建什么?
- Given Time, Cost, Client satisfaction and Best Practices, how will you prioritize them for a project you are working on? Explain why. 给定时间,成本,客户满意度和最佳实践,您将如何为正在从事的项目确定优先级? 解释为什么。
- What's the difference between a web server, web farm and web garden? How would your web application need to change for each? Web服务器,Web场和Web花园之间有什么区别? 您的Web应用程序需要如何针对每个更改?
- What value do daily builds, automated testing, and peer reviews add to a project? What disadvantages are there? 每日构建,自动化测试和同行评审为项目带来了什么价值? 有什么缺点?
- What elements of OO design are most prone to abuse? How would you mitigate that? OO设计的哪些元素最容易被滥用? 您将如何缓解呢?
- When do you know your code is ready for production? 您何时知道您的代码已准备好投入生产?
- What's YAGNI? Is this list of questions an example? 什么是YAGNI? 这个问题清单是一个例子吗?
- Describe to me some bad code you've read or inherited lately. 向我描述您最近阅读或继承的一些错误代码。
Your thoughts? I'll add good questions from the comments throughout the day.
你的想法? 我将全天在评论中添加一些好的问题。
翻译自: https://www.hanselman.com/blog/new-interview-questions-for-senior-software-engineers
java高级软件工程师面试