工作笔记

org.apache.log4j.NDC 类中所有的方法都是静态的。假设 NDC 日志输出功能被打开,每一次的日志请求,Log4J 组件都会把当前线程的整个 NDC 堆栈内容输出在日志条目中。这样的过程不需要开发人员写过多的代码,程序员只需要在代码中合适的地方通过 push 和 pop 方法将正确的信息放到 NDC 的堆栈中,然后通过修改 Log4J 的配置文件,指定用户标志信息输出的位置和格式,而原来 Java 代码中输出日志的代码不需要任何修改,就能够输出带有用户标志信息的日志
MDC 和 NDC 相似,也可以减少多线程的系统为每个客户单独记录日志的系统开销。它同样是为每个线程建立一个独立的存储空间,开发人员可以根据需要把信息存入其中。不同的是 MDC 使用 Map 的机制来存储信息,信息以 key/value 对的形式存储在 Map 中.
通过为 Web 应用的 Servlet 增加一个 filter 的方法,将用户标志信息在 filter 中压入/弹出 NDC 堆栈,而不需要修改任何原来的 Java 程序中的输出日志的代码,使用起来非常简便。

package is.dsw.base.filter;
import javax.servlet.Filter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.log4j.NDC;
public class Log4jNdcFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {
    // 获得客户的网络地址
    String address = request.getRemoteAddr();
    // 把网络地址放入NDC中. 那么在在layout pattern 中通过使用 %x,就可在每条日之中增加网络地址的信息.
    NDC.push(address);
    //继续处理其他的filter链.
    chain.doFilter(req, res);
     // 从NDC的堆栈中删除网络地址.
    NDC.pop();
    }
}

服务没在管控平台上找到的原因:
1.暴露接口的对应的类没加service注解,service注解使用的是spring框架的
2、sar配置文件中sar.list的包名配错,导致扫描包的时候没找到对应暴露的接口以至于没注册到dubbo的注册中心
3.新框架FcsService注解只能写在继承fcsBaseService类里面,否则服务发布不成功

新建DB版本需首移才可进行脚本移交

less 文件名
shift+j键退到最后

grep -i '判断ok' tm_ff-batchc-008SF16772.out   查找包含某字符的

对于密码防重放,一般重要的是要求密码串一次性有效,对比时间戳是否相同,而不是对比间距。
    1.比如我第一个请求带的时间戳是10000000,服务器接收到之后,对比下与当前时间是不是在合理范围内,比如五分钟(这个可以根据业务场景看,一般一个请求从客户端到服务器不超过多少分钟,考虑网络阻塞情况。)
    2.如果时间在正常范围内,认为这是一个合法请求,将这次的请求时间录入数据库。
    3.当我再次收到请求时,从数据库取出上次请求时间进行对比,如果请求2和请求1的时间是一样的,那说明它是重放的数据包,非法请求。(正常来说,即使用户误点两次,两次请求的时间也是不一样的)

短信发送规则:
一、  触发临时动态密码失败,令牌正处于锁定状态或者临时动态密码认证失败,令牌是锁定状态
一般默认同一个手机号码在同一个策略连续失败5次,令牌锁定30分钟~具体配置和你们申请接入的申请表配置有关~
用户验证错误次数达到一定(默认是5次),默认是锁定30分钟,30分钟后自动解锁,具体看你们策略配置。

成为项目经理
1.进一步完善自己的管理思维体系
2.丰富自己的知识库,传递知识给更多人
3.能够独挡一面完成整个项目任务

1.熟悉现有工作
2.参加PMP培训

1.熟悉公司现有所有产品业务流程,并整理成文档共享
2.参加PMP培训,项目管理能力达到新层次
3.提高沟通交往能力,记录沟通改进计划
4.经验总结,针对每次项目过程中遇到的问题吸取教训总结经验
5.多与同事沟通学习,持续的学习新技术,丰富自己的知识体系


报备问题时说明背景原因及具体情况
项目安排计划不合理,没考虑充分,不应都按照行方的计划来,开始要做好合理的计划安排
测试测的不充分,需要考虑到所有场景
怎么建立影响力
怎么提升自己的管理能力水平
怎么准确描述自己所要表达的
业务分析能力水平


ESB到BSP调用过程:

account调用esb-api,esb-api将消息写到kafa中,esb-consumer从kafa中读取消息并分析去调用esb-proxy哪个请求,然后esb-proxy通过dubbo服务调用bsp

Linux命令:
查看内存:free -h  或free -m
top:统计实时的运行中的程序的资源使用情况
vmstat:显示实时的和平均的统计
netstat -an :查看当前计算机端口使用情况
ps -ef | grep tomcat:查看进程

ps -aux |grep tomcat:查看tomcat的占用情况
netstat -apn | grep 20882:查看20882端口被哪个程序占用
mstcs:远程桌面命令
ps aux:查看当前执行的进程及执行用户
ps -ef|grep QuorumPeerMain:查看zk进程


高亮显示日志:按“/”+刚刚复制的日志编号,回车,在按shift+”:”,输入set+空格+hlsearch,这个时候所有的日志编号都会高亮显示了  用ctrl+F 向下移动光标,ctrl+B向上移动光标
回车后光标会指向第一条查询数据,点击N键会向下继续查询该数据
sftp服务器登录:sftp -oPort=60022 pinganjinrong@124.74.239.215
sftp文件获取下载:get 【文件名】    用该命令之后文件保存到你登陆前所在的那个目录

Oracle导库相关命令,其中文件名大家可以自行修改
--导出
EXP  dba用户/密码@实例名 BUFFER=64000 FILE=你的目录\collection.dmp OWNER=dba用户 rows=y  log=你的目录\实例名_exp.log compress=n

--创建表空间
--create tablespace whtest_SP datafile '你的目录\test_SP.dbf' size 1024m autoextend on next 1024m maxsize unlimited;

----新建用户
create user test1 identified by test1 default tablespace test_SP temporary tablespace temp profile DEFAULT;
grant dba to test1;//管理权限

--导入
imp test1/test1@whtest file=你的目录\whtest.dmp log=C:\Users\pactera-db\Desktop\新建文件夹\DMP\metadata_IMP.log ignore=y full=y;


spring定时任务
startdelay----------调度工厂实例化后经过几秒开始执行调度
repeatInterval------每几秒调度一次
cronExpression------cron表达式,标识每天几点运行一次,支持到指定时间运行一次


指定时刻的日志输出:
 cat *.log | grep 18:18:50 | sort 

修改字符编码
vi /etc/sysconfig/i18n
LANG="en_US"
SYSFONT="latarcyrheb-sun16"

通过跳板机登录远程电脑:
远程登录密令:mstsc
输入ts选择85那台机器用UM账号登录

开发环境调用esb接口从本地127.0.0.1地址进行查找导致返回没有提供者,解决方法:进入对应的组件的tomcat的Bin目录下面的catalina.sh文件中加入如下-Dff.env=dev -Dff.esb.url=172.25.244.64:20882到该文件中去然后重启
JAVA_OPTS="-Xms512m -Xmx512m -Xss1024K -XX:PermSize=64m -XX:MaxPermSize=128m -Dff.env=dev -Dff.esb.url=172.25.244.64:20882"

开发环境编码问题:
修改tomcat bin目录中catalina.sh 的jvm配置 添加如下配置:
-Ddefault.client.encoding=GBK -Dfile.encoding=GBK -Duser.language=Zh


打印GC信息:
在eclipse.ini中加入如下配置
-XX:+PrintGCTimeStamps 
-XX:+PrintGCDetails 
-verbose:gc 
-Xloggc:gc.log 
GC日志说明: 
GC打印时间: [垃圾回收类型回收时间: [收集器名称: 年轻代回收前占用大小->年轻代回收后占用大小(年轻代当前容量), 
年轻代局部GC时JVM暂停处理的时间] 堆空间GC前占用的空间->堆空间GC后占用的空间(堆空间当前容量) 
 ,GC过程中JVM暂停处理的时间]。 
 垃圾回收类型:分为GC和Full GC. 
 GC一般为堆空间某个区发生了垃圾回收, 
Full GC基本都是整个堆空间及持久代发生了垃圾回收,通常优化的目标之一是尽量减少GC和Full GC的频率。 
 收集器名称:一般都为收集器的简称或别名,通过收集器名称基本都能判断出那个区发生了GC。 
DefNew:年轻代(新生代)发生了GC (若为DefNew可知当前JVM年轻代使用的串行收集器) 
ParNew:年轻代(新生代)发生了GC (若为ParNew可知当前JVM年轻代使用了并行收集器) 
Tenured:老年代发生了GC 
 Perm:持久代发生了GC 
在eclipse根目录下的eclipse.ini配置文件中添加以下参数: 
-verbose:gc (开启打印垃圾回收日志) 
-Xloggc:eclipse_gc.log (设置垃圾回收日志打印的文件,文件名称可以自定义) 
-XX:+PrintGCTimeStamps (打印垃圾回收时间信息时的时间格式) 
-XX:+PrintGCDetails (打印垃圾回收详情) 
 添加完以上参数后当启动Eclipse后就能在Eclipse根目录看到一个eclipse_gc.log的gc日志文件 
2、设置eclipse初始堆、非堆内存大小以及年轻代 
-Xms50m –Xmx200m -XX:PermSize=30m -XX:MaxPermSize=60m 
 3、添加JVM监控参数 
-Djava.rmi.server.hostname=127.0.0.1 -Dcom.sun.management.jmxremote.port=6688 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false 



转义符:
也可以将 & 替换成 & amp; 或者 \u0026 或者 \0026 (未测试,可以自己测试下,至少编译不会出错,呵呵) 
这里写图片描述 
这里写图片描述 
4.再出个题: 



select sysdate,add_months(sysdate,12) from dual; --加1年 
select sysdate,add_months(sysdate,1) from dual; --加1月 
select sysdate,to_char(sysdate+7,'yyyy-mm-dd HH24:MI:SS') from dual; --加1星期 
select sysdate,to_char(sysdate+1,'yyyy-mm-dd HH24:MI:SS') from dual; --加1天 
select sysdate,to_char(sysdate+1/24,'yyyy-mm-dd HH24:MI:SS') from dual; --加1小时 
select sysdate,to_char(sysdate+1/24/60,'yyyy-mm-dd HH24:MI:SS') from dual; --加1分钟 
select sysdate,to_char(sysdate+1/24/60/60,'yyyy-mm-dd HH24:MI:SS') from dual; --加1秒


pafa学习笔记

  解决条数限制问题方法:sar/ff-xxxx.properties   添加配置 sar.ibatis.enable=false
  添加sqlMap配置:sar/xxxx.spring.xml        添加配置:

  <bean id="_sar_sqlmap_client"
            class="com.pingan.pafa.pizza.ibatis.PizzaSqlMapClientFactoryBean" lazy-init="true">
            <property name="maxRowCount" value="20000"/>
            <property name="unresolvedConfigLocations" >
                <list>
                   <value>sar:*.ibatis.xml</value>
                   <value>pizza:/sar/xxxx.ibatis.xml</value>
                </list>
            </property>
        </bean>

pafa5-core-5.1.9-beta-20160608183021.jar  
maxUploadSize
文件上传太大,修改上传文件的大小,在pizza-pafa5-admin.properties中修改admin.upload.file.maxByte字段值

exp system/manager@TEST file=d:\d.dmp full=y

zookeeper启动,停止命令:
zkServer.sh start:启动
zkServer.sh stop:停止
jps:查看进程
zkServer.sh status:查看状态
tail -500f zookeeper.out :查看输出
unzip dubbo-admin-2.5.3.war -d ROOT:解压并把文件命名为root


zookeeper集群安装注意点:
1.先创建3个节点:创建3个节点目录,将包每个目录复制一份
2、编辑节点配置文件conf/zoo.cfg,修改下面配置项:
dataDir=/home/wusc/
dataLogDir=/home/wusc/zookeeper/nodezookeeper/node-03/logs03/logs
clientPort=2183-------客户端连接zookeeper服务端的端口号,zookeeper会通过这个端口来监听客户端的请求
3.在data目录下创建myid文件,里面存放每个节点的编号值

private static final Pattern ADDRESS_PATTERN = Pattern.compile("^\\d{1,3}(\\.\\d{1,3}){3}\\:\\d{1,5}$");
  private static final Pattern LOCAL_IP_PATTERN = Pattern.compile("127(\\.\\d{1,3}){3}$");
  private static final Pattern IP_PATTERN = Pattern.compile("\\d{1,3}(\\.\\d{1,3}){3,5}$");
6210985510001215033 134567


--杀进程,解表锁
    select o.owner, o.object_type, o.object_name, s.username,s.status,l.*,
           'alter system kill session '''||s.sid||','||s.serial#||''';' kill_session
      from v$locked_object l, dba_objects o,v$session s 
     where l.object_id = o.object_id
       and l.session_id=s.sid
       --and o.owner = upper('&owner')
       and o.object_name = upper('&object_name');
dubbo文件配置:在com.pingan.pafa.papp.protocol.dubbo下面,对应包pafa5-core-5.1.6-beta-20160420103222.jar
#######注册中心配置
dubbo.registry.address=${pizzaManager}

##服务注册开关,是否向此注册中心注册服务,如果设为false,将只订阅,不注册
#dubbo.registry.register=true
##服务订阅开关,是否向此注册中心订阅服务,如果设为false,将只注册,不订阅
#dubbo.registry.subscribe=true

###使用文件缓存注册中心地址列表及服务提供者列表,应用重启时将基于此文件恢复,注意:两个注册中心不能使用同一文件存储
#dubbo.registry.file=${r"$"}{pafa.log.home}/${pappName}/dubbo/registry-cache.txt
#######监控中心配置
#dubbo.monitor.protocol=registry
#######协议配置
#默认使用dubbo,不建议使用RMI/http/Hessian等其它协议,dubbo最高效
dubbo.protocol.name=dubbo

#指定暴露服务的端口号,不能使用weblogic的端口,是个新开端口
dubbo.protocol.port=50880

#instanceIp
dubbo.protocol.host=${instanceIp}

#为保证最大的兼容性serialization设为java
dubbo.protocol.serialization=java

#用户线程池大小,默认指定为50
dubbo.protocol.threads=50


#######服务公共默认配置,具体参见dubbo相关文档 
##默认消费者调用集群策略:随机
dubbo.service.loadbalance=roundrobin

##默认消费者调用超时时间(10秒)
dubbo.service.timeout=10000

##远程服务调用重试次数,不包括第一次调用,不需要重试请设为0
##为防止重复请求,建议设为0,此属性与超时时间密切相关
dubbo.service.retries=0

#启动时检查提供者是否有提供者,true报错,false忽略
dubbo.reference.check=false

papp文件的属性:
papp.sar.list";
papp.protocols";
papp.esa.http.export.enable";
papp.lib.list";
papp.def.charset";
papp.local.home.dir";
papp.web.enable";
papp.common.filter.enable";
papp.jetty.enable";
papp.dubbo.enable";
papp.web.dispatcher";
papp.resources.suffix";
papp.listen.alteration.enable";
fling.monitor.enable";
papp.status";

sar下的文件的属性
sar.base.package";
//是否支持web请求
sar.web.enable";
//处理web请求的优先级
sar.order";
//是否启用ibatis
sar.ibatis.enable";
//是否启用quartz
sar.quartz.enable";
//是否启用IVY仓库
sar.ivy.enable";
//引用数据源KEY
sar.datasource.key";
//组件包
"sar.lib";
//是否启用DB事务支持
sar.transaction.enable";
sar.name";
sar.def.charset";
sar.def.pafa.ac";
sar.aop.enable";
sar.def.datasource";
sar.ex-lib.list";
sar.dispatcher";
sar.local.priority";
dataSource";
sar.esa.def.dispatcher.enable";
sar.esa.annotation.dispatcher.enable";
_sar_dubbo_pafa_ac";
sar.organisation";
sar.version";


目前框架已支持对返回给前端的错误码及错误信息进行配置转换(抛出异常的方式也可以转换)。
使用方式:
1、升级框架包ff-standard-core到1.5.6或以上
2、在btoam的组件配置文件中进行配置
a.对组件内某个接口生效的配置方式:
接口名.原code=新code,新的错误信息
例如:/work/account/insertReferrer.666666=888888,我的配置信息
b.对整个组件生效的配置方式:
原code=新code,新的错误信息
例如:666666=888888,我的配置信息
补充:需要在ff-btoam.properties配置文件中增加配置项打开开关,默认是关闭的。
ff.msg.transf.enable=true



spring提供了一些标志接口,用来改变BeanFactory中的bean的行为。它们包括InitializingBean和DisposableBean。实现这些接口将会导致BeanFactory调用前一个接口的afterPropertiesSet()方法,调用后一个接口destroy()方法,从而使得bean可以在初始化和析构后做一些特定的动作。

在内部,Spring使用BeanPostProcessors 来处理它能找到的标志接口以及调用适当的方法。如果你需要自定义的特性或者其他的Spring没有提供的生命周期行为,你可以实现自己的 BeanPostProcessor。关于这方面更多的内容可以看这里:第 3.7 节“使用BeanPostprocessors定制bean”。

所有的生命周期的标志接口都在下面叙述。在附录的一节中,你可以找到相应的图,展示了Spring如何管理bean;那些生命周期的特性如何改变你的bean的本质特征以及它们如何被管理。

1. InitializingBean / init-method

实现org.springframework.beans.factory.InitializingBean 接口允许一个bean在它的所有必须的属性被BeanFactory设置后,来执行初始化的工作。InitializingBean接口仅仅制定了一个方法:

    * Invoked by a BeanFactory after it has set all bean properties supplied    * (and satisfied BeanFactoryAware and ApplicationContextAware).    * <p>This method allows the bean instance to perform initialization only    * possible when all bean properties have been set and to throw an    * exception in the event of misconfiguration.    * @throws Exception in the event of misconfiguration (such    * as failure to set an essential property) or if initialization fails.    */    void afterPropertiesSet() throws Exception;

注意:通常InitializingBean接口的使用是能够避免的(而且不鼓励,因为没有必要把代码同Spring耦合起来)。Bean的定义支持指定一个普通的初始化方法。在使用XmlBeanFactory的情况下,可以通过指定init-method属性来完成。举例来说,下面的定义:

<bean id="exampleInitBean" class="examples.ExampleBean" init-method="init"/>public class ExampleBean {    public void init() {        // do some initialization work    }}

同下面的完全一样:

<bean id="exampleInitBean" class="examples.AnotherExampleBean"/>public class AnotherExampleBean implements InitializingBean {    public void afterPropertiesSet() {        // do some initialization work    }}

但却不把代码耦合于Spring。

2. DisposableBean / destroy-method

实现org.springframework.beans.factory.DisposableBean接口允许一个bean,可以在包含它的BeanFactory销毁的时候得到一个回调。DisposableBean也只指定了一个方法:

    /**    * Invoked by a BeanFactory on destruction of a singleton.    * @throws Exception in case of shutdown errors.    * Exceptions will get logged but not rethrown to allow    * other beans to release their resources too.    */    void destroy() throws Exception;

注意:通常DisposableBean接口的使用能够避免的(而且是不鼓励的,因为它不必要地将代码耦合于Spring)。 Bean的定义支持指定一个普通的析构方法。在使用XmlBeanFactory使用的情况下,它是通过 destroy-method属性完成。举例来说,下面的定义:

<bean id="exampleInitBean" class="examples.ExampleBean" destroy-method="destroy"/>public class ExampleBean {    public void cleanup() {        // do some destruction work (like closing connection)    }}

同下面的完全一样:

<bean id="exampleInitBean" class="examples.AnotherExampleBean"/>public class AnotherExampleBean implements DisposableBean {    public void destroy() {        // do some destruction work    }}

但却不把代码耦合于Spring。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值