izuiaicy-2018-1-21/每周总结

合抱之木,生于毫末;九层之台,起于垒土;千里之行,始于足下。-----------送给在码农之路上搬砖的自己。

2018-1-21杭州

1.mybatis篇

用户的等级需求。每次添加一个等级需要在之前的level上+1。所以需要求数据库同一个供应商下level的最大值,然后在次基础上+1。由于sql语句不熟悉。导致求这个最大值的时候花了1个小时的时间。

问题:直接用max函数求解,数据库有值的时候没有问题,当数据库的该值为空时,返回的时null,不是一个int/Integer。困扰了许久。

解决办法:1。嵌套查询,先找出最大值,然后用level=最大值得到该条记录。但是多了一个自查询,时间复杂度为O(n^2)。

  2。使用order by level 然后limit 0,1。使用按照递增递减的顺序然后只查一个,完美解决。比1中的时间复杂度低。



2.web容器。web.xml

之前一直不知道web.xml具体的存在原理以及filter的使用

web容器主要是在项目启动的时候启动一些项目运行所必须的配置。spring监听器/类加载/servlet/Filter等

1.spring监听器:现在一般项目都会使用spring框架,整个项目部署在tomcat上运行的时候,首先会加载spring监听器,然后通过spring监听器去启动我们在spring配置文件中的各种配置以及各种bean(注解注入/配置注入),以及数据库的连接池。定时任务配置/ aop/MQ,其他通过spring启动的框架(mybatis/hibernate)等等。

2.类加载:项目运行的时候我们先是将我们的代码通过编译器解析成字节码文件,也就是类加载运行的文件,整个项目所运行的不是我们的代码,而是我们代码编译的字节码。

3.servlet:Web项目都是通过servlet请求,找到对应的处理器处理,然后通过视图解析器将页面渲染给前端。

4.Filter:Filter是web.xml不起眼的地方(之前基本上没有使用过。。。或者说没有注意到这个东东~)。主要起着过滤器的作用。

Filter的使用

1.一般web项目都会用上一个Filter处理编码解码问题。整个filter也很简单就是编解码。

2.其实filter中可以配置许多我们能用得到的地方,比方说前的编解码、用户权限安全、所有请求的过滤。

3.filter有三个方法:1。init() 主要是初始化一些基本的配置信息

      2。doFilter()这个就是我们业务处理的关键方法,在这个方法里面我们可以过滤掉所有我们想过滤掉的请求(包括简单的登陆页面请求/接口请求)。当通过过滤的时候我们调用

   chain.dofilter(request,response)方法转到下一个filter过滤器上。当是最后一个过滤器时就会直接走servlet请求的正常流程,找到控制器处理器,视图解析器等等。

   3.destory() 一般不会做处理,使用默认的就好。


3.ThreadLocal

threadlocal主要提供了get/set方法。获取你所需要的对象什么的。主要用于多线程的处理。当一个对象经常性的会同一时刻被不同线程调用,且会更改对象的内容,我们通过thradlocal每个线程单独使用自己的object的副本,并将修改作用在object的副本上,并不会影响其他线程对这个object的使用。作用于多线程高并发的业务处理。

每一个线程调用时,都会将这个object的副本存进一个map中,其中key是这个线程本身value是这个object对象,其他的线程无法拿到这个线程的object副本,所以他是安全的,然后通过map.get(key)拿到线程自己的object副本。


4.每次谈需求的时候不能为了完成需求还写代码,这次由于地址这里只需要获取地址name,没有通过name获取code,少了一些service服务,导致同事还得自己来写。这个是不应该的。而且要多想想是不是后面的需求会不会涉及都这些。不然为了后面的需求将之前的代码全部覆盖掉是不值得的。


5.当一个对象多次在不同的地方使用set时,我们可以在对象的实体类里面使用构造器,重写构造器。直接使用new Object(str,long,int)的方式,这样会比较优雅。


6.本周犯了一个严重的错误,将项目发布online的时候,居然在master上,merge/gray的代码,这个是严重的错误,还好没有提交。以后每次merge的时候需要pull两次下最新的代码,保持代码的最新,然后merge的时候需要注意merge谁,想一想会不会出现git的问题。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值