发表于: 2018-01-23 23:43:33
1 763
今天做的事情:
检讨写这里吧。
昨天日报没有遵守格式,也没有充实内容输出,确实不像话,影响不好,做此检讨。
最近情况:
最近一直在部署项目到服务器。这也是之前的问题所在,没有一天一测,到最后才开始去整服务器。有问题是正常的,一直在修改。从昨天到现在,还是没有改好,自己太菜了。
犯得错误有:1.没有在开始接口之前部署好服务器。
2.现在遇到的问题,没有能解决。
3.拖延症。
原因: 服务器这块是自己负责的,但是开始接口任务了,而且对部署服务器真的一头雾水,看了两遍服务器部署小课堂,才有一点印象,看着视频,一步一步配,配个大概,在最后整nginx的时候,拖延了一下,去写接口,然后,拖延到一直到现在。
锁定了问题所在: 1 出现在服务这块,没有正确启动,web端连接不上。2 端口占用问题。
以此为戒:做一个详细的规划,严格执行,不要拖延,快速解决。不会先查,后问,好好请教别人,不耻下问。
昨天日报确实是匆匆忙忙写,第二天也没有去弥补。。虽然是第一次这样,但还是要检讨自己,日报就是对一天的一个总结,给以后回顾有一个日记一样的东西去复习。绝对不会再犯这样的错误,严格要求自己,可以有崩的时候,但是要恢复过来。不要影响带坏新的师弟,做一个好榜样。。
晚上听了一家公开课:关于对秒杀技术的分析,放几张截图、


听了之后感觉知识点被梳理了一遍,很多知识点,在这里都学过,有些也在书上看过。有些使用在代码里,有些没有。对于现在阶段,多敲代码,学习新技术。自学和听课其实都是可以平行进行的。
主要代码区没有截图。简单说一些,项目使用mybatis的自动生成代码,直接进行业务逻辑实现,没毛病,和公司现在开发差不多。业务描述:有100台苹果手机,模拟200个用户同时请求购买,每个人可以后买N台。
实现原理:基于缓存的乐观锁,基于memcache的decr,decr是原子的。
1 :缓存乐观锁的博客链接:https://www.cnblogs.com/sheseido/p/5038562.html ,第一句话就是解决高并发根本方法就是:队列。
好吧 ,先来看锁。
首先是同步与异步的区别,在学习的多线程,也是为了解决这一问题。
同步可以理解为在执行完一个函数或方法之后,一直等待系统返回值或消息,这时程序是出于阻塞的,只有接收到 返回的值或消息后才往下执行其它的命令。可以看做是一个单线程,只做一件事,做完才去做另外的事情。
异步,执行完函数或方法后,不必阻塞性地等待返回值或消息,只需要向系统委托一个异步过程,那么当系统接收到返回值或消息时,系统会自动触发委托的异步过程,从而完成一个完整的流程。可以看做是多线程,做一件事情中,也可以去做别的事,而互不影响。
而多线程中有一个同步关键字:synchronized。假如这个同步的监视对象是类的话,那么如果当一个对象访问类里面的同步方法的话,那么其它的对象如果想要继续访问类里面的这个同步方法的话,就会进入阻塞,只有等前一个对象 执行完该同步方法后当前对象才能够继续执行该方法。这就是同步。相反,如果方法前没有同步关键字修饰的话,那么不同的对象 可以在同一时间访问同一个方法,这就是异步。
补充下脏数据和不可重复读。
脏数据
不可重复读
下面是悲观锁和乐观锁的介绍:
悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自 外部系统的事务处理)修改持保守态度,因此,
在整个数据处理过程中,将数据处于锁定状态。
而乐观锁就是解决了这一问题,大多是基于数据版本 Version )记录机制实现。具体百度。在外部操作的时候,允许别的线程进行操作。不会锁死。只不过需要注意脏数据的产生。
2:Memcached 1.2.5以及更高版本,提供了gets和cas命令,它们可以解决上面的问题。如果您使用gets命令查询某个key的cache会给您返回该item当前值的唯一标识。如果您覆写了这个item并想把它写回到Memcached中,您可以通过cas命令把那唯一标识送给 Memcached。如果该Item存放在Memcached中的唯一标识与您提供的一致,您的写操作将会成功。如果另一个进程在这期间也修改了这个Item,那么该Item存放在Memcached中的唯一标识将会改变,您的写操作就会失败。
链接:http://cloudate.net/?p=306
3:CountDownLatch用法
CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。
好的,各个知识点了解到这里。 刚才说了有100台苹果手机,模拟200个用户同时请求购买,创建一个for循环,创建200个线程模拟用户去购买,使用上面的 CountDownLatch来保证,所有线程创建之后,再去购买。在线程的run方法里面。.await();使当前线程等待实例化完成,再去调用购买接口代码。
具体代码稍后会贴上来,再学习学习。
遇到的问题:
服务启动有问题,导致不能获取数据。
收获:
对多线程的应用,mecache的使用。还复习了这么多知识点。
评论