黑马CRM测试题

单选题 (总得分:72 / 84)

1JWT(json web token)的组成

A: 加密算法.密文
B: 头信息.载荷信息.签名
C: 加密算法.令牌类型.非敏感用户信息.密文
D: Base64加密的头信息.Base64加密的敏感数据.Base64加密的密文

正确答案:B

你的答案:B

得分

4 / 4

解析

2前端浏览器发送数据到后端a.后端如何接收如何接收url中?后拼接的参数,如http://127.0.0.1/api?name=zhangsan&age=18b.如何接收json数据c.springmvc中接收前端上传的文件使用的是什么类

A: @RequestParam,@RequestParam,File
B: @PathVariable,@RequestParam,String
C: @RequestBody,@RequestParam,MultipartFile
D: @RequestParam,@ResponseBody,MultipartFile

正确答案:D

你的答案:D

得分

4 / 4

解析

3Mybatis的Mapper接口和对应的xml文件是如何对应上的

A: 插件帮我们定位的
B: 按照文件名进行匹配的,定义一个Mapper接口 UserMapper.java,对应的xml文件的文件名是UserMapper.xml才能对应上
C: 需要在xml文件中的namespace中指定Mapper层接口的全路径
D: xml文件需要和对应的接口文件在同一项目中即可

正确答案:C

你的答案:C

得分

4 / 4

解析

4在使用Mybatis的时候 #{}和${}有什么区别

A: 没有区别
B: #{}不安全会将传入的所有信息直接使用,存在SQL注入的风险,${}会在传递的参数前后加上'包裹
C: ${}不安全会将传入的所有信息直接使用,存在SQL注入的风险,#{}会在传递的参数前后加上'包裹
D: 在使用#{}的时候会在实际参数前加上#,在使用${}的时候会在实际参数前加上"$"

正确答案:C

你的答案:C

得分

4 / 4

解析

5给定Mybatis中的查询语句:<mapper namespace="com.huike.clues.mapper.TestMapper">

      where id = #{id} 可以分析出什么

A: 对应的是Mapper层接口是TestMapper,对应的方法名getById,传入参数是一个Long类型的参数参数名为id,执行的sql语句引用了一个叫getTest的sql,对应的应该在xml里找到对应id为getTest的sql,最终返回的是一个在代码中定义了的实体类叫GetResult
B: 对应的是Mapper层接口是TestMapper,对应的方法名getById,传入参数是一个Long类型的参数参数名为id,执行的sql语句引用了一个叫getTest的sql并且需要在引用的sql后拼接上where id = #{id},对应的应该在xml里找到对应id为getTest的sql,最终返回的是一个在xml中定义了的resultMap,并且对应的这个resultMap的id是GetResult
C: 给出条件较少,无法确定对应的Mapper层接口,但是能确定方法名是getById,传入参数是一个Long类型的参数参数名为id,执行的sql语句引用了一个叫getTest的sql,对应的应该在xml里找到对应id为getTest的sql,最终返回的是一个在xml中定义了的resultMap,并且对应的这个resultMap的id是GetResult
D: 给出条件较少,无法判断Mapper层接口,只能确定方法名,传入参数类型是一个long类型,并且返回的是一个在实体类中定义的类类名是GetResult

正确答案:B

你的答案:B

得分

4 / 4

解析

6在未使用任何插件想要通过Mybatis去实现分页查询,对应的limit里的参数是如何计算的注:前端给定,pageNum(页号),pageSize(每页条数)前端给定了的页号从第一页开始,即从1开始

A:  limit pageNum , pageSize
B:  limit pageSize*(pageNum-1) , pageSize
C: limit pageSize*pageNum , pageSize
D:  limit pageSize,pageNum

正确答案:B

你的答案:B

得分

4 / 4

解析

7CRM系统中的验证码功能是怎么实现的?注意:参考 CaptchaController 类中生成验证码的代码

A: 通过工具生成一个验证码的公式,将验证码的公式和验证码的结果返回给前端
B: 通过工具生成验证码在内存中,生成一个uuid,将验证码的结果作为value,将uuid作为key存入到redis中,并设置了超时时间为2分钟,将内存中的uuid和验证码图片返回
C: 通过开源工具生成验证码的公式和结果,截取结果部分@,使用uuid为key,验证码的结果为value存入到redis中,并设置超时时间为2分钟,将uuid返回给前端,将内存中验证码的图片使用base64转码后返回给前端
D: 将生成的验证码的公式使用Base64转码返回给前端,将验证码的结果和uuid返回给前端

正确答案:C

你的答案:C

得分

4 / 4

解析

8对于CRM系统来说的核心业务逻辑是什么样的?

A: 线索转商机转合同
B: 合同转商机转线索
C: 合同转线索转商机
D: 线索转合同转线索

正确答案:A

你的答案:A

得分

4 / 4

解析

9对于汇客CRM系统中在线索阶段连续很多天无法沟通的手机号和空号我们是如何处理的?

A: 转商机
B: 转合同
C: 标记伪线索
D: 线索跟进

正确答案:C

你的答案:C

得分

4 / 4

解析

10对于汇客CRM系统中商机阶段,客户报名了别的机构,而不是在我们机构报名学习,我们会如何处理这部分客户

A: 标记伪线索
B: 转合同
C: 转线索
D: 踢回公海池

正确答案:D

你的答案:D

得分

4 / 4

解析

11对于汇客CRM系统来说,最终成交成客户需要与客户签订合同,这部分合同最终保存在哪?

A: Minio服务器
B: 阿里云OSS服务器
C: 本地磁盘存储
D: Mysql中存储

正确答案:A

你的答案:A

得分

4 / 4

解析

12对于汇客CRM系统中,如何确定一条商机从过去到现在的所有的拥有人

A: 查询商机表,create_by即为当前的所属人
​
select create_by from `tb_business`
B: 查询商机表和分配表,分配表里的assign_id若等于商机表里的id,并且分配表里的type为1,则分配表里的user_id则为所属人id
​
SELECT b.name AS businessName, ar.user_name AS `owner`
FROM `tb_business` b
    LEFT JOIN `tb_assign_record` ar
    ON b.id = ar.`assign_id`
        AND ar.type = 1
C: 查询商机表和分配表,分配表里的assign_id若等于商机表里的id,且分配表里的latest为1,则分配表里的user_id则为所属人id
​
SELECT b.name AS businessName, ar.user_name AS `owner`
FROM `tb_business` b
    LEFT JOIN `tb_assign_record` ar
    ON b.id = ar.`assign_id`
        AND ar.latest = 1
D: 查询商机表和分配表,分配表里的assign_id若等于商机表里的id,且分配表里的latest为1,且type为1,则分配表里的user_id则为所属人id
​
SELECT b.name AS businessName, ar.user_name AS `owner`
FROM `tb_business` b
    LEFT JOIN `tb_assign_record` ar
    ON b.id = ar.`assign_id`
        AND ar.type = 1
        AND ar.latest = 1

正确答案:B

你的答案:B

得分

4 / 4

解析

13对于汇客CRM系统中,如何确定一条线索的最终所属人

A: 查询线索表,create_by即为当前的所属人
​
SELECT `create_by` FROM `tb_clue` 
B: 查询线索表和分配表,分配表里的assign_id若等于线索表里的id,且分配表里的latest为1,且type为0,则分配表里的user_id则为所属人id
​
SELECT clue.name, ar.user_name AS `owner`
FROM `tb_clue` clue
    LEFT JOIN `tb_assign_record` ar
    ON clue.`id` = ar.assign_id
        AND ar.latest = 1
        AND ar.type = 0
C: 查询线索表和分配表,分配表里的assign_id若等于线索表里的id,且分配表里的latest为1,且type为1,则分配表里的user_id则为所属人id
​
SELECT clue.name, ar.user_name AS `owner`
FROM `tb_clue` clue
    LEFT JOIN `tb_assign_record` ar
    ON clue.`id` = ar.assign_id
        AND ar.latest = 1
        AND ar.type = 1
D: 查询线索表和分配表,分配表里的assign_id若等于线索表里的id,且type为0,则分配表里的user_id则为所属人id
​
SELECT clue.name, ar.user_name AS `owner`
FROM `tb_clue` clue
    LEFT JOIN `tb_assign_record` ar
    ON clue.`id` = ar.assign_id
        AND ar.type = 0

正确答案:B

你的答案:B

得分

4 / 4

解析

14对于汇客CRM系统中,我们多次使用统计分析图表,其中最符合饼状图的封装类是哪一个?参考饼状图:

参考json:[ { "subject":"Java", "num":108 }, { "subject":"产品经理", "num":1 }, { "subject":"前端", "num":2 }, { "subject":"大数据", "num":1 } ]

A: public class Data {
    private String subject;
    private String num;
}
B: public class Data {
    private String name;
    private Integer num;
}
C: public class Data {
    private String subject;
    private Integer num;
}
D: public class Data {
    private Integer subject;
    private Integer num;
}

正确答案:C

你的答案:C

得分

4 / 4

解析

15对于汇客CRM系统来说,我们每次在页面上操作都需要记录操作日志,这部分是使用AOP+自定义注解来做的,记录了每次接口返回的内容和操作的接口,操作人的ip地址等在系统中,切点的位置,使用了哪些通知类?

A: 切点位置:Controller层方法上
​
通知类型:@AfterReturning,@AfterThrowing
B: 切点位置:  Service层每个方法上
​
 通知类型: @before
C: 切点位置: Mapper层每个方法上
​
通知类型: @AfterThrowing
D: 切点位置:Controller层每一个方法上
​
通知类型:@before

正确答案:A

你的答案:A

得分

4 / 4

解析

16在CRM系统中,数据权限是和什么绑定的,数据权限是和用户的角色进行绑定的,在CRM系统中同样也是通过AOP+自定义注解的方式实现的数据权限,那么具体的切点和通知类型?

A: 切点位置:Controller层每一个方法上
​
通知类型:@AfterReturning,@AfterThrowing
B: 切点位置:  Service层方法上
​
通知类型: @before
C: 切点位置: Mapper层每个方法上
​
通知类型: @AfterThrowing
D: 切点位置:Controller层每一个方法上
​
 通知类型:@before

正确答案:B

你的答案:B

得分

4/ 4

解析

17补充代码:提供两个数,计算两个数的百分比,并且计算出百分比后还需要精确2位小数?BigDecimal numBigDecimal = new BigDecimal(num1); BigDecimal allBigDecimal = new BigDecimal(num2); BigDecimal divide = numBigDecimal.(allBigDecimal,,BigDecimal.ROUND_HALF_UP); BigDecimal result = divide.(new BigDecimal(100));

A: divide,4,multiply
B: multiply,2,divide
C: divide,2,multiply
D: multiply,4,divide

正确答案:A

你的答案:A

得分

4 / 4

解析

18补全代码,补全使用并发编程CompletableFuture统计首页数据基本信息中的数据:/** * 获取首页基本数据 * @param beginCreateTime * @param endCreateTime * @return */ @Override public IndexBaseInfoVO getBaseInfo(String beginCreateTime, String endCreateTime) { //1)构建一个空的结果集对象 IndexBaseInfoVO result = new IndexBaseInfoVO(); //2 封装结果集属性 // 2.1 由于查询需要用到用户名 调用工具类获取用户名 String username = SecurityUtils.getUsername(); try { CompletableFuture<Integer> clueNums = CompletableFuture.supplyAsync(()->{ // 2.2 开始查询第一个属性 线索数量 return reportMpper.getCluesNum(beginCreateTime, endCreateTime, username); }); CompletableFuture<Integer> bussinessNum = CompletableFuture.supplyAsync(()->{ // 2.3 开始查询第一个属性 商机数量 return reportMpper.getBusinessNum(beginCreateTime, endCreateTime, username); }); CompletableFuture<Integer> contractNum = CompletableFuture.supplyAsync(()->{ // 2.4 开始查询第一个属性 合同数量 return reportMpper.getContractNum(beginCreateTime, endCreateTime, username); }); CompletableFuture<Double> saleAmount = CompletableFuture.supplyAsync(()->{ // 2.5 开始查询第一个属性 销售金额数量 return reportMpper.getSalesAmount(beginCreateTime, endCreateTime, username); }); //3 join等待所有线程全部执行完成 CompletableFuture .allOf(clueNums, bussinessNum, contractNum, saleAmount) .1(); //4 封装结果集对象 result.setCluesNum(2.get()); result.setBusinessNum(3.get()); result.setContractNum(4.get()); result.setSalesAmount(_5__.get()); }catch (Exception e) { e.printStackTrace(); return null; } //5 返回结果集对象 return result; }

A: join,clueNums,bussinessNum,saleAmount,contractNum
B: join,clueNums,saleAmount,contractNum,bussinessNum
C: join,saleAmount,contractNum,bussinessNum,clueNums
D: join,clueNums,bussinessNum,contractNum,saleAmount

正确答案:D

你的答案:D

得分

4 / 4

解析

19补全sql语句,需要统计商机的最终归属人的用户名和商机的所有信息参考表字段信息:

SELECT b.*, r.create_by AS assign_by, _ AS owner, r.create_time AS owner_time FROM tb_business b LEFT JOIN tb_assign_record r ON b._ = r.__ WHERE r.latest = ___ AND b.type = 1

A: r.user_id,b.id,r.assign_id,0
B: r.user_id,b.name,r.user_name,1
C: r.user_name,b.clue_id,r.assign_id,0
D: r.user_name, b.id,r.assign_id,1

正确答案:D

你的答案:D

得分

4 / 4

解析

20在CRM系统中的策略模式是如何使用的?注意:参考线索转商机的方法时的,基于规则来进行分配的 Rule 对象的实现。

A: 在系统中我们手动new出了具体的实现类
B: 通过@ConditionalOnProperty由spring来替我们选择具体的实现类,而我们需要使用的时候根据多态的方式new出Rule接口的实现类即可
C: 通过@ConditionalOnProperty由spring来替我们选择具体的实现类,而我们需要使用的时候通过@Autowired注入Rule接口即可,因为具体的实现类已经由spring替我们选择好了
D: 根据各个策略类上在IOC容器中的别名,通过getBean()方法获得

正确答案:C

你的答案:C

得分

4 / 4

解析

21CommandLineRunner接口有什么用?

A: 没啥用,就是一个普通的接口
B: 在服务启动完成前,顺序执行run方法里的内容
C: 在服务启动完成后,开启一个单独的线程来执行run方法里的内容
D: 在服务启动完成后,顺序执行run方法里的内容

正确答案:D

你的答案:D

得分

4 / 4

解析

多选题 (总得分:8 / 16)

22以下哪些方式可以实现,后端返回数据给前端,前端接受到的是json数据?

A: @ReqeustParam
B: @ResponseBody
C: @RestController
D: @RequestBody

正确答案:B,C

你的答案:B,C

得分

4 / 4

解析

23对于汇客CRM系统中,我们多次使用统计分析图表,其中符合折线图的封装类是哪一个?参考折线图:

参考json:{ "xAxis":[ "2021-03-11", "2021-03-12", "2021-03-13", "2021-03-14", "2021-03-15" ], "series":[ { "name":"新增线索数量", "data":[ 0, 0, 0, 0, 0 ] }, { "name":"线索总数量", "data":[ 0, 0, 0, 0, 0 ] } ] }

A: public class Data {
    private List<String> xAxis = new ArrayList<>();
    private List<String> series = new ArrayList<>();
}
B: public class Data {
    private List<String> xAxis = new ArrayList<>();
    private Map series = new HashMap();
}
C: public class Data {
    private List<String> xAxis = new ArrayList<>();
    private List<Map> series = new ArrayList<>();
}
D: @Data
public class Data {
    private List<String> xAxis = new ArrayList<>();
    private List<Inner> series = new ArrayList<Inner>();
}
@Data
public class Inner {
        private String name;
        private List<Integer> data =new ArrayList<>();
}

正确答案:C,D

你的答案:C,D

得分

4 / 4

解析

24在我们系统中redis存储了哪些内容:

A: 验证码的结果
B: 活动编号
C: 登录的用户信息
D: 字典的内容

正确答案:A,B,C,D

你的答案:A,B,C,D

得分

4 / 4

解析

25在CRM系统中提供了用户表,提供角色表,提供目录表,用户角色关联表,角色目录关联表

在下列sql能够在指定用户id的情况下,查询出用户对应的目录(不需要考虑状态,假定用户id是137 ?

A: SELECT *
FROM sys_menu m
    LEFT JOIN sys_role_menu rm ON m.menu_id = rm.menu_id
    LEFT JOIN sys_user_role ur ON rm.role_id = ur.role_id
WHERE ur.user_id = 137
B: SELECT *
FROM sys_menu
WHERE menu_id IN (
    SELECT menu_id
    FROM `sys_role_menu`
    WHERE role_id IN (
        SELECT role_id
        FROM `sys_user_role`
        WHERE user_id = 137
    )
)
C: SELECT *
FROM `sys_menu`
WHERE menu_id IN (
    SELECT rm.menu_id
    FROM `sys_role_menu` rm
        LEFT JOIN `sys_user_role` ur ON rm.role_id = ur.role_id
    WHERE ur.user_id = 137
)
D: SELECT m.*
FROM `sys_role` ro
    LEFT JOIN `sys_user_role` ur ON ro.role_id = ur.role_id
    LEFT JOIN `sys_role_menu` rm ON ro.role_id = rm.role_id
    LEFT JOIN `sys_menu` m ON rm.role_id = m.menu_id
WHERE ur.user_id = 137

正确答案:A,B,C

你的答案:A,B,C

得分

4 / 4

解析

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值