栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java岗大厂面试百日冲刺【Day42】— 实战那些事儿3 (1)

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java岗大厂面试百日冲刺【Day42】— 实战那些事儿3 (1)


本栏目Java开发岗高频面试题主要出自以下各技术栈:Java基础知识、集合容器、并发编程、JVM、Spring全家桶、MyBatis等ORMapping框架、MySQL数据库、Redis缓存、RabbitMQ消息队列、Linux操作技巧等。

面试题1:如果用mybatis批量插入数据时需要返回主键,你是怎么做的?

===================================================================================================

需要在Mapper.xml的中标签中配置useGeneratedKeys和keyProperty两个属性,就可以在批量插入时返回主键。

比如有个表t_user,里面有 user_id,user_name,sex 这三个字段,其中user_id是自增主键。

下面是批量插入的Dao层接口:

List insertUsers(@Param(“list”) List users);

xml形式:

insert into t_user (user_name,sex)

values

(#{c.user_name},#{c.sex})

注解形式:

@Insert("

“(#{c.user_name},#{c.sex})”)

@Options(useGeneratedKeys = true, keyProperty = “user_id”, resultType=“String”)

List insertUsers(@Param(“list”) List users);

注意:@Param里和foreach的collection里都需要写成list, 其实是源码中写死了key为list,否则批量插入后会报错说找不到"user_id"字段,而无法返回主键。

这种方式的前提是该表主键有序自增,它的原理其实就是拿到当前表中最大ID,然后结合影响行数来返回相应数据。但这就需要固定的insert场景,如果是insert ignore这种可能和实际影响行数不同的情况,就会出现不准确的情况。


课间休息,来秀一下来自咱们群里同学搬砖工地附近的夜市。

作者:山一程雪一更


面试题2:在微服务中你是如何实现不同服务间session 共享的?

================================================================================================

在微服务中,一个完整的项目被拆分成多个不相同的独立的服务,各个服务独立部署在不同的服务器上,各自的 session 被从物理空间上隔离开了,但是经常,我们需要在不同微服务之间共享 session。

常见的方案就是 Spring Session + Redis 来实现 session 共享。将所有微服务的 session 统一保存在 Redis 上,当各个微服务对 session 有相关的读写操作时,都去操作 Redis 上的 session 。这样就实现了session 共享,Spring Session 基于 Spring 中的代理过滤器实现,使得 session 的同步操作对开发人员而言是透明的,非常简便。

同时,Spring Session已经集成了redis,可以很方便的将session存到redis中从而实现单点登陆/登出的效果,但是从微服务的角度来说,为了降低系统间的耦合度,一般会单独建一个Redis服务来搞session共享。

1、pom 文件中引入以下包

org.springframework.boot

spring-boot-starter-data-redis

org.springframew

【一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义】

浏览器打开:qq.cn.hn/FTf 免费领取

ork.session

spring-session-data-redis

2、application.properties配置好 redis

spring.redis.database = 0

spring.redis.host = 192.168.xx.xx

spring.redis.port = 6379

spring.redis.password = test

spring.redis.pool.max-active = 200

spring.redis.pool.max-wait = -1

spring.redis.pool.max-idle = 10

spring.redis.pool.min-idle = 0

spring.redis.pool.timeout = 1000

在需要共享 session 的服务的启动类上,加上注解即可

@EnableRedisHttpSession

@SpringBootApplication(exclude= {DataSourceAutoConfiguration.class})

public class PhoneApplication {

public static void main(String[] args) {

SpringApplication.run(PhoneApplication.class, args);

}

}


来了,CSDN的中秋礼品已到位

作者:陈哈哈


面试题3:你了解分库分表么?分库分表一般出现在哪些场景下?

============================================================================================

  • 分库:由单个数据库实例拆分成多个数据库实例,将数据分布到多个数据库实例中。
  • 分表:由单张表拆分成多张表,将数据划分到多张表内。

随着业务数据量和网站QPS日益增高,对数据库压力也越来越大,单机版数据库很快会到达存储和并发瓶颈,就需要做数据库性能方面的优化,分库分表采取的是分而治之的策略,分库目的是减轻单台MySQL实例存储压力及可扩展性,而分表是解决单张表数据过大以后查询的瓶颈问题,坦白说,这些问题也是所有关系型数据库的“硬伤”。

常用策略包括:垂直分表、水平分表、垂直分库、水平分库。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/445611.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号