提交 2d08d42f 编写于 作者: 骆昊的技术专栏's avatar 骆昊的技术专栏

更新了团队项目相关内容

上级 161af9c8
此差异已折叠。
## 英语面试
以下用I表示面试官(Interviewer),用C表示面试者(Candidate)。
### 开场寒暄
1. I: Thanks for waiting. (Please follow me.)
C: It's no problem.
2. I: How are you doing this morning?
C: I'm great. / I'm doing fine. Thank you. / How about you?
3. I: How did you get here?
C: I took the subway here. / I drove here.
4. I: Glad to meet you.
C: Glad to meet you. / It's great to finally meet you in person. (之前电话沟通过的)
### 正式面试
#### 人力面试
1. I: Can you tell me a little bit about yourself? (介绍下自己)
原则:不要谈私生活和奇怪的癖好(英雄联盟干到钻石),因为别人更想知道的是你的专业技能(qulifications)和工作经验(experience),所以重点在你之前的公司(company name)、职位(title)、时间(years)和主要职责(major responsibilities)
C: Thank you for having me. My name is Dachui WANG. I'm 25 years old, and I'm single. I have a Bachelor's Degree of Computer Science from Tsinghua University. I was a Junior Java Programmer for ABC Technologies during my college life. Then I become an intermediate Java engineer for XYZ Corporation in last two years. Programming is my everyday life and programming is where my passion is. I think I have a good knowledge of Java enterprise application developement using light-weight frameworks like Spring, Guice, Hibernate and other open source middle-ware like Dubbo, Mycat, rocketmq and so on and so forth. I love reading, travelling and playing basketball in my spare time. That's all! Thank you!
2. I: How would you describe your personality? (你的性格)
C: I'm hard working, eager to learn, and very serious about my work. I enjoy working with other people and I love challenges.
3. I: What do you know about our company? (你对我们公司有什么了解)
(需要做功课,了解公司的状况和企业文化,该公司在这个行业中的一个状况,有什么核心业务,主要的竞争对手有哪些)
C: The one thing that I like the most about our company is your core values. I think they're very important in this industry because …(自由发挥的部分)... I personally really believe in the cause as well. Of course, I'm very interested in your products such as …(功课部分)… and the techniques behind them.
4. I: Why are you leaving your last job? (为什么离职)
C: I want to advance my career and I think this job offers more challenges and opportunities for me do to that.
5. I: What do you see yourself in 3 or 5 years? (3-5年职业规划)
C: My long term goals involve growing with the company, where I can continue to learn, to take on additional responsibilities and to contribute as much value as I can. I intend to take advantage of all of these.
6. I: What's your salary expectation? (期望薪资)
C: My salary expectation is in line with my experience and qualifications. I believe our company will pay me and every other employee fairly. (把球踢给对方先看看对方报价是多少,如果对方非要你报价再说后面的内容) I think 15 thousands RMB or above is fitting for me to leave in Chengdu.
7. I: Do you have any questions for me? (问面试官的问题)
C: What's the growth potential for this position?
#### 技术面试
1. I: What's difference between an interface and an abstract class?
2. I: What are pass by reference and pass by value?
3. I: What's the difference between process and threads?
4. I: Explain the available thread state in high-level.
5. I: What's deadlocks? How to avoid them?
6. I: How HashMap works in Java?
7. I: What's the difference between ArrayList and LinkedList? (类似的问题还有很多,比如比较HashSet和TreeSet、HashMap和Hashtable)
8. I: Tell me what you know about garbage collection in Java.
9. I: What're two types of exceptions in Java?
10. I: What's the advantage of PreparedStatement over Statement?
11. I: What's the use of CallableStatement?
12. I: What does connection pool mean?
13. I: Explain the life cycle of a Servlet.
14. I: What's the difference between redirect and forward?
15. I: What's EL? What're implicit objects of EL?
16. I: Tell me what you know about Spring framework and its benefits.
17. I: What're different types of dependency injection.
18. I: Are singleton beans thread safe in Spring framework?
19. I: What're the benefits of Spring framework's transaction management?
20. I: Explain what's AOP.
21. I: What's a proxy and how to implement proxy pattern?
22. I: How Spring MVC works?
23. I: What's the working scenario of Hibernate and MyBatis?
24. I: How to implement SOA?
25. I: Make a brief introduction of the projects you are involved before?
上面主要是面试Java程序员的问题,但是整个流程大致如此。
此差异已折叠。
......@@ -208,40 +208,22 @@
#### Day41 - [快速上手](./Day41-55/01.快速上手.md)
#### Day42 - [深入模型](./Day41-55/02.深入模型.md)
#### Day43 - [静态资源和Ajax请求](./Day41-55/03.静态资源和Ajax请求.md)
#### Day44 - [表单的应用](./Day41-55/04.表单的应用.md)
#### Day45 - [Cookie和会话](./Day41-55/05.Cookie和会话.md)
#### Day46 - [中间件的应用](./Day41-55/06.中间件的应用.md)
#### Day47 - [日志和缓存](./Day41-55/07.日志和缓存.md)
#### Day48 - [文件上传](./Day41-55/08.文件上传.md)
#### Day49-50 - [RESTful架构和应用](./Day41-55/09-10.RESTful架构和应用.md)
#### Day51-55 - [项目实战](./Day41-55/11-15.项目实战.md)
- 项目开发流程和相关工具
......@@ -255,28 +237,16 @@
#### Day56 - [安装和入门](./Day56-65/01.安装和入门.md)
#### Day57 - [模板的使用](./Day56-65/02.模板的使用.md)
#### Day58 - [表单的处理](./Day56-65/03.表单的处理.md)
#### Day59 - [数据库操作](./Day56-65/04.数据库操作.md)
#### Day60 - [项目结构](./Day56-65/05.项目结构.md)
#### Day61-65 - [项目实战](./Day56-65/06-10.项目实战.md)
### Day66~75 - [爬虫开发](./Day66-75)
#### Day66 - [网络爬虫和相关工具](./Day66-75/01.网络爬虫和相关工具.md)
......@@ -329,26 +299,143 @@
### Day91~100 - [团队项目开发](./Day91-100)
#### Day91 - [过程模型和团队开发工具](./Day91-100/过程模型和团队开发工具.md)
#### 过程模型
1. 软件过程模型
- 经典过程模型(瀑布模型)
- 可行性分析(研究做还是不做),输出《可行性分析报告》。
- 需求分析(研究做什么),输出《需求规格说明书》和产品界面原型图。
- 概要设计和详细设计,输出概念模型图、物理模型图、类图、时序图等。
- 编码 / 测试。
- 上线 / 维护。
- 敏捷开发(Scrum)- 产品所有者、Scrum Master、研发人员 - Sprint
- 产品的Backlog(用户故事、产品原型)。
- 计划会议(评估和预算)。
- 日常开发(站立会议、番茄工作法、结对编程、测试先行、代码重构……)。
- 修复bug(问题描述、重现步骤、测试人员、被指派人)。
- 评审会议(Showcase)。
- 回顾会议(当前周期做得好和不好的地方)。
2. 项目团队组建
- 团队的构成和角色
![company_architecture](./res/company_architecture.png)
- 编程规范和代码审查(flake8、pylint)
![](./res/pylint.png)
- Python中的一些“惯例”(请参考[《Python惯例-如何编写Pythonic的代码》](Python惯例-如何编写Pythonic的代码.md)
3. 团队开发工具介绍
- 版本控制:Git、Mercury
- 缺陷管理:Github/Gitee、Redmine、禅道
- 持续集成:Jenkins、Travis-CI
请参考[《团队项目开发》](团队项目开发.md)
#### 项目选题和理解业务
1. 选题范围设定
- CMS(用户端):新闻聚合网站、问答/分享社区、影评/书评网站等。
- MIS(用户端+管理端):KMS、KPI考核系统、HRS、仓储管理系统等。
- App后台(管理端+数据接口):二手交易类App、报刊杂志类App、健康健美类App、旅游类App、社交类App、阅读类App等。
- 其他类型:自身行业背景和工作经验、业务容易理解和把控。
2. 需求理解、模块划分和任务分配
- 需求理解:头脑风暴和竞品分析。
- 模块划分:画思维导图(XMind),每个模块是一个枝节点,每个具体的功能是一个叶节点(用动词表述),需要确保每个叶节点无法再生出新节点,确定每个叶子节点的重要性、优先级和工作量。
- 任务分配:由项目负责人根据上面的指标为每个团队成员分配任务。
![](./res/requirements_by_xmind.png)
3. 制定项目进度表(每日更新)
| 模块 | 功能 | 人员 | 状态 | 完成 | 工时 | 计划开始 | 实际开始 | 计划结束 | 实际结束 | 备注 |
| ---- | -------- | ------ | -------- | ---- | ---- | -------- | -------- | -------- | -------- | ---------------- |
| 评论 | 添加评论 | 王大锤 | 正在进行 | 50% | 4 | 2018/8/7 | | 2018/8/7 | | |
| | 删除评论 | 王大锤 | 等待 | 0% | 2 | 2018/8/7 | | 2018/8/7 | | |
| | 查看评论 | 白元芳 | 正在进行 | 20% | 4 | 2018/8/7 | | 2018/8/7 | | 需要进行代码审查 |
| | 评论投票 | 白元芳 | 等待 | 0% | 4 | 2018/8/8 | | 2018/8/8 | | |
#### 概念模型和正向工程
1. UML和E-R图
![uml](./res/uml-graph.png)
2. 通过模型创建表(正向工程)
```Shell
python manage.py makemigrations app
python manage.py migrate
```
#### 物理模型和反向工程
1. PowerDesigner
![](./res/power-designer-pdm.png)
2. 通过数据表创建模型
```Shell
python manage.py inspectdb > app/models.py
```
#### 项目开发中的公共问题
1. 数据的配置
2. 缓存的配置
3. 日志的配置
4. Django的使用技巧
5. 好用的Python模块(图像处理、数据加密、三方API)
### REST API设计
#### Day92 - [模块分割与单元测试](./Day91-100/模块分割与单元测试.md)
1. RESTful架构
2. API接口文档的撰写([《网络API接口设计》](网络API接口设计.md)
3. Django-REST-Framework的应用
#### 项目中的重点难点剖析
1. 使用缓存缓解数据库压力(Redis)
2. 使用消息队列缓解服务器压力(Celery + RabbitMQ)
#### Day93~Day97 - [开发中的常见问题](./Day91-100/开发中的常见问题.md)
#### 单元测试
1. 测试的种类
2. 编写单元测试(unitest、TestCase)
3. 测试覆盖率(Coverage)
#### 项目部署
#### Day98 - [持续集成](./Day91-100/持续集成.md)
1. 部署前的准备工作
- 关键设置(SECRET_KEY / DEBUG / ALLOWED_HOSTS / 缓存 / 数据库)
- HTTPS / CSRF_COOKIE_SECUR / SESSION_COOKIE_SECURE
- 日志相关配置
2. Linux常用命令回顾
3. Linux常用服务的安装和配置
4. uWSGI和Nginx的使用
5. 虚拟化容器(Docker)
#### 性能测试
1. AB的使用
2. SQLslap的使用
3. sysbench的使用
#### Day99 - [项目部署和安全性措施](./Day91-100/项目部署和安全性措施.md)
#### 自动化测试
1. 使用Shell和Python进行自动化测试
2. 使用Selenium实现自动化测试
3. 测试工具Robot Framework介绍
#### 项目性能调优
#### Day100 - [性能测试和性能调优](./Day91-100/性能测试和性能调优.md)
1. 数据库性能调优
2. 代码性能调优
3. 静态文件服务器和CDN加速
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册