oppo后端16连问(五)

发布于 2022-5-16 18:04
浏览
0收藏

12. 如何快速判断一个数是奇数还是偶数,除开对2取余呢。


判断一个数是奇数还是偶数,我们最容易想到的就是对2取余。

if( x % 2 )
// 奇数
else
// 偶数

还有一种方法,就是与1相与( &1),具体实现如下:

if( x & 1 )
// 奇数
else
// 偶数

13. Spring声明式事务原理?哪些场景事务会失效?


13.1 声明式事务原理


spring声明式事务,即@Transactional,它可以帮助我们把事务开启、提交或者回滚的操作,通过Aop的方式进行管理。oppo后端16连问(五)-开源基础软件社区在spring的bean的初始化过程中,就需要对实例化的bean进行代理,并且生成代理对象。生成代理对象的代理逻辑中,进行方法调用时,需要先获取切面逻辑,@Transactional注解的切面逻辑类似于@Around,在spring中是实现一种类似代理逻辑。oppo后端16连问(五)-开源基础软件社区详解可以看下这篇文章哈:Spring中的@Transactional实现原理

 

13.2 spring声明式事务哪些场景会失效


 •  方法的访问权限必须是public,其他private等权限,事务失效
 •  方法被定义成了final的,这样会导致事务失效。
 •  在同一个类中的方法直接内部调用,会导致事务失效。
 •  一个方法如果没交给spring管理,就不会生成spring事务。
 •  多线程调用,两个方法不在同一个线程中,获取到的数据库连接不一样的。
 •  表的存储引擎不支持事务
 •  如果自己try...catch误吞了异常,事务失效。
 •  错误的传播


详解大家可以看下这篇文章:聊聊spring事务失效的12种场景,太坑了

 

14. 你们是微服务架构嘛?如果你来设计一个类似淘宝的系统,你怎么划分微服务?


可以按业务领域、功能、重要程度进行划分。

 

 •  可以按业务领域,把用户、社区、商品信息、消息等模块等划分。
 •  单一功能职责,按功能拆分,比如订单、支付、物流、权限。
 •  按重要程度划分,区分核心和非核心功能,比如支付、订单就是核心功能。


15. 你们是怎么分库分表的?分布式ID如何生成?


如果是我们公司的话,使用了水平分库的方式,就是一个用户注册时,就划分了属于哪个数据库,然后具体的表结构是一样的。

 

业界还有垂直分库,就是按照不同的系统中的不同业务进行拆分,比如拆分成用户库、订单库、积分库、商品库,把它们部署在不同的数据库服务器。

 

分表的话也有水平分表和垂直分表,垂直分表就是将一些不常用的、数据较大或者长度较长的列拆分到另外一张表,水平分表就是可以按照某种规则(如hash取模、range),把数据切分到多张表去。一张订单表,按时间range拆分如下:oppo后端16连问(五)-开源基础软件社区range划分利于数据迁移,但是存在数据热点问题。hash取模划分,不会存在明显的热点问题,但是不利于扩容。可以range+hash取模结合使用。

 

分布式ID可以使用雪花算法生成

 

雪花算法是一种生成分布式全局唯一ID的算法,生成的ID称为Snowflake IDs。这种算法由Twitter创建,并用于推文的ID。

 

一个Snowflake ID有64位。

 

 •  第1位:Java中long的最高位是符号位代表正负,正数是0,负数是1,一般生成ID都为正数,所以默认为0。
 •  接下来前41位是时间戳,表示了自选定的时期以来的毫秒数。
 •  接下来的10位代表计算机ID,防止冲突。
 •  其余12位代表每台机器上生成ID的序列号,这允许在同一毫秒内创建多个Snowflake ID。
oppo后端16连问(五)-开源基础软件社区16. 所有异常的共同的祖先是?运行时异常有哪几个?
oppo后端16连问(五)-开源基础软件社区Java 异常的顶层父类是Throwable,它生了两个儿子,大儿子叫Error,二儿子叫Exception

 

 •  Error:是程序⽆法处理的错误,一般表示系统错误,例如虚拟机相关的错误OutOfMemoryError
 •  Exception:程序本身可以处理的异常。它可以分为RuntimeException(运行时异常)和CheckedException(可检查的异常)。

 

什么是RuntimeException(运行时异常)?

 

运行时异常是不检查异常,程序中可以选择捕获处理,也可以不处理。这些异常一般是由程序逻辑错误引起的,程序应该从逻辑角度尽可能避免这类异常的发生。

 

常见的RuntimeException异常:

 

 •  NullPointerException:空指针异常


 •  ArithmeticException:出现异常的运算条件时,抛出此异常


 •  IndexOutOfBoundsException:数组索引越界异常


 •  ClassNotFoundException:找不到类异常


 •  IllegalArgumentException(非法参数异常)


 • 什么是CheckedException(可检查的异常)?

 

从程序语法角度讲是必须进行处理的异常,如果不处理,程序就不能编译通过。如IOException、SQLException等。

 

常见的 Checked Exception 异常:

 

 •  IOException:(操作输入流和输出流时可能出现的异常)
 •  SQLException

标签
已于2022-5-16 18:04:09修改
收藏
回复
举报
回复
添加资源
添加资源将有机会获得更多曝光,你也可以直接关联已上传资源 去关联
    相关推荐