- 浏览: 25852 次
最新评论
文章列表
最近在看Dubbo源码,dubbo的功能是基于扩展点(Extension)的,如果想要修改哪个模块,可以很方便的进行扩展替换。
这种扩展点就是借鉴的spi的思想,但是dubbo并没有使用jdk原生的serviceLoader,而是自己实现了ExtensionLoader来加载扩展点,支持键值对,更为灵活,遵循的规范基本相同。这是题外话。
什么是SPI?SPI能干什么?这里有篇介绍文章--链接
最初接触到SPI的时候有些困惑,查资料发现很多文章都拿jdbc作为SPI的典型例子。
回忆当初我刚上大学的时候,hibernate、mybatis这类框架还没大火,只能自己写jdbc ...
Redis主要支持的数据类型有5种:String ,Hash ,List ,Set ,和 Sorted Set。
一:String
1.set key value [EX n](过期时间) [NX](key 已存在则不覆盖) 插入数据(key已存在,默认覆盖 ...
在java编程中,经常需要用到同步,而用得最多的也许是synchronized关键字了,下面看看这个关键字的用法。
因为synchronized关键字涉及到锁的概念,所以先来了解一些相关的锁知识。
java的内置锁:每个java对象都可以用做一个实现同步的锁,这些锁成为内置锁。线程进入同步代码块或方法的时候会自动获得该锁,在退出同步代码块或方法时会释放该锁。获得内置锁的唯一途径就是进入这个锁的保护的同步代码块或方法。
java内置锁是一个互斥锁,这就是意味着最多只有一个线程能够获得该锁,当线程A尝试去获得线程B持有的内置锁时,线程A必须等待或者阻塞,知道线程B释放这个锁,如果B线程不释放这 ...
一. 加载
“加载”是“类加载“过程的一个阶段。在这个阶段,JVM以字节流的形式获取.class文件,转化为方法区运行时数据结构,并在方法区生成Class对象(由此可知,Java中并不是所有对象都在堆中分配)。
二. 连接(一个 ...
提到常量池,一般是指运行时常量池,是方法区的一部分。方法区就是通常说的永久代。那么常量池中会存储那些数据呢?
①编译期生成的各种字面量和符号引用
②也有可能将运行期间的常量放入常量池
先看第一种:编译期生成的各种字面量和符号引用,这部分数据经过编译后存在.class文件的‘常量池’中,注意这个所谓的‘常量池’是‘静态常量池’,静态常量池的数据会在类加载后放入运行时常量池。举个例子
测试一
public class ConstantPoolAndStrTest {
String string1 = "Hello";
public ...
启动mongo服务
mongod [--dbpath 数据库路径][--logpath 日志][--config 从配置文件启动][--auth 开启验证][--bind_ip 127.0.0.1 绑定ip(只能用本机连)]
创建用户
[use admin 创建管理员用户]
db.addUser("root","hellomongo")
[db.createUser({user:"root",pwd:"root",roles:["readWrite"]})]
1. 数据库用户角色:re ...
是找实习的面试题,虽然很小的项目,但既然做了就拿出来
一个笔记本 webapp
实现了查看、添加、修改、删除、搜索功能
由maven管理、springMVC、数据库用的mongodb
下载链接:http://git.oschina.net/java-xp/notebook
git repo:https://git.oschina.net/java-xp/notebook.git
可以直接运行test
项目见附件
package com.xxp.aoptest.aspects;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspect ...
一.配置
1.有的项目的pom.xml中没有配置maven远程远程仓库,maven的server.xml中也没有配置。那么项目中的依赖是在哪里下载的呢?
肯定有一个默认的远程仓库,叫做中央仓库,他配置在maven的超级pom中,而所有的maven项目都继承该pom,这个超级pom集成在${M2_HOME}/lib/maven-model-builder-3.0.5.jar/org/apache/maven/model/pom-4.0.0.xml中,打开该文件,可以看到这个:
<repositories>
<repository>
& ...
今天遇到了一个很操蛋的问题 -- 新建了一个tomcat server,在eclipse下将项目部署到该server下,但访问http://localhost:8080/pay/index.jsp报错404,于是苦逼时间开始了:
一.先翻了一下webapps文件夹,发现下面并没有我的pay项目。于是,
1.先将项目从tomcat下移除,关闭tomcat
2.然后打开tomcat配置页面,把server location改为tomcat安装目录,并将deplop path改为tomcat的webapps
3.重新部署,并启动tomcat。一看,webapps下 ...
一.安装
linux 1.redhat:yum install git
2.ubuntu:apt-get install git
windows 下载http://msysgit.github.io/安装,一切默认
设置用户名及邮箱
git config --global(local为仓库级) user.name "your name"
git config --global user.email "youremail@***.com"
二.关联github
获取ssh秘钥:ssh-keygen -t rsa -C " ...
useradd username: 创建用户
passwd username: 给用户设置密码
userdel username: 删除用户
date:查看系统时间
date -s "2015-11-23 11:30:30":设置系统时间
umask 022(权限值): 修改当前用户新建文件的默认权限 ...
自己备忘一下:
1:将抓取到的数据保存到本地后,经常会出现中文乱码的情况。
解决办法:保存数据的时候用字节流去写。
原因:我们知道计算机的基本存储单位是字节,而java中一个字符占两个字节。当用字符流去写文件时,java会将字符流转换为字节流再输出,这里面的转换过程使用的java默认的字符集,因此当默认的编码方式不对时可能会出现乱码。如果用字节流写入就可以手动的设置字符集,从而避免乱码。需要注意的是以后读取该文件的时候也要用相同的字符集。
如输出流FileOutputStream fileOutputStream = new FileOutputStream(file);
...
最近在项目中遇到这样一个问题:有一个javabean包含几十个字段,在对该bean注入数据的过程中又对应的存在几十种情况,比如这样
for(int i=0;i<70;i++){
//每个i值对应一个不同字段的set方法
}
作为超级菜鸟的我当时想到的最直接的解决办法是用switch语句...,但是这样需要case 70种情况,这得写多少冗余代码啊——果断放弃,另寻出路。
于是想到了java有反射机制,想着是否能实现动态调用方法,去查了一下,找到了解决办法,这里是我参考的讲java反射机制的帖子http://blog.csdn.net/justinavril/article/de ...
前些天接手了公司一个网站的维护和优化,考虑到有的动态页面中有太多的数据库操作,所以要将其进行静态化,这也是网站优化升级的一个必经的步骤。
由于是菜鸟刚刚上阵,起初觉得无从下手,于是在ITeye发了一篇求助,通过一些老鸟的帮助再加上我自己的思考,从而确定了解决思路,并且最终成功搞定。下面说一下方案和步骤:
1:封装一个httpclient,并每隔一段时间向服务器发一次请求(当然请求的是需要静态化的动态页面)
2:以流的形式获取响应报文,并将其写到本地文件且命名为"***.html"
3:配置过滤器,将对该动态页面(***.jsp)的请求 ...