
Web后端
邓志国77
写越多代码,越觉得自己不会的东西太多。
展开
-
用AOP自动管理Session数据
在互联网应用开发中,由于涉及到分布式运算,一般来说都是不使用容器默认的Session管理的,如Tomcat。因为这些容器的Session管理,默认是基于单机的(Tomcat可以配置为用Memcache管理Session,这里不谈)。这种情况下,我们一般用Redis之类的高速缓存来保存Session,然后把SessionId通过Cookie下发到浏览器。那么在编程的时候,大量方法需要读取Sess原创 2016-11-29 09:19:16 · 1286 阅读 · 0 评论 -
Spring内部方法性能监控器
想要一个能监控Spring项目内部方法的监控器,看看调用次数,最大最小时间,平均时间等一些数据,数据5分钟统计一次就可以。找了一圈没找到合适的,就自己撸了一个。原理使用者在外面用AOP拦截需要监控的方法。我是使用一个自定义的注解作为拦截条件。使用Around方式声明AOP,并在拦截中调用Monitor的方法。@Aspect@Componentpublic class Performance原创 2016-12-27 16:13:22 · 2323 阅读 · 0 评论 -
Java Stream的性能问题
有人做了个实验,通过比较Java Stream和For循环的性能,得出结论说Stream的性能是For循环的1/10不到,性能低下,要警惕。我没有重复实验,这里假设他得到的数据没错。他的实验是循环了几百万次后,差了几个毫秒。在循环中几乎没有做什么耗时业务,就是简单的一次加法运算。我们假设循环本身耗时是A,业务耗时是B,那么在B很小的时候,A之间性能差异体现就看起来比较大。但实际业务中,B耗时占大多数原创 2016-12-26 11:41:31 · 1987 阅读 · 1 评论 -
用Nginx作为微服务核心
Spring下面提供了完整的微服务核心Enureka、zuul,Herix,从服务注册、发现、路由、断路都有。缺点是都是Java平台的,但大型系统又往往不是单一技术平台,除了netfix这样的。(是否可以为单一技术平台这里不讨论)。Nginx是最流行的http反向代理,如果作为微服务组件有什么优势劣势呢?优势本身就是个路由器的功能可以通过规则把功能路由到不同模块高性能,和语言无关有一定断路器原创 2016-12-26 11:34:11 · 8461 阅读 · 0 评论 -
Spring服务发现、动态路由、断路器
服务发现服务发现是Eureka的服务器,引入这个服务,在Application上加入 @EnableEurekaServer即可,无需任何其他操作。每个服务配置一个application name,方便区分。多个可以构建成集群,相互注册。spring: application: name: eureka1-server profiles: firstserver: po原创 2016-12-24 12:39:05 · 2173 阅读 · 0 评论 -
一个Java无锁的高性能对象Buffer
最近有个小功能,需求是多线程写,单线程读。 考虑采用AtomLong作为写的指针,用一个2的N次方长度的数组作为Buffer的存储,超出后自动循环,不扩容。 读由于是单线程,采用普通long作为指针即可。 代码如下: private T[] buffer; private int remMask; private long readPointer=0; priva原创 2016-12-15 10:04:53 · 446 阅读 · 0 评论 -
在spring中通过Profile配置不同环境下log配置
一般我们在开发的时候,希望log打到控制台上,而在发布的时候,希望打到文件里面。在spring里面可以通过profile进行切换。在application.yml里面,每个profile增加logging: config: classpath:log-dev.xml指向不同的配置文件,在配置文件里面加载日志配置如:原创 2016-12-07 10:58:13 · 2913 阅读 · 0 评论 -
Spring boot配置Junit
加入依赖包:spring-boot-starter-test在Junit类加上@RunWith(SpringJUnit4ClassRunner.class)@SpringBootTest(classes = {Application.class})Application.class是你系统定义的启动Application原创 2016-11-24 12:34:41 · 2484 阅读 · 0 评论 -
对Spring 的RestTemplate进行包装
Spring的RestTemplate及大地简化了REST Client的开发,但每次还要编写大量的模板代码,代码不够简洁。我对他进行了一次包装,采用接口来声明REST接口,使用Annotation对interface的方法进行标注。如下声明一个REST接口//接口必须继承BaseRestClient,提供了一个setUrl的基本方法。public interface ITestRest exte原创 2016-12-14 17:20:01 · 1911 阅读 · 0 评论 -
Java高并发框架Quasar
Java在高并发场景下相对Go和Erlang等语言来说具有较大劣势,原因就是Java几乎只有线程池一条路好走。假设有个场景,一个业务需要Http从第三方获取数据,平均获取时间是500ms,如果用线程池解决,假设线程最多是500,那么每秒并发最大也就1000,大部分时间在IO等待。继续增加线程,会导致系统CPU切换、内存使用成本迅速上升,最后导致性能无法提高。有一个办法是采用异步网络模型原创 2016-11-30 10:46:49 · 13296 阅读 · 0 评论 -
PHP+Java来写Web应用
PHP是最好的语言,大家都知道。但这个语言有个缺点,就是无状态性。你想在php中hold一个连接池什么的,是做不到的。但php用来做前端页面确实方便,而且说句大不敬的,phper的工资也相对低不是吗?这时候可以用php+java来解决。php解决前端问题,通过RPC(如thrift之类)来调用后端Java写的业务层。php只管调用业务层,拿到处理处理后做前端展示。这样做需要解决一个问题原创 2016-11-17 08:48:58 · 1910 阅读 · 0 评论 -
Java Web项目应当小型化
用Java开发Web项目,随着项目功能的增加,类也越来越多,系统越来越臃肿,内存占用也越来越大,如果用到jsp,jsp文件也越来越多,这带来几点问题。由于GC带来的卡顿。我们知道GC的时候,整个JVM是暂停的。这时候是不能处理任何请求的。表现到用户端,就是突然卡住不动了,这对用户体验有较大影响。permGen space不足。这个是Java的永久代内存,如果动态类(如jsp)过多,很容原创 2016-11-17 08:41:32 · 328 阅读 · 0 评论 -
网站Session(会话)保持的常用手段
Session这个可以说是最常用的, 基本的Web框架都提供。使用很简单,在Java中request.getSession即可获取。基本原理是:在用户访问网页的时候,下发一个Cookie,里面保存了一个SessionID的字符串,用户再次访问的时候,用SessionID到内存中对应的一个Map获取Session数据。这个很明显的缺点就是只能单机使用,因为不同的服务之间Session数据是不共享的,这原创 2017-02-17 10:07:42 · 3677 阅读 · 0 评论