发表于: 2018-01-23 23:43:33

1 765


今天做的事情:


            检讨写这里吧。


           昨天日报没有遵守格式,也没有充实内容输出,确实不像话,影响不好,做此检讨。


           最近情况:         


                      最近一直在部署项目到服务器。这也是之前的问题所在,没有一天一测,到最后才开始去整服务器。有问题是正常的,一直在修改。从昨天到现在,还是没有改好,自己太菜了。


                       犯得错误有:1.没有在开始接口之前部署好服务器。

                                           2.现在遇到的问题,没有能解决。

                                           3.拖延症。


                      原因: 服务器这块是自己负责的,但是开始接口任务了,而且对部署服务器真的一头雾水,看了两遍服务器部署小课堂,才有一点印象,看着视频,一步一步配,配个大概,在最后整nginx的时候,拖延了一下,去写接口,然后,拖延到一直到现在。


                     锁定了问题所在: 1 出现在服务这块,没有正确启动,web端连接不上。2 端口占用问题。 


                     以此为戒:做一个详细的规划,严格执行,不要拖延,快速解决。不会先查,后问,好好请教别人,不耻下问。


                     昨天日报确实是匆匆忙忙写,第二天也没有去弥补。。虽然是第一次这样,但还是要检讨自己,日报就是对一天的一个总结,给以后回顾有一个日记一样的东西去复习。绝对不会再犯这样的错误,严格要求自己,可以有崩的时候,但是要恢复过来。不要影响带坏新的师弟,做一个好榜样。。


                   


                  晚上听了一家公开课:关于对秒杀技术的分析,放几张截图、


              


                  

             

                     听了之后感觉知识点被梳理了一遍,很多知识点,在这里都学过,有些也在书上看过。有些使用在代码里,有些没有。对于现在阶段,多敲代码,学习新技术。自学和听课其实都是可以平行进行的。


                    主要代码区没有截图。简单说一些,项目使用mybatis的自动生成代码,直接进行业务逻辑实现,没毛病,和公司现在开发差不多。业务描述:有100台苹果手机,模拟200个用户同时请求购买,每个人可以后买N台。

                  

                    实现原理:基于缓存的乐观锁,基于memcache的decr,decr是原子的。


                    1 :缓存乐观锁的博客链接:https://www.cnblogs.com/sheseido/p/5038562.html ,第一句话就是解决高并发根本方法就是:队列。

好吧 ,先来看锁。


                   首先是同步与异步的区别,在学习的多线程,也是为了解决这一问题。


                   同步可以理解为在执行完一个函数或方法之后,一直等待系统返回值或消息,这时程序是出于阻塞的,只有接收到 返回的值或消息后才往下执行其它的命令。可以看做是一个单线程,只做一件事,做完才去做另外的事情。


                   异步,执行完函数或方法后,不必阻塞性地等待返回值或消息,只需要向系统委托一个异步过程,那么当系统接收到返回值或消息时,系统会自动触发委托的异步过程,从而完成一个完整的流程。可以看做是多线程,做一件事情中,也可以去做别的事,而互不影响。


                  而多线程中有一个同步关键字:synchronized假如这个同步的监视对象是类的话,那么如果当一个对象访问类里面的同步方法的话,那么其它的对象如果想要继续访问类里面的这个同步方法的话,就会进入阻塞,只有等前一个对象 执行完该同步方法后当前对象才能够继续执行该方法。这就是同步。相反,如果方法前没有同步关键字修饰的话,那么不同的对象 可以在同一时间访问同一个方法,这就是异步。

             

              补充下脏数据和不可重复读。

              

              脏数据

  脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是脏数据(Dirty Data),依据脏数据所做的操作可能是不正确的。

             不可重复读

  不可重复读是指在一个事务内,多次 读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次 读到的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读


              下面是悲观锁和乐观锁的介绍:                 

 悲观锁,正如其名,它指的是对数据被外界(包括本系统当前的其他事务,以及来自 外部系统的事务处理)修改持保守态度,因此,

       在整个数据处理过程中,将数据处于锁定状态。

      

               而乐观锁就是解决了这一问题,大多是基于数据版本   Version )记录机制实现。具体百度。在外部操作的时候,允许别的线程进行操作。不会锁死。只不过需要注意脏数据的产生。


             

              2Memcached 1.2.5以及更高版本,提供了gets和cas命令,它们可以解决上面的问题。如果您使用gets命令查询某个key的cache会给您返回该item当前值的唯一标识。如果您覆写了这个item并想把它写回到Memcached中,您可以通过cas命令把那唯一标识送给 Memcached。如果该Item存放在Memcached中的唯一标识与您提供的一致,您的写操作将会成功。如果另一个进程在这期间也修改了这个Item,那么该Item存放在Memcached中的唯一标识将会改变,您的写操作就会失败。

       
                 链接:http://cloudate.net/?p=306


                3CountDownLatch用法


                 CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。


            好的,各个知识点了解到这里。 刚才说了有100台苹果手机,模拟200个用户同时请求购买,创建一个for循环,创建200个线程模拟用户去购买,使用上面的 CountDownLatch来保证,所有线程创建之后,再去购买。在线程的run方法里面。.await();使当前线程等待实例化完成,再去调用购买接口代码。

      

             具体代码稍后会贴上来,再学习学习。

                   





遇到的问题:


               服务启动有问题,导致不能获取数据。


收获:


             对多线程的应用,mecache的使用。还复习了这么多知识点。



             





返回列表 返回列表
评论

    分享到