前后端重点知识问答

1. 在只使用React的前提下,从页面上触发修改到你看到页面变化,中间发生了什么?(描述中包含React的机制和如何用代码进行实现两方面)

在React中使用stateless or not 两种方式自定义组件:

stateless:

const Content = (props) => {
    return (<div>
            ...
           </div>)
}

not

class Content extends Component {
    render() {
        return (<div>
               ...
               </div>)
    }
}

非stateless得组件可以维护一组state,存放页面的数据,当需要修改state时,使用setState()方法同步将修改后的state渲染到页面上,如果需要将组件维护的state传递到下层组件中读取,则使用props传递。

通过一个form表单为例,用户的信息由上层组件维护,当用户填写新的用户信息并提交时,下层组件

通过props接受的handler函数引用,然后读取表单信息的value,将相关value作为handler参数传回触发state作出相应的更改,并重新渲染页面。

2. 如何通过Spring Data JPA实现1 to 1,1 to n,n to n的实体关系,并分别为三个关系列举一个场景。

JPA中使用注解@OneToOne, @OneToMany, @ManyToOne, @ManyToMany表示实体关系,使用@JoinColum注解指定两个实体对象的外键关联。下面分别对三种情况举例:

1 to 1:husband and wife

Husband.java:

@Entity
@Table(name="husband")
class Husband {
    private Long id;
    @OneToOne
    @JoinColumn(name="wife_id")
    private Wife wife;
}

Wife.java:

@Entity
@Table(name="wife")
class Wife {
    private Long id;
    @OneToOne(mappingBy="wife")
    private Husband husband;
}

1 to n: person and house

Person.java:

@Entity
@Table(name="person")
class Person {
    private Long id;
    @OneToMany(mappingBy="person")
    private List<House> houses;
}

House.java:

@Entity
@Table(name="house")
class House {
    private Long id;
    @OneToOne
    @JoinColumn(name="person_id")
    private Person person;
}

n to n: teacher and student(使用中间表)

Teacher.java:

@Entity
@Table(name="teacher")
class Teacher {
    private Long id;
    @ManyToMany(mappingBy="teachers")
    private List<Student> students;
}

Student.java:

@Entity
@Table(name="student")
class Student {
    private Long id;
    @ManyToMany
    @JoinTable(name="t_teacher_student",
              joinColumns={@JoinColumn(name="teacher_id")},
              inverseJoinColumns={@JoinColumn(name="student_id")})
    private List<Teacher> teachers;
}

3. Tasking的作用是什么?划分时有哪些原则?

Tasking作用在于,当接触新的任务之后,对任务进行拆解,并可视化,以便于展示做Tasking的人能够暴露其对任务的思路,能够更加方便的进行交流。在进行Tasking时,需要注意Tasking需要包含方法,输入,输出以及描述,且所有的task输入输出需要找到对应的出处。

4. 在使用Redux的前提下,从在页面上触发修改到看到页面变化,中间发生了什么?(描述包含Redux的机制和如何使用代码实现两方面)

Redux机制:redux flow

当页面某处事件触发时,该触发事件将调用一个handler函数,该函数定义在mapDispatchToProps中,通过connect方法将handler中的参数以及对应的action使用dispatch传递到对应的reducer,根据actionType,找到state的更新逻辑,将新的state返回,并储存在store中,然后重新渲染数据存在更新的页面。

5. 当一个基于HTTP的API请求发送到WEB服务器,接着服务器返回信息,Spring MVC做了哪些事情?(描述中包含Spring MVC的机制和代码实现)

Spring MVC framework

当接受到一个HTTP请求(GET/POST/PUT/DELETE),Spring MVC首先进入DispatcherServlet进行请求分发,然后通过HandlerMapping将消息传递到Controller层,Controller层通过对应的URI与请求类型接受请求消息,然后转到Service层对输入消息进行相关业务处理,在Service进行相关业务处理时,需要定义实体对象Model,Model对应于数据库中对应的表,通过操作Repository与数据库进行数据交换,返回通过业务逻辑处理后的数据,即完成View Resolver之后,将处理后的数据交给View层进行页面数据更新以及渲染。

6. 什么是TDD?TDD有何优点?TDD流程?

TDD,即测试驱动开发(Test Driven Development) ,是极限编程的一部分,通过先编写测试用例然后再根据测试用例进行最简单实现,小步实现代码,通过测试,然后根据需求继续添加测试,对原有代码进行重构从而最终完成项目开发。

使用TDD的优点在于:使用TDD能够明确需求,完成测试编写后,强制要求开发者在不改变接口的前提下进行实现,这样便能够保证实现的代码能够符合验收标准。同时也能使帮助开发者聚焦于当前部分,避免注意力被其他需求分散。由于通过小步实现,实现后的代码都能够通过测试用例,因此在进行代码重构的时候出错的概率更小。

TDD的具体流程:首先根据业务需求明确当前要完成的功能,然后针对该功能完成测试用例的编写,编写玩测试用例后,确认测试代码编译不通过,然后开始实现代码使测试代码通过,添加测试用例,运行测试用例编译不通过,对原有代码进行重构,一次迭代,最终完成功能开发。

7. js中this引用为什么会变成undefined,强制绑定this引用的方式有哪几种,分别写出实例代码。

8. HTTP的状态码有哪几类?常见的有哪些?分别表示什么含义?

HTTP CODE category
1xx 消息
2xx 成功
3xx 重定向
4xx 客户端错误
5xx 服务端错误

常见的HTTP CODE有:

HTTP CODE MEANING
200 操作成功并包含返回的数据
201 操作成功并创建了新数据
204 操作成功,没有返回内容
400 明显的客户端错误
401 没有权限访问
403 页面被隐藏
404 页面不存在
500 服务端错误

9. 常见的需要重构的坏味道有哪些?以及他们的影响?(至少写5个)

10. jQuery下取得一个id为”my_input”的input的值得代码怎么写?

11.为一个id为”my_form”下的type为submit的button绑定点击事件的代码怎么写?

12. 如何为RestController写API测试,写出伪代码例子,如何为Repository写单元测试,写出伪代码例子,什么是对象、类、实例?他们之间的关系是怎样的?

API测试:

@Test
@DataSet('someData.yml')
public void should...given....() {
    RestAssured
        .given()
            .someCondition()
        .when()
            .someRequest()
        .then()
            .someAssert()
}

单元测试:

public void should...given...() {
    //given
    somePrepareData = new ...;
    given(someClass.someMethod())
        .willReturn(somePrepareData);
    //when
    actual = testMethod(...);
    //then
    assertThat(actual.someProps()).isEqualTo(...);
    ...
}

类是对象的集合,类里面包含了N多对象,对象只是类的一个特例,对象具有状态和行为,实例是一个对象的具体个例。

13. 使用React时,如何获得某个input的值?

14.通过例子说明Restful API

15. 解释下Callback是什么,举个例子

16.在使用React Router,并给一个按钮绑定点击事件处理函数时,如何在事件处理函数中用js进行页面跳转

17. 为什么需要架构分层?并画图说明Core/Service/Shell的职责以及他们之间的关系?

18. 面向对象的三特性五原则是什么?请分别予以简要解释并以学习过程中的代码为例。

19. Ajax是什么,有什么用?

20. mockito是什么,用代码大概描述下使用方法和应用场景

21. 一个完整的测试代码至少应该包含哪几个部分?每个部分的租用是什么?

22.CSS盒子模型是什么?

23.如何使用Spring Data进行复杂的查询?写一个例子

24. Git分支是什么?他的主要应用场景是什么?

25.解释什么是SUT和DOC,以及他们之间的关系

26. 为何要做DB Migration?

27. 在开发阶段如何使用Flyway进行数据库管理?

28. 为什么使用了Annotation标记过后的类会被Spring找到

29. Spring Boot与Spring MVC的区别,以及他们主要的作用

30. 举例说明DTO是什么及其作用

31. 如果你是一个team leader,当团队接到一个新项目时,请为以下几个问题提供可落地解决方案。

  1. 如何让团队站在业务视角理解和确认用户的需求

  2. 当用户需求确认以后,如何将需求转换为团队的工作任务

  3. 当团队协作,并行工作提交代码时,如何避免因为冲突二造成的协作混乱