测试

  1. 创建、删除、复制、移动、重命名文件和文件夹的命令分别是什么?

    • 文件:
      • 创建:touch/vim
      • 删除:rm
      • 复制:cp
      • 移动:mv
      • 重命名:mv
    • 文件夹:
      • 创建:mkdir
      • 删除:rm -rf
      • 复制:cp
      • 移动:mv
      • 重命名:mv
  2. 什么是gradle,gradle的作用是什么,查看gradle任务、运行测试、启动应用的命令分别是什么?

    • gradle是一个自动化构建工具,能够以可执行和有序的任务来表达满足需要的自动化过程。
    • gradle提供了强大的支持多功能的构建,提供了依赖管理,用来构建工程。
    • 查看gradle任务:./gradlew tasks
    • 运行测试:./gradlew test
    • 启动应用:./gradlew bRun
  3. gradle配置文件中,buildscript的设置和普通的设置有什么区别?

    • buildscript中的声明是gradle脚本自身需要使用的资源。可以声明的资源包括依赖项、第三方插件等。而在build.gradle文件中直接声明的依赖项、仓库地址等信息是项目自身需要的资源。
  4. gradlew的作用是什么?为什么要用它?

    • gradlew 即为 gradle wrapper 的缩写,gradle wrapper 会检查当前的工作环境是否安装了创建本项目时所用到的 gradle 版本。如果没有,它会自动下载相应的 gradle 放在 ~/.gradle/wrapper . 目录下,这样,当你在你的项目里使用 gradle 的时候,可以通过 gradlew 命令使用当前环境的 gradle 版本,而不受环境变量的影响。
  5. 举例说明Java中接口、抽象类、类的区别?

    • 接口:接口中只能有抽象的方法,一个类可以实现多个接口。接口是对动作的抽象。对于接口,我们可以坐着吃饭,可以站着吃饭,可以用筷子吃饭,可以用叉子吃饭,可以把这些吃饭的动作抽象成一个接口--吃饭。
    • 抽象类:在抽象类中可以写非抽象的方法,从而避免在子类中重复书写他们,这样可以提高代码的复用性,抽象类是对根源的抽象。比如男人,女人这两个类,那我们可以为这两个类设计一个更高级别的抽象类--人。
    • 类:类可以实现很多个接口,但是只能继承一个抽象类。
  6. 举例说明Java中Collections、Arrays、Map、HashMap、TreeMap、Collection、List、ArrayList、Set、HashSet、TreeSet的区别和联系?

    • Collections:Collections是针对集合类的一个帮助类。提供了一系列静态方法实现对各种集合的搜索、排序等操作。相当于对Array进行类似操作的类——Arrays。
    • Arrays:Java中的一个类,专门用来操作array。
    • Map:是一个集合类,用来存储键值对。
    • HashMap:根据键的HashCode存储数据。
    • TreeMap:按照key的字典顺序升序排序。
    • Collection:是对象的集合,保存单个的元素。
    • List:List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引来访问List中的元素。
    • ArrayList:可以自动扩充自身尺寸的数组,随机访问操作比较多时可以选用。
    • Set:不包含重复的无序的Collection。
    • HashSet:把HashMap中的Key作为Set的对应存储项。按照元素的HashCode给元素排序。
    • TreeSet:按照自然排序法给元素排序。
  7. 类方法和实例方法有什么区别,什么时候用类方法、什么时候用实例方法?

    • 类方法又叫静态方法,实例方法又叫非静态方法。
    • 类方法可以直接通过类名调用,实例方法必需先初始化类的实例,然后通过类的实例才能调用。
    • 方法声明时,方法的类型前面不加关键字static的是实例方法,加static的是类方法即静态方法。
    • 实例方法既可以对类变量操作也可以对实例变量进行操作,而类方法(static method)只能够对类变量(static varival)操作。
    • 一个类中的方法可以互相调用,实例方法可以调用该类的其他方法,而类方法只能调用该类的类方法,不能调用实例方法。
    • 类方法不能够被重写,但可以在子类重新定义他们。
    • 实例方法中可以使用super、this关键字,类方法不可以。
  8. HTTP无状态是指什么?

    • HTTP协议不具备保存之前发送过的请求或响应的功能,比如单纯使用http的基础请求头(method,path,pro,host)发送2次请求,服务器无法识别这2次请求是否是同一个用户。
  9. HTTP的返回的状态码有哪几类?常见的有哪些?分别表示什么含义?

    • 1XX:这一类型的状态码,代表请求已被接受,需要继续处理。
    • 2XX:这一类型的状态码,代表请求已成功被服务器接收、理解、并接受。
    • 3XX:这类状态码代表需要客户端采取进一步的操作才能完成请求。通常,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的Location域中指明。
    • 4XX:这类的状态码代表了客户端看起来可能发生了错误,妨碍了服务器的处理。
    • 5XX:表示服务器无法完成明显有效的请求。[56]这类状态码代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理。
    • 常见的状态码
      • 200 OK:请求已成功,请求所希望的响应头或数据体将随此响应返回。
      • 204 No Content:表示请求已成功处理,但是没有内容返回。
      • 301 Moved Permanently:永久重定向,表示请求的资源已经永久的搬到了其他位置。
      • 400 Bad Request:表示请求报文存在语法错误或参数错误,服务器不理解。
      • 401 Unauthorized:表示发送的请求需要有HTTP认证信息或者是认证失败了。
      • 403 Forbidden:表示对请求资源的访问被服务器拒绝了。
      • 404 Not Found:表示服务器找不到你请求的资源。
      • 500 Internal Server Error:表示服务器执行请求的时候出错了。
  10. HTTP方法主要有哪几种,区别是什么?

    • GET 请求会显示请求指定的资源。一般来说GET方法应该只用于数据的读取,GET会方法请求指定的页面信息,并返回响应主体。
    • POST 请求会向指定资源提交数据,请求服务器进行处理,如:表单数据提交、文件上传等,请求数据会被包含在请求体中。
    • PUT 请求会身向指定资源位置上传其最新内容。
    • DELETE 请求用于请求服务器删除所请求URI所标识的资源。
  11. 为什么RESTful API的URI中不能出现动词?写出对一个用户增删改查的操作的API,包括查询参数、RequestBody、ResponseBody和ResponseStatus?

    • 在RESTful架构中,每个网址代表一种资源(resource),所以网址中不能有动词,只能有名词,而且所用的名词往往与数据库的表格名对应。

    • 增 POST

      • /api/users
      • RequestBody:{String username, String password, int age}
      • ResponseStatus:201
      • ResponseBody:{String username, int age}
    • 删 DELETE

      • /api/users/{userId}
      • RequestBody:
      • ResponseStatus:200
      • ResponseBody:"delete successful."
    • 查 GET

      • /api/users/{userId}
      • RequestBody:
      • ResponseStatus:200
      • ResponseBody:{String id, String username, String password, int age}
    • 改 PUT

      • /api/users/{userId}
      • RequestBody:{String username, String password, int age}
      • ResponseStatus:200
      • ResponseBody:"update successful."
  12. 画图说明Spring MVC的概念是什么,各部分之间是怎么相互工作的。

MVC.jpeg

Spring是一个模块,基于MVC的一个框架。MVC是一种设计模式。M代表model;V代表view;C代表controller。M指的是模型,即DTO层和service层,V指的是视图,即jsp、html 等。C指的是controller,即控制器。MVC 把用户界面独立到一些文件中(Views),把一些和用户交互的程序逻辑(Controller)单独放在一些文件中,在 Views 和 Controller 中传递数据使用一些专门封装数据的实体对象(Models)。

  1. 举例说明Spring Controller 中URL Mapping是怎么匹配的?
    • 如果是 /api/users @GetMapping,会找所有包含这个路径的 URI,然后根据有没有参数来决定是哪个请求。
    • 如果是 /api/users @GetMapping(param="username"),会找到路径 /api/users 下包含有 param 是 username 的URI进行匹配。
    • 如果是 /api/users @GetMapping @PathVariable("username") String username;则会找所有包含 /api/users 路径的 get 请求,然后找路径中包含 username 属性的 URI 进行匹配。
  2. Spring MVC中多个同名的param会在服务端怎么解析?比如
    http://host/api/users?name=sj&name=sj2
    • 如果请求中有多个同名的 param , 则通过@ RequestParameter获取query的值,将值的类型设为List<String>即可。
  3. 举例说明IoC控制反转中对什么的控制反转了?解释标记@Autowired之后,为什么没有初始化也可以直接使用?
    • 控制反转(Inversion of Control)是一种是面向对象编程中的一种设计原则,用来减低计算机代码之间的耦合度。其基本思想是:借助于“第三方”实现具有依赖关系的对象之间的解耦。是一个容器。把控制权交给容器,是一个控制权的翻转。
    • 当 Spring 容器启动时,AutowiredAnnotationBeanPostProcessor 将扫描 Spring 容器中所有 Bean,当发现 Bean 中拥有 @Autowired 注释时就找到和其匹配(默认按类型匹配)的 Bean,并注入到对应的地方中去。
  4. Spring中常用的依赖注入方式有哪几种?
    • 属性注入
    • setter方法注入
    • 构造函数注入
  5. Springboot中@Component、@Service、@Repository、@Bean、@Confituration区别和联系。
    • @Component 泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。
    • @Service 用于标注业务层组件。
    • @Repository 用于标注数据访问组件。
    • @Bean 和 @Configuration 用来进行 Bean 的声明。
  6. 怎么实现Spring Data JPA里的一对多,多对多,一对一?
  • 一对多
@Table(name = "users")
public class User {
    @Id
    @Column(name = "id")
    private String id;

    private String username;
    private String password;
    private int age;

    @OneToMany(cascade = CascadeType.REFRESH, fetch = FetchType.EAGER)
    @JoinColumn(name = "user_id", referencedColumnName = "id")
    private List<Address> addresses;
}
  • 多对多
@Table(name = "shopping_cart")
public class ShoppingCart {
    @Id
    @Column(name = "id")
    private String id;

    @ManyToMany(cascade = CascadeType.REFRESH)
    @JoinTable(name = "shopping_cart_items", joinColumns = @JoinColumn(name = "shopping_cart_id", referencedColumnName = "id"),
            inverseJoinColumns = @JoinColumn(name = "item_id", referencedColumnName = "id"))
    private List<Item> itemList = new ArrayList<>();
}
  • 一对一
@Table(name = "shopping_cart")
public class ShoppingCart {
    @Id
    @Column(name = "id")
    private String id;

    @OneToOne(cascade = CascadeType.REFRESH)
    @JoinColumn(name = "user_id", referencedColumnName = "id")
    private User user;
}
  1. 如何控制Spring Data JPA里的一对多,一对一,多对多的lazy loading?
    • 一对一默认是 eager loading,所以可以用 fetch=Fetch.EAGER 来控制 Spring Data JPA进行 lazy loading。
    • 其余两个默认均是 lazy loading。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,524评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,869评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,813评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,210评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,085评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,117评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,533评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,219评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,487评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,582评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,362评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,218评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,589评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,899评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,176评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,503评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,707评论 2 335

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,497评论 18 139
  • 创建、删除、复制、移动、重命名文件和文件夹的命令分别是什么?文件:创建:touch / vim删除:rm复制:cp...
    芝麻香油阅读 489评论 0 1
  • questions 创建、删除、复制、移动、重命名文件和文件夹的命令分别是什么?创建: touch filenam...
    Yvette14阅读 300评论 0 2
  • 创建、删除、复制、移动、重命名文件和文件夹的命令分别是什么?文件创建 touch删除 rm复制 cp移动 mv重命...
    wyb1995阅读 669评论 0 2
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,679评论 6 342