测试题

  1. 创建、删除、复制、移动、重命名文件和文件夹的命令分别是什么?
    • 文件
      • 创建 touch
      • 删除 rm
      • 复制 cp
      • 移动 mv
      • 重命名 mv
    • 文件夹
      • 创建 mkdir
      • 删除 rm -r
      • 复制 cp -r
      • 移动 mv
      • 重命名 mv
  2. 什么是gradle,gradle的作用是什么,查看gradle任务、运行测试、启动应用的命令分别是什么?
    • gradle是一种依赖管理工具
    • gradle是一个构建工具
    • 帮助我们构建app,构建包括编译、打包等过程
    • 我们可以为Gradle指定构建规则,然后它就会根据我们的“命令”自动为我们构建app
    • 查看gradle任务:./gradle tasks
    • 运行测试: ./gradle test
    • 启动应用:./gradle bootRun
  3. gradle配置文件中,buildscript的设置和普通的设置有什么区别?
    • buildscript中的声明是gradle脚本自身需要使用的资源。可以声明的资源包括依赖项、第三方插件、maven仓库地址等
    • 在build.gradle文件中直接声明的依赖项、仓库地址等信息是项目自身需要的资源。
  4. gradlew的作用是什么?为什么要用它?
    • gradlew是Gradle Wrapper,是gradle的一个包装。
    • 在项目中运行./gradlew的话,就是用的是项目指定的版本的gradle
    • 用户不必自己下载、安装、配置Gradle
    • 用户进行项目构建时能够确保使用正确的Gradle版本
  5. 举例说明Java中接口、抽象类、类的区别?
  • 接口

    • 接口中的方法必须都是抽象方法
    • 接口中可以含有 变量和方法
    • 实现接口需要使用implements关键字
    • 一个类可以实现多个接口
    • 飞机和小鸟都会飞,但是飞机和小鸟不是同样的食物,所以将飞行动作定义为interface
      *[public] interface InterfaceName {}
  • 抽象类

    • [public] abstract class ClassName {abstract void fun();}
    • 抽象方法必须为public或者protected
    • 抽象类不能用来创建对象;
    • 如果一个类继承于一个抽象类,则子类必须实现父类的抽象方法。如果子类没有实现父类的抽象方法,则必须将子类也定义为为abstract类。
    • 一个类只能继承一个类,使用关键字为extends
  • 举例:

    • 门和警报的例子:门都有open( )和close( )两个动作,此时我们可以定义通过抽象类和接口来定义这个抽象概念:
abstract class Door {               
   public abstract void open();
   public abstract void close();
}
interface Door {
   public abstract void open();
   public abstract void close();
}       
  • 但是现在如果我们需要门具有报警alarm( )的功能,那么该如何实现?下面提供两种思路:

    1)将这三个功能都放在抽象类里面,但是这样一来所有继承于这个抽象类的子类都具备了报警功能,但是有的门并不一定具备报警功能;

    2)将这三个功能都放在接口里面,需要用到报警功能的类就需要实现这个接口中的open( )和close( ),也许这个类根本就不具备open( )和close( )这两个功能,比如火灾报警器。

  • 从这里可以看出, Door的open() 、close()和alarm()根本就属于两个不同范畴内的行为,open()和close()属于门本身固有的行为特性,而alarm()属于延伸的附加行为。因此最好的解决办法是单独将报警设计为一个接口,包含alarm()行为,Door设计为单独的一个抽象类,包含open和close两种行为。再设计一个报警门继承Door类和实现Alarm接口。

interface Alram {
    void alarm();
}
 
abstract class Door {
    void open();
    void close();
}
 
class AlarmDoor extends Door implements Alarm {
    void oepn() {
        //....
        }
       void close() {
        //....
        }
        void alarm() {
       //....
        }
}
    • 类是一个模版,它描述一类对象的行为和状态
    • 举例
    • 人是一个类,每个人都是这个类的对象
  1. 举例说明Java中Collections、Arrays、Map、HashMap、TreeMap、Collection、List、ArrayList、Set、HashSet、TreeSet的区别和联系?
    • Collection是Java的一个集合接口,它的子接口有Set、List
    • Set的实现类有HashSet、TreeSet
    • List的实现类有ArrayList
    • Map是java的一个接口,它是java的数据字典
    • 子接口有HashMap、TreeMap
    • Arrays和Collections是工具类,Collections用来操作处理Collection,Arrays来操作处理Array
  2. 类方法和实例方法有什么区别,什么时候用类方法、什么时候用实例方法?
    • 类方法使用的是static修饰
    • 使用类方法时,当类被初始化的第一次分配一个入口地址,以后初始化这个类的时候,这个方法的入口地址不会发生改变
    • 类方法可以直接通过类名来调用,实例方法不可以
  3. HTTP无状态是指什么?
    • 使用HTTP请求发送的请求互相之间并没有什么关系
    • 例如:HTTP请求不会记录你是否登陆过
  4. HTTP的返回的状态码有哪几类?常见的有哪些?分别表示什么含义?
    • 2xx Success 200/201/204
    • 3xx Redirection 304
    • 4xx Client Error 400/401/403/404/409
    • 5xx Service Error 500
  5. HTTP方法主要有哪几种,区别是什么?
    • get 从指定的资源请求数据
    • post 向指定的资源提交要被处理的数据
    • put 更新指定的URL的资源
    • delete 删除指定的URL上的资源
  6. 为什么RESTful API的URI中不能出现动词,画图说明RESTful API是怎么对资源进行操作的?
    • 在RESTful API中,一个url代表一个资源
  7. 写出对一个用户增删改查的操作的API,包括查询参数、RequestBody、ResponseBody和ResponseStatus?
    • /api/login
    • POST
    • request
      • body {String: username/email, String: password}
    • reponse
      • code 201
      • cookie {username, userId}
      • code 401
      • body {String: Invalid username & password}
      • code: 500
  8. 画图说明Spring MVC的概念是什么,各部分之间是怎么相互工作的。
MVC.png
  1. 举例说明Spring Controller 中URL Mapping是怎么匹配的?
    @RequestMapping("/api/users")
    public class UsersController {

    @Autowired
    private UserService userServiceImpl;

    @PostMapping
    @ResponseStatus(HttpStatus.CREATED)
    public String create(@RequestBody User user) {
        userServiceImpl.createAccount(user);
        return user.getUsername() + " create successful.";
    }

    @GetMapping
    public Collection<User> userList() {
        return userServiceImpl.getUserList();
    }

    @PutMapping(value = "/{id}/age/{age}")
    public String updateAge(@PathVariable("id") Integer id, @PathVariable("age") Integer age){
        String userInfo = userServiceImpl.updateUserAgeById(id, age);
        return userInfo != null ? "update you info success" : "update you info error";
    }

    @GetMapping(params = "age")
    public List<User> findUserByAge(@RequestParam("age") Integer age) {
        return userServiceImpl.findUserByAge(age);
    }
}

上述代码
如果请求为GET /api/users, 则会匹配到userList

如果请求为GET /api/users?age=15,则会匹配到findUserByAge

如果请求为POST /api/users,则会匹配到create

如果请求为PUT /api/users/1/age/12,则会匹配到updateAge

  1. Spring MVC中多个同名的param会在服务端怎么解析?
@GetMapping(params = "id")
public String get(@RequestParam String[] ids) {
      for (String id : ids) {
            System.out.println(id);
      }
      return " " + ids;
}

localhost:8080/greeting?id=1&id=2
这样代码会接收到一个数组,ids,里边包含了所有的id

  1. 举例说明IoC控制反转中对什么的控制反转了?解释标记@Autowired之后,为什么没有初始化也可以直接使用?
    • 对类的初始化的操作交给了spring来进行,不需要我们自己去new这样的对象
    • 由于我们在编写代码时,添加了注解,所以Spring在初始化项目的时候,会去将这些注解都收集起来,然后在代码中,哪一块写了@Autowired,就会去找这个@Autowired的类型的实例,然后赋值给改属性
  2. Spring中常用的依赖注入方式有哪几种?
    • 接口注入
    • 属性注入
    • 构造函数注入
  3. Springboot中@Component、@Service、@Repository、@Bean、@Confituration区别和联系。
    • @Configuration注解该类,等价 与XML中配置beans;

    • @Bean标注方法等价于XML中配置bean;

    • @Component被用在要被自动扫描和装配的类上。Spring 注解@Component等效于@Service,@Controller,@Repository
      @Bean主要被用在方法上,来显式声明要用生成的类;用@Configuration注解该类,等价 与XML中配置beans;用@Bean标注方法等价于XML中配置bean。

    • 注入业务类,把controller里的逻辑代码封装在ServiceBean里
      并且把ServiceBean提取到一个接口里. 方便重写.

    • @Service用于标注业务层组件

    • @Controller用于标注控制层组件(如struts中的action)

    • @Repository用于标注数据访问组件,即DAO组件

    • @Component泛指组件,当组件不好归类的时候,我们可以使用这个注解进行标注。

  1. 怎么实现Spring Data JPA里的一对多,多对多,一对一?

    public class User {
        @Id
        private String id;
        
        @Column(unique = true)
        private String username;
        private String password;
        private Integer age;
        
        @OneToMany
        @JoinColumn(name = "user_id", referencedColumnName = "id")
        private List<Address> addresses;
    }
    
    
    public class Address {
        @Id
        private String id;
        private String address;
    }
    
    public class Order {
        @Id
        private String id;
    
        @OneToOne
        @JoinColumn(name = "user_id")
        private User user;
    
        @ManyToMany(cascade = CascadeType.REFRESH,fetch = FetchType.EAGER)
        @JoinTable(name = "t_order_item",
                joinColumns = @JoinColumn(name = "order_id", referencedColumnName = "id"),
                inverseJoinColumns = @JoinColumn(name = "item_id", referencedColumnName = "id"))
        private List<Item> itemList = new ArrayList<>();
    }
    

    上面列出了三张表,User、Address、Order
    User和Address是一对多的关系,在User表中写了@OneToMany,定义了List<Address>,这样就建立起了User和Address的一对多的关系

    Order和User是一对一的关系,在Order中写@OneToOne,定义了User,这样就建立起了一对一的关系

    Order与Item是多对多的关系,在Order中写了@ManyToMany,定义了List<Item>,建立多对多关系

  2. 如何控制Spring Data JPA里的一对多,一对一,多对多的lazy loading
    fetch = FetchType.EAGER

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

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,633评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,598评论 18 399
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,773评论 6 342
  • questions 创建、删除、复制、移动、重命名文件和文件夹的命令分别是什么?创建: touch filenam...
    Yvette14阅读 305评论 0 2
  • 想从本书( CSS权威指南 )中得到以下几点: 块级元素和非级元块素的区别 页面如何布局--自由 字体,字...
    田永威阅读 348评论 0 2