面试题总结

面1:
1.HashMap为什么是线程不安全的?(ConcurrentHashMap是线程安全的,采用分段锁技术提高并发度,每个段一把锁)
在jdk1.7中:在多线程情况下,扩容时会造成环形链或数据丢失,采用头插法,会造成死循环问题。
在jdk1.8中:在多线程情况下,会发生数据覆盖的情况

2.服务熔断、服务降级技术上是怎么实现的?
1),服务熔断:当某个服务出现不可用或超时的情况,为了防止系统出现雪崩,暂时停止对该服务的调用。
2),服务降级:当系统处于高峰期,系统资源紧张,我们可以让系统上非核心业务降级处理
降级:不处理,或处理简单。
答:在分布式系统中,网关作为流量的入口,大量请求进入网关,向后端远程服务发起调用,后端不可避免的会调用 失败(超时或异常),需要在网关上做熔断,降级操作

3.你的项目怎么保证数据安全性,防止别人获取用户名,密码?
答:采用锁机制:悲观锁(即一次只能一个线程进行操作数据,等它操作完毕释放锁之后,其他线程才能进行获取锁,进行操作),乐观锁(比较并交换,采用版本号去更新,版本号不一致,不进行更新)

采用redis保证缓存与数据库一致性
1)秒杀情况:把数据库中的库存数据转移到redis缓存中,
所有读写操作(查库存,减库存)都在reids中进行,然后再通过定时任务把redis中的用户秒杀的数据同步到数据库。
2)先更新数据库,再删缓存
如果删除缓存失败,在事务中抛异常,让数据库也进行回滚

4.获取数组和获取字符串,集合的长度?
答:数组对应length属性,而字符串对应length()方法,集合对应size()

5.Limit分页(查询10-15条数据)
查询前100行:select * from table limit 100;
查询后100行:select * from table desc id limit 100;
查询10-15条数据:select * from table limit 9,6;
curPage:当前第几页
pageSize:一页多少条记录
公式:limit (curPage -1)*pageSize,pageSize;
查询n行到m记录?
Select * from table limit n-1,m-(n-1);

6.字符串拼接都有哪些方式?
1) 不涉及循环的,就是那种很简单的那种拼接,就用String的 + ,简单方便 ;
2) 非循环体中的字符串拼接,若只是两个字符串拼接,推荐使用str1.concat.(str2);
3) 涉及到循环的,比如说 for 的,可以考虑使用 StringBuilder的append(String str) , 要求线程安全的就选择 StringBuffer ;
4) 有 List 这种的,StringJoiner 不免一个好的选择。

7.你在项目中遇到的问题是什么,怎么解决的?
答:遇到的是跨域问题。
1)通过nginx,在配置文件中配置服务的地址和端口,在接口实现类上添加@CrossOrign注解
2)通过gateway网关进行配置,在配置文件中配置路由(参考springCloud重写路径,写一个配置类)
spring:
cloud:
gateway:
routes:
- id: test_route
uri: https://www.baidu.com
predicates:
- Query=url,baidu
- id: qq_route
uri: https://www.qq.com
predicates:
- Query=url,qq

	        - id: product_route
	          uri: lb://gulimall-product
	          predicates:
	            - Path=/api/product/**
	          filters:
	            - RewritePath=/api/(?<segment>.*),/$\{segment}
	
	        - id: admin_route
	          uri: lb://renren-fast
	          predicates:
	            - Path=/api/**
	          filters:
	            - RewritePath=/api/(?<segment>.*),/renren-fast/$\{segment}
	  
	@Configuration
	public class GulimallCorsConfiguration {
	
	    @Bean
	    public CorsWebFilter corsWebFilter(){
	        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
	
	        CorsConfiguration corsConfiguration = new CorsConfiguration();
	
	        //1.配置跨域问题
	        corsConfiguration.addAllowedHeader("*");
	        corsConfiguration.addAllowedMethod("*");
	        corsConfiguration.addAllowedOrigin("*");
	        //允许带cookie信息
	        corsConfiguration.setAllowCredentials(true);
	
	
	        source.registerCorsConfiguration("/**",corsConfiguration);
	
	        return new CorsWebFilter(source);
	    }
	
	}  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值