java
逸疆
好好学习,天天向上 :)
展开
-
开源项目miaosha学习(四)
上一章结束说到最后进行redis扣减库存和写入MQpublic ResultGeekQ<Boolean> deductStockCache(String goodsId) { ResultGeekQ<Boolean> resultGeekQ = ResultGeekQ.build(); try { //redis操作原子性 Long stock = redisService.decr(GoodsKe原创 2020-05-26 09:17:28 · 408 阅读 · 0 评论 -
开源项目miaosha学习(三)
上一章介绍到访问/{path}/confirm也就是秒杀系统的核心位置其实一开始不太理解生成秒杀地址的意义,后来查了下了解到秒杀地址的意义是为了防止用户获得秒杀的url而越过前端界面直接秒杀,所以就用uuid的md5码来生成,这样连程序设计人员也不知道地址是什么,加上本身对于秒杀的Controller都通过自定义注解配合拦截器来实现限流,所以不会出现刷单的现象好了,现在进入/{path}/confirm 处理器秒杀处理器首先会检查上一步生成的秒杀路径是否正确,检查方式也很简单直接查redis就行原创 2020-05-22 18:40:33 · 409 阅读 · 0 评论 -
开源项目miaosha学习(二)
上一章程序走到了商品列表的位置,补充两点,一是debug的时候最好把缓存关闭,不然可能会因为页面缓存有意想不到的惊喜 ????关闭方法:Chrome浏览器F12 NetWork Disable Cache二是在程序启动的时候,其实会将商品与秒杀有关的信息传入redis中,后续会用redis中的库存进行限流在goods_list.html中可以看到通过点击"详情"会进入goods_detail.htm页面这里注意下不是html是htm页面哈,在static包里,一开始找错了,注意下我们翻原创 2020-05-21 22:03:29 · 564 阅读 · 0 评论 -
开源项目miaosha学习(一)
github上点赞最多的秒杀项目,地址here从头开始学习,因为没看到相关的介绍文档,希望能通过博客把每一块说清楚哈!(前端方面不是特别懂,但是能看懂个大概)首先启动好项目,(其中前面需要)从http://localhost:8080/login/to_login进入他这里我个人感觉有点问题, 虽然是让填的手机号码,但其实在数据库里对应的是寻找的nickname,后面可以看到是以nickname作为查找的,但是他里面的nickname没有超过11位的所以登不进去,还是自己数据库创建个数据好了弄原创 2020-05-15 16:15:48 · 959 阅读 · 0 评论 -
(坑爹)关于jdk12在Linux下启动rocketmq
首先咱们在正常启动NameServer时会发现大量的jvm 命令用不了,通过阅读mqnamesrv文件我们可以看到在最后一行其实运行的是runserver文件我们继续打开文件经过一系列更改我们需要将文件改成下面这样注意图中修改的内存大小,原来是8g 需要改小一些这样其实还是启动不了,因为新的jdk已经将DJAVA命令取消掉了所以这里需要改成classpath 命令,但cl...原创 2019-09-27 20:11:24 · 305 阅读 · 0 评论 -
leetcode21 实现 strStr()
这题虽然是简单题,但看到别人提到KMP算法就特意从网上搜索了下,发现真正算起来并不是这么简单,特意转载大佬的文章研习一下!转载链接 https://blog.csdn.net/gao506440410/article/details/81812163...原创 2019-09-02 21:11:28 · 89 阅读 · 0 评论 -
关于spring配置不扫描service层的原因
我将contoller给springmvc进行扫描,然后其余所有交给spring扫描然后发现service层的EmployeeService并没有扫描到出现以下问题Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type ‘springmvc...原创 2019-09-02 15:56:44 · 2126 阅读 · 1 评论 -
idea web工程关于配置 web下的资源例如jquery
如图我们可以看到红色方框里面是进行配置了jquery并且在jsp文件中也进行了相应src的配置,但是页面效果并没有显示alert(“hello”),一些原因是我们在springmvc的配置文件中并没有加入下图二是因为生成的artifact并没有加入web下面新生成的文件资源,这时候重启服务器也没有用,方法是将out文件删除,重新编译生成即可!...原创 2019-08-19 17:14:51 · 568 阅读 · 3 评论 -
Mybaties参数处理
先总结一下,后面再一个个解释:单个参数:直接使用#{参数名}进行取值,mybatis没做特殊处理,参数名可以随便写。多个参数:使用#{param1},#{param2}取值命名参数:通过@param(“key”)明确指定封装map中的key,就可以通过#{key}取出参数值了POJO:如果多个参数正好是业务模型,这时候就可以传入业务模型,通过#{属性名}就可以取值了Map:如果多个参数不...转载 2019-07-25 18:36:03 · 190 阅读 · 0 评论 -
page和pagecontext的区别
1.page和pagecontext的区别page就是当前jsp页面,也等同于jsp编译后的servlet,查看java代码可以得知,page是java.lang.Object类型page1.jsp,设置键值对在page1.jsp,可以取出上边设置的name值,但是在其它页面(page2,page3中…)获取到的都是nullpagecontext,是page的上下文,是javax.se...转载 2019-07-19 19:23:02 · 2008 阅读 · 0 评论 -
jvm对锁的优化与分类
自旋锁自旋锁顾名思义,就是自己旋转转圈等待,那么它有什么作用呢?当前线程尝试去竞争锁竞争失败,准备阻塞自己但是并没有阻塞自己,而是采用自旋锁,进入自旋状态进入自旋状态,并且重新不断竞争锁如果在自旋期间成功获取锁,那么结束自旋状态,否则进入阻塞状态如果在自旋期间成功获取锁,那么就减少一次线程的切换。根据上面解释我们可以很容易的明白自旋锁的意义,因为cpu从内核态切换至用户态,线程的阻...转载 2019-07-14 15:41:37 · 86 阅读 · 0 评论 -
为什么有锁会引起上下文切换
锁竞争、上下文切换、线程迁移的监控程序的多线程应用,必然会出现锁的竞争。锁竞争一次消耗的高达80,000个(甚至更高)时钟周期,那么锁的竞争过多必然会导致性能瓶颈既然如此消耗性能,又该如何去监测锁竞争呢?第一步:竞争的监测第二步:若出现锁的竞争,就需要利用线程转储(thread dump)去分析锁竞争严重的原因了解释如下:...转载 2019-07-13 15:09:15 · 1427 阅读 · 1 评论