- 浏览: 507265 次
- 性别:
- 来自: 广州
-
最新评论
文章列表
Servlet的多线程和线程安全
Servlet的生命周期
1.Servlet的生命周期有四个阶段:加载并实例化、初始化、请求处理、销毁。
加载并实例化
1.Servlet容器(如:Tomcat)负责加载和实例化Servelt。当Servlet容器启动时,或者在容器检测到需要这个Servlet来响应第一个请求时,创建Servlet实例。
2.当Servlet容器启动后,Servlet容器通过类加载器来加载Servlet类,加载完成后再new一个Servlet对象来完成实例化。
初始化
1.在Servlet实例化之后,容器将调用init()方法,并传递实现ServletConfig接口的 ...
Spring filter的用法
1.Filter技术是servlet 2.3新增加的功能。它能够对Servlet容器的请求和响应对象进行检查和修改。
2.过滤器是JavaEE标准,采用函数回调的方式进行。是在请求进入容器之后,还未进入Servlet之前进行预处理,并且在请求结束返回给前端这之间进行后期处理。
3.Filter本身并不生成请求和响应对象,只是提供过滤功能。
4.Filter能够在Servlet被调用之前检查Request对象,并修改Request Header和Request内容;在Servlet被调用之后检查Response对象,修改Response Header和Respo ...
Javascript函数
定义函数
使用function关键字来定义函数,分为两种形式:
1.声明式函数定义
function add(m,n) {
alert(m+n);
}
这种方式等同于构造一个Function类的实例的方式:
var add = new Function("m", "n", "alert(m+n);");
2.函数表达式
//将一个匿名函数赋值给变量add
var add = function(m, n) {
alert(m + n);
};
add(1, 2);//3
//函数表达 ...
spring kafka 配置详解
使用spring-integration-kafka发送消息
1.Outbound Channel Adapter用来发送消息到Kafka。
2.消息从Spring Integration Channel中发出,一旦配置好这个Channel,就可以利用这个Channel往Kafka发消息。(MessageChannel类)。
1.int:channel是配置Spring Integration Channel, 此channel基于queue。
2.int-kafka:outbound-channel-adapter是outbound-channel- ...
spring properties文件相关
1.properties文件放resources目录下
2.spring容器中最多只能定义一个context:property-placeholder。所以引入多个文件要用正则表达式进行,如:
<context:property-placeholder location="classpath:/*.properties" />
3.使用变量方式
topic="${kafkaConfig.device_report}" //kafkaConfig.properties里的kafkaConfig.d ...
javascript匿名函数与闭包
匿名函数
1.就是没有名字的函数
(function(x, y){
alert(x + y);
})(2, 3);
创建了一个匿名函数(在第一个括号内),第二个括号用于调用该匿名函数,并传入参数。
闭包
1.使用闭包可以大大减少我们的代码量 ...
JavaScript 作用域和作用域链
JavaScript作用域
1.作用域就是变量与函数的可访问范围
2.即作用域控制着变量与函数的可见性和生命周期
变量的作用域有全局作用域和局部作用域两种
全局作用域
1.最外层函数和在最外层函数外面定义的变量拥有全局作用域
2.所有末定义直接赋值的变量自动声明为拥有全局作用域(就是没有var开头就直接赋值了,不管在那里(函数内、外)直接赋值)
3.所有window对象的属性拥有全局作用域,例如window.name、window.location、window.top等
局部作用域
1.局部作用域一般只在固定的代码片段内可访问到,最常见的例如 ...
spring-integration-kafka简单应用
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion> ...
java连接池实现原理
1.连接池管理器负责管理连接。
2.实例化连接池时就创建好相关的连接,并放入连接池。
3.应用使用连接就直接从连接池中得到一个连接,用完就归还给连接池。
4.连接断开后,由连接池管理器进行新连接的创建。
5.连接断开必然会出然异常的发生。
连接池的目的:
1.减少应用每次使用时再进行连接的时间(建立连接是需要时间的(TCP)),提高效率。
连接是通过阻塞队列的方式进行存放的,一个存放空闲的连接,另一个存放使用着的连接
阻塞队列的实现是通过wait/notify方式实现的
锁的阻塞实现是通过LockSupport来实现的
参考原文:http://www. ...
Java 线程池工作原理
背景和目的:
1.假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在线程中执行任务的时间,T3 销毁线程时间。
如果:T1 + T3 远大于 T2,则可以采用线程池,以提高服务器性能。
2.如果每个任 ...
java ReentrantLock应用
ReentrantLock可重入锁
1.使用ReentrantLock接口要比使用synchronized关键字效率高一些
不公平锁与公平锁的区别:
private ReentrantLock lock = new ReentrantLock(); //参数默认false,不公平锁
private ReentrantLock lock = new ReentrantLock(true); //公平锁
1.公平情况下,操作会排一个队按顺序执行,来保证执行顺序。(会消耗更多的时间来排队)
2.不公平情况下,是无序状态允许插队,jvm会自动计算如何处 ...
Javascript执行步骤与顺序
1.JavaScript是单线程
执行步骤:
step 1. 读入第一个代码块(以<script>指令串</script>)。
step 2. 做语法分析,有错则报语法错误(比如括号不匹配等),并跳转到step5。
step 3. 对var变量和function定义做“预编译处理”(永远不会报错的,因为只解析正确的声明)。
step 4. 执行代码段,有错则报错(比如变量未定义)。
step 5. 如果还有下一个代码段,则读入下一个代码段,重复step2。
step6. 结束。
执行原理:
(1)所有任务都在主线程 ...
kafka java原生简单应用
KafkaTestMain.java
package com;
public class KafkaTestMain extends Thread{
private static String topic = "test-xing";
public static void main(String[] args) {
new KafkaConsumer(topic).start();// 消费者
new KafkaProducer(topic).start();// 生 ...
开闭原则(OCP)
1.开闭原则(Open Closed Principle)是Java世界里最基础的设计原则,它指导我们如何建立一个稳定的、灵活的系统。
2.对扩展开放,对修改关闭,
开
指的是可以在源代码的基础上进行扩展,比如继承,接口,抽象 ...
悲观锁和乐观锁
悲观锁
悲观锁(Pessimistic Lock), 顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,
这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制,比如行锁,表锁等,读锁,
写锁等,都是在做操作之前先上锁。
乐观锁
乐观锁(Optimistic Lock), 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候
会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。乐观锁适用于多读的应用类型,这样可以提高吞吐量,
像数据库如果提供类 ...