Java 日常技巧

阅读:359 2019-03-19 14:42:49 来源:新网

1要做html转义时请使用spring的org.springframework.web.util.htmlutils.htmlescape()2aspectj语法:一个包及子包下所有的xxxservice接口的所有方法@pointcut("execution(*com.abc.*service.*(..))")

3有一个proxy-target-class属性,默认为false,表示使用jdk动态代理织入增强,当配为时,表示使用cglib动态代理技术织入增强。不过即使proxy-target-class设置为false,如果目标类没有声明接口,则spring将自动使用cglib动态代理。4spring配置项之http://kld208.iteye.com/blog/16328715urlpattern="/*",处理所有请求urlpattern="/",对于一个请求,如果前面的servlet都没有拦截到,那么本servlet会最终处理它。【耗时】6【spi发现机制】1.jdk有一套以java.util.serviceloader为核心的机制。serviceloader会从类路径查找做了相关meta-inf声明的jar包,所以上层不必耦合spi具体实现的类。2.其实用springioc搞更直观7为什么在调用栈的较深处抛异常会导致性能问题?这是因为构建exception对象时会去取一下当前调用栈的快照(throwable.fillinstacktrace()),这个操作比较耗时。栈越深,操作就越耗时。怎么解决这个问题?1.避免滥用exception作为flow-control的工具。比如判断类型时可以用instanceof,而不必强转+捕捉classcastexception.2.重用exception对象。这样总体上只需要取一次栈的快照。3.覆盖fillinstacktrace()方法,使它变成空方法;也就是说,不生成快照。9netty的websocket例子http://chenjianjx.iteye.com/blog/188908110并发环境下延迟加载singleton实例的终极方案把对象设为内部类的一个静态属性11reentrantlock的唯一优势在于它提供了无阻塞加锁、可中断加锁等特性,这对避免死锁有很大帮助。12completionservice的使用executorservice,completionservice,callable,future,completionservice.submit(task);http://chenjianjx.iteye.com/blog/183809113copyonwritearraylist的使用同步更新http://chenjianjx.iteye.com/blog/183795714concurrenthashmap的弱一致性除了迭代、size()、isempty()等操作有这个问题之外,像remove(),put()操作等都比hashmap提供了更高的一致性,因为这些操作都是原子操作。这些操作中使用了粒度比较细的锁,不会像hashtable一样锁住整个容器,但也不至于像hashmap那样完全不加锁。15【何时使用装饰模式】当你的一个service代码不能修改,要增强时,就再写一个实现了同类接口的service类,然后在这个新service类中,把旧service的方法仿到新service方法中环绕一下16log4j日志异步化asyncappender大幅提升系统性能17javagc系列http://www.importnew.com/13504.html18aop使用场景可编辑的controller@beforeadd|update|delete检测是否登录dao事务环绕19可log的方法添加异步loger20构建基础技术框架和服务,包括日志、存储、消息、缓存、搜索、数据源、集群扩展等等。21声明修饰符的区别invokeinterface最慢,invokevitual中,invokespeical最快invokeinterface调用接口函数ex.interfacea{methodb}a.b_invokevirtual非private的一些方法_invokespecialprivate,构造器的一些方法,(个人认为可以包含final函数)_invokestaticstatic方法22jvm运行时数据区分为pc寄存器、java虚拟机栈、堆、方法区、运行时常量池、本地方法栈共6个部分23熟悉java多线程,线程池,jvm调优等;24熟悉scala语言及akka等优先;25【了解大规模web应用部署方案】,了解负载均衡技术、缓存技术的应用与实现;

26这个区别不是很大,最主要的区别就是mybatis简化了编码的过程,不需要去写dao的实现类,直接写一个dao的借口,再写一个xml配置文件,整个mybatis就配置好了,也就是数据库就连接好了,然后再service里面调用dao就可以了,但是ibatis则不可以,必须要写dao的实现类,在写个什么returngetsqlmapclienttemplate().queryforlist()神马的,所以说mybatis是ibatis的升级版本,也就是在这里,不用写dao的实现类,还有些区别就是xml里面的sql语句的写法有些小变化,但是不大27熟悉linux的使用,能够在linux上做基本的程序部署,熟悉linux基本命令28具有分销、零售、物流、电商相关的项目经验。29有zookeeper、activemq、dubbo等开源软件使用经验者优先。30熟悉html、javascript、jquery、ajax、css等。31具备系统架构设计能力32掌握缓存、nosql等技术,有相关集群经验优先33【mqtt协议,专门为移动设备设计的,低流量、低耗电等】36generationspace(永久保存区域)、heapspace(堆区域)、javastacks(java栈)class.find(...)就是从【永久区】查找的permanentgenerationspace性的内存溢出,表明永久区不够存放要加载的class了,需要增加永久区的大小,设置xx:permsize和xx:maxpermsize参数的大小37详解finalize函数finalize是位于object类的一个方法,该方法的访问修饰符为protected,由于所有类为object的子类,因此用户类很容易访问到这个方法。由于,finalize函数没有自动实现链式调用,我们必须手动的实现,因此finalize函数的最后一个语句通常是super.finalize()。通过这种方式,我们可以实现从下到上实现finalize的调用,即先释放自己的资源,然后再释放父类的资源。根据java语言规范,jvm保证调用finalize函数之前,这个对象是不可达的,但是jvm不保证这个函数一定会被调用。另外,规范还保证finalize函数最多运行一次。【很多java初学者会认为这个方法类似与c++中的析构函数,将很多对象、资源的释放都放在这一函数里面。】其实,这不是一种很好的方式。原因有三:其一,gc为了能够支持finalize函数,要对覆盖这个函数的对象作很多附加的工作。其二,在finalize运行完成之后,该对象可能变成可达的,gc还要再检查一次该对象是否是可达的。因此,使用finalize会降低gc的运行性能。其三,由于gc调用finalize的时间是不确定的,因此通过这种方式释放资源也是不确定的。通常,finalize用于一些不容易控制、并且非常重要资源的释放,例如一些i/o的操作,数据的连接。这些资源的释放对整个应用程序是非常关键的。在这种情况下,程序员应该以通过程序本身管理(包括释放)这些资源为主,以finalize函数释放资源方式为辅,形成一种双保险的管理机制,而不应该仅仅依靠finalize来释放资源。38很多浏览器都限制一个站点最多保存20个cookie39浏览器缓存,反向代理缓存,页面缓存,局部页面缓存,对象缓存等等都是缓存应用的场景。40单db_[读取压力太大了]_>__master+salves读写分离,分摊读取数据的压力_[master负载太高]_>__垂直分区(也就是所谓的分库,比如将商品信息,用户信息,交易信息分别存储到不同的数据库中,同时还可以针对商品信息的库采用master,salve模式)_>___按照功能拆分的数据库写压力被分担到了不同的server上面__>__水平分区(这就是俗话说的分表,或者说sharding).41【粗】监控系统网络流量是多少,内存利用率是多少,io,cpu的负载是多少,服务的访问压力是多少,服务的响应时间是多少42【细】监控某个url的访问量多少,每个页面的pv是多少,页面每天占用的带宽是多少,页面渲染时间是多少,静态资源比如图片每天占用的带宽是多少43单个cookie的value能存多大的值呢?各浏览器的cookie每一个name=value的value值大概在4k;所以4k并不是一个域名下所有的cookie共享的,而是一个name的大小;大多数浏览器只允许每个站点存储20个cookie44replication与sharding的区别-replication用户扩展数据库系统的读性能-sharding用于扩展数据库系统的写性能

应用无状态(淘宝session框架)有效使用缓存(tair)应用拆分(hsf)数据库拆分(tddl)异步通信(notify)非结构化数据存储(tfs,nosql)监控、预警系统配置统一管理

ok,那么下一步我们说说异步能给系统带来什么样子的好处。首先我们想想,假如系统有a和b两个子系统构成,假如a和b是同步通信的话,那么要想使得系统整体伸缩性提高必须同时对a和b进行伸缩,这就影响了对整个系统进行scaleout.其次,同步调用还会影响到可用性,从数学推理的角度来说,a同步调用b,如果a可用,那么b可用,逆否命题就是如果b不可用,那么a也不可用,这将大大影响到系统可用性,再次,系统之间异步通信以后可以大大提高系统的响应时间,使得每个请求的响应时间变短,从而提高用户体验,因此异步在提高了系统的伸缩性以及可用性的同时,也大大的增强了请求的响应时间(当然了,请求的总体处理时间也许不会变少)。

下面我们就以淘宝的业务来看看异步在淘宝的具体应用。交易系统会与很多其它的业务系统交互,如果在一次交易过程中采用同步调用的话,这就要求要向交易成功,必须依赖的所有系统都可用,而如果采用异步通信以后,交易系统借助于消息中间件notify和其它的系统进行了解耦,这样以来当其它的系统不可用的时候,也不会影响到某此交易,从而提高了系统的可用性。

主要是产品开发、线上推广、线下活动、还有融资/合作这样最重要还是要寻找到用户需求和快速产品开发

【spring对ibatis的支持】spring通过dao模式,提供了对ibatis的良好支持。sqlmapclient:是ibatis中的主要接口,通过xml配置文件可以让spring容器来管理sqlmapclient对象的创建,spring提供了sqlmapclientfactorybean来生成该对象。sqlmapclientfactorybean:sqlmapclientfactorybean是由spring所提供的,用来生成sqlmapclient对象的一个工厂类。当使用spring配置文件将sqlmapclientfactorybean作为一个sqlmapclient的实现类进行注入时,spring容器将根据接口里的定义来调用其getobject方法,最终返回一个sqlmapclient接口的实现类。sqlmapclientfactorybean生成的对象拥有两个重要属性,configlocation属性用来确定sqlmap-config.xml,datasource属性用来确定数据源。sqlmapclientdaosupport:spring提供的数据库操作类,应用程序的持久层dao则可以继承这个类。sqlmapclientdaosupport需要spring为其注入sqlmapclient接口的实现对象,来确定使用何种数据源和使用何种sqlmap-config.xml。

框架..【ibatis框架】ibatis源码学习(一)整体设计和核心流程http://www.iteye.com/topic/1121467ibatis源码学习(三)参数和结果的映射原理http://www.iteye.com/topic/1121782深入分析ibatis框架之系统架构与映射原理https://www.ibm.com/developerworks/cn/java/j-lo-ibatis-principle/读ibatis源码—为什么说sqlmapclient是线程安全的http://www.iteye.com/topic/560566ibatis_2.3源码中insert&update&query垂直浅析http://www.iteye.com/topic/832157ibatis2.3源码之数据源&连接池浅析http://www.iteye.com/topic/712662ibatis插入数据返回id的方法http://my.oschina.net/zimingforever/blog/81092

【mybatis框架】深入理解mybatis原理专栏http://blog.csdn.net/column/details/mybatis-principle.html《深入理解mybatis原理》mybatis初始化机制详解http://blog.csdn.net/luanlouis/article/details/37744073mybatis整体预览(一)http://blog.csdn.net/jdream314/article/details/7462441mybatis整体预览(二)http://blog.csdn.net/jdream314/article/details/7473001mybatis应用系列http://www.blogjava.net/davidjefiny/category/54063.html通过源码分析mybatis的缓存http://www.cnblogs.com/fangjian0423/p/mybatis-cache.html

mybatis源码分析(1)——sqlsessionfactory实例的产生过程http://www.cnblogs.com/hzhuxin/p/3349836.htmlmybatis源码分析(2)——事务概述http://www.cnblogs.com/hzhuxin/p/3352758.html

使用springprofile和mybatis进行多个数据源(h2和mysql)的切换http://www.tuicool.com/articles/mnnjfe使用freemarker编写mybatis的mapper.xml自动生成工具http://my.oschina.net/541996928/blog/128912mybatis-paginatorhttps://github.com/miemiedev/mybatis-paginator

【spring框架】spring源码解读——spring容器初始化1http://blog.csdn.net/chenxuegui1234/article/details/18739495spring框架的设计理念与设计模式分析https://www.ibm.com/developerworks/cn/java/j-lo-spring-principle/http://imaginecup.iteye.com/category/122523springmvc中使用interceptor拦截器http://haohaoxuexi.iteye.com/blog/1750680运用spring注解实现netty服务器端udp应用程序http://blog.csdn.net/tanrenzong1986/article/details/6404256springaop在项目中的一些巧妙使用(一)---方法执行时间记录http://calatustela.iteye.com/blog/1910025扩展springmvc的方法级拦截器http://www.oschina.net/code/snippet_84328_14106springmvc学习总结http://www.tuicool.com/kans/919944126springtransaction分析事务属性http://blog.csdn.net/partner4java/article/details/7015331关于《扩展springmvc的方法级拦截器》的应用例子http://www.oschina.net/code/snippet_84328_15188

【concurrent包源码分析】concurrent.atomic包源码分析http://blog.csdn.net/ajian005/article/details/18894149

spring+netty+haproxyhttp://www.blogjava.net/liuguly/archive/2014/05/21/413900.html

executor框架分析(核心的地方要多次研究)http://blog.csdn.net/ajian005/article/details/18894855

hashmap源码分析(基于jdk1.6)http://blog.csdn.net/ajian005/article/details/18277703

大型网站技术架构》读书笔记系列http://www.cnblogs.com/edisonchou/p/3773828.html

java的动态编译cglib/asm比较http://www.cnblogs.com/zc22/archive/2010/06/20/1761165.html

autumn,自己开发仿springioc/aop集成开发框架http://my.oschina.net/cose/blog/73919

json.stringify语法实例讲解http://www.jb51.net/article/29893.htm【其他博文可学习】jetty嵌入式web容器攻略http://www.cnblogs.com/gao241/p/3501578.html

设计模式&&数据结构http://www.blogjava.net/liuguly/category/45964.html

jvm调优总结-xms-xmx-xmn-xsshttp://leilinhai.blog.sohu.com/175599682.htmljava虚拟机原理图解http://blog.csdn.net/column/details/jvm-principle.html借hsdb来探索hotspotvm的运行时数据http://rednaxelafx.iteye.com/blog/1847971

mysqlmysql5.1参考手册之--查询高速缓冲http://blog.chinaunix.net/uid-346158-id-2130929.html一次linux下mysql服务优化http://blog.path8.net/archives/5902.htmlmysql数据库优化总结http://www.cnblogs.com/villion/archive/2009/07/23/1893765.html访问执行速度过慢分析之mysql慢语句分析http://www.itzhai.com/access-speed-too-slow-mysql-statement-analysis.html

java线程池线程池数据结构与线程构造方法http://www.blogjava.net/xylz/archive/2011/01/18/343183.html[java基础要义]hashmap的设计原理和实现分析http://blog.csdn.net/luanlouis/article/details/41576373

chat&socket.ionode.js和socket.io实现chathttp://www.cnblogs.com/wancy86/archive/2013/04/28/socket-io_chat.htmlhttp://socket.io/get-started/chat/

下一篇: HTTP协议详细总结
相关文章
{{ v.title }}
{{ v.description||(cleanHtml(v.content)).substr(0,100)+'···' }}
你可能感兴趣
推荐阅读 更多>
推荐商标

{{ v.name }}

{{ v.cls }}类

立即购买 联系客服