摘要: DROP TABLE IF EXISTS `t_org`;CREATE TABLE `t_org` ( `id` varchar(5) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL, `name` varchar 阅读全文
posted @ 2022-01-13 14:01 思远99 阅读(1214) 评论(0) 推荐(0) 编辑
摘要: arraylist底层是动态数组,新增和删除时需要把相应位置都需要往后顺移一个位置,这样就会慢,查询时直接通过下标,这样就会快一些。 linkedlist是双向链表,新增和删除快,不需要保持内存上的连续,查询慢,因为查询时必须要从头到尾的遍历。 阅读全文
posted @ 2020-06-23 16:04 思远99 阅读(111) 评论(0) 推荐(0) 编辑
摘要: 面试题11: 当一个接口初始化时,不要求其父接口也需要完成初始化 只有真正使用父接口的时候(如使用父接口定义的常量时),才会初始化 阅读全文
posted @ 2020-04-11 17:01 思远99 阅读(76) 评论(0) 推荐(0) 编辑
摘要: 面试题7: 虽然没输出MyChild1的语句,但是通过这个方法可以看出MyChild1是加载了 恢复内容开始 面试题7: 虽然没输出MyChild1的语句,但是通过这个方法可以看出MyChild1是加载了 面试题8: 输出的结果是hello world,因为final关键字会把这个常量存到调用这个方 阅读全文
posted @ 2020-04-09 09:29 思远99 阅读(85) 评论(0) 推荐(0) 编辑
摘要: 面试题2:类的加载、连接与初始化 加载:查找并且加载类的二进制数据 连接: —验证 :确保被加载的类的正确性(保证字节码不会出现问题) —准备:为类的静态变量分配内存,并将其初始化为默认值(没有实例变量) —解析:把类中的符号引用转换为直接引用 初始化:为类的静态变量赋予正确的初始值 面试题3:类的 阅读全文
posted @ 2020-04-02 15:18 思远99 阅读(116) 评论(0) 推荐(0) 编辑
摘要: 1.在java代码中,类型的加载,连接与初始化过程中都是在程序运行期间完成的,这样对程序可扩展性提供了无限可能,不是在编译时完成,因为可以有jdk的动态代码和cglib动态代理对其进行改变,这样扩展性更高,这一点是猜想,具体还得通过学习时找到实例印证 2.java中都对实例与对象进行操作的,类或者类 阅读全文
posted @ 2020-04-02 14:07 思远99 阅读(82) 评论(0) 推荐(0) 编辑
摘要: 当并发量很大时,秒杀的商品的库存已经为零,这个时候如果再去Redis里面查库存,这样就会影响效率 1.可以在代码的逻辑上面加一个concurrenthashmap的值,这样就可以对其里面的值做一个判断。 2.如果是集群部署,当一个服务器发现库存为零,往这个concurrenthashmap里面存 一 阅读全文
posted @ 2020-03-31 13:51 思远99 阅读(103) 评论(0) 推荐(0) 编辑
摘要: 上一个随笔中的代码压测很低,因为都是对数据库操作,数据库支持的并发数量不高,可以选用redis作为数据库 1.举个例子,每次查询库存数量的时候,可以从redis里面查询对应的商品剩余数量,然后对redis的数据进行减库存 2.如果数据库没有生成订单抛出异常,可以在抛异常的地方把redis的库存数据进 阅读全文
posted @ 2020-03-29 23:55 思远99 阅读(85) 评论(0) 推荐(0) 编辑
摘要: 简单的秒杀场景代码可以用以下实现 1.接口实现类加事务注解 2.用户保存订单 3.减库存,但是sql中update语句中加where条件(库存大于减的数量时才执行),如果没有执行,返回0,做if判断,如果小于等于0时抛异常,这样就会回滚,订单记录也会删除,前台提示用户库存不足 阅读全文
posted @ 2020-03-29 20:54 思远99 阅读(122) 评论(0) 推荐(0) 编辑
摘要: volatile和synchronize的区别 1.volatile不能保证原子性,只能修饰参数可见性,synchronize可以保证线程安全 2.volatile只能修饰参数,不能修饰方法,synchronize只能修饰方法 3.当对同一个参数进行多个线程时,可以使用volatile修饰,因为参数 阅读全文
posted @ 2020-03-29 20:46 思远99 阅读(95) 评论(0) 推荐(0) 编辑