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表单为例,用户的信息由上层组件
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机制:
当页面某处事件触发时,该触发事件将调用一个handler函数,该函数定义在mapDispatchToProps中,通过connect方法将handler中的参数以及对应的action使用dispatch传递到对应的reducer,根据actionType,找到state的更新逻辑,将新的state返回,并储存在store中,然后重新渲染数据存在更新的页面。
5. 当一个基于HTTP的API请求发送到WEB服务器,接着服务器返回信息,Spring MVC做了哪些事情?(描述中包含Spring MVC的机制和代码实现)
当接受到一个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多对象,对象只是类的一个特例,对象具有状态和行为,实例是一个对象的具体个例。