2022年3月15日星期二

20220315

非常难得,这个时间,可以一个人坐下来无所事事。
而时至今日,老二感冒,媳妇的病,丈母娘不舒服,老大面临小升初,老二各种闹,而我家-送娃-上班-接娃-家-送娃-上班-接娃-家-送娃-上班-接娃-家...
昨天带老二去医院开药,听一老太太叨叨:忙完别人,开始忙自己啦...
呵呵,这是自嘲吗,这是感慨吗
昨天去给媳妇改B超的预约时间,医院门口对向走的老太:怎么好好的,就没了呢。边哭边说。

我该如何安慰媳妇
我该如何带好孩子
我该如何孝敬好父母
我该如何做好工作赚钱然后理所当然4点下班


2020年8月20日星期四

总结



刘朝春
工作经验:14年
学历:本科
性别:男
年龄:37岁
13426476178  liuspring315@gmail.com   wx:122088025


教育背景
河北科技大学  |  信息管理与信息系统  |  学士


工作经历  
首都信息股份有限公司  | 二级部门经理
2012.07 - 至今        
在首信2012-07至今,参加了北京市考务系统的建设和运维,该系统包括资格考试、委托考试、职称评审、公务员考试、职业鉴定。开发了局公共服务平台、积分系统等。

负责10人开发团队,协调任务分工、解决技术难题。
本着"铁打的营盘流水的兵",人员互作备份,尽可能减少人员流动带来的风险
建立部门知识库系统,已运行7年,积累了大量经验。
与需求、测试、质量组协调工作进度和各种矛盾
想方设法解决工作中遇到的各种技术难题,被同事爱称"大神"
牵头技术更新,参加公司EA项目建设。
始终怀着一个热爱技术的心,积极拥抱新技术
先后经历了 jsp+struts 到 springmvc+freemarker 到 springboot+thymeleaf 到 springboot + zuul + angluar、从普通web项目 到 maven 到 gradle 到 jenkins 自动构建、从纯人工运维 到 自动预警和日志收集
先后实现了通用综合统计报表系统、动态报表填报系统、动态表单、单点登陆、angluar前端
负责100多个线上应用的运维。
负责与各个友商业务对接工作。



首都信息股份有限公司  |  java开发工程师
2007.03 - 2012.07        
在首信2007-03至2012-07期间,参加了如下项目的开发工作:
北京市人事局公务员综合信息系统、
北京市人事局引进人才综合评价系统、
北京市财政局网上审批及监察数据自动上报平台、
北京市人事局工作居住系统、
北京市人事局人才引进系统等。
使用的开发语言为java,使用开源框架struts、hibernate、dwr、Jquery、spring、gwt、gxt、润乾、oracle。


项目经历
2019年12月—2020年10月 人保局项目迁云
梳理了现有100多个项目,规划迁云方案,由于部署环境变化,每个项目需要调整配置:
    由于合作公司的接口变化,配合调整了所有项目中的安全接口、用户登录接口、加解密接口、数据库访问接口。
    部署容器由weblogic改成了tomcat
    探索实现了数据库访问配置的加密并更换了连接池
    探索配置了可以查看各个项目健康状况的监控系统
    调整了各个项目的字符集
    对接了新的二维码登录
以上均编写了教程文档,方便开发人员按照步骤进行修改,减少处所的可能,该调整均已改造完成,本地通过测试,现正在上云,预计9月底完成具备云上测试条件。
2019年5月—2019年12月 北京市事业单位工资总额管理项目
北京市人力资源和社会保障局事业单位工资福利处负责北京市事业单位工资政策的制定、组织和实施。原绩效工资总额申报系统多年使用户,原系统不能满足业务要求,希望改进原事业单位工资总额申报系统的不足之处,特此提出相关业务需求改进。
利用最新的EA3为基础框架,并按照项目需要对其进行了改造,为EA3贡献了redis插件,升级了springboot2.1.4,排除了多项复杂的bug,利用润乾报表实现了动态报表统计
负责搭建开发框架、培训开发人员使用新技术、解决中途遇到的技术难题
2019年2月—2018年7月 北京市积分落户管理信息系统
2019年的积分申报优化为申报、审核汇总、审核结果告知、复核及积分排名、公示及落户办理5个阶段。申请人在申报和审核汇总阶段即可查看审核结果,对有异议的审核结果提起复查并查看复查结果,同时将去年的系统申请结束后的批量后台数据比对优化为系统申请阶段的实时数据比对,实时数据比对采用微服务方式开发,将各个申报指标拆分为独立服务,采用dubbo服务方式集群部署,算分模块弃用Kafka队列,改用线程池方式多线程计算,速度提高10倍
负责搭建微服务开发框架、培训开发人员使用新技术、解决中途遇到的技术难题
2012年3月—2013年3月 考务系统建设
使用了springMVC、hibernate、springJDBC、redis、单点登录、银行直连缴费、支付宝对接缴费、动态表单。
整个考务系统开发了30多个应用,统一搭建了项目框架,springMVC、hibernate、springJDBC、redis、shiro、xfire、jquery.validate、jquery.form、blueprint所有系统采用maven管理,向整个部门推广了maven+svn+hadson,以替代老旧的eclipse项目+vss,我主要参与了其中15个应用开发;其中独自公务服务平台供所有前台系统公用;通过研究开源单点登录系统cas实现了自己的单点;设计开发了动态表单,以适应不同考试采集信息不同的情况,实现了字段名称、类型、长度、校验、字典、级联关系、子集信息的灵活配置
2010年2月 –2010年3月 基于Ext GWT 的决策分析系统
系统采用的GXT提供的MVC模型,底层数据访问是通过调用润乾报表API,将润乾报表运算结果转化为一个List,然后交给GXT在页面展现。
页面功能上,Grid列排序,隐藏显示特定列,树形展开收缩,用open chart封装的统计图表,数据钻取,列标题分组,拖拽形式动态设置列维度、行维度以实现灵活查询,将灵活查询行列维度保存起来供以后随时打开,将结果到处Excel、PDF、Word,动态设置查询条件的显示隐藏,动态的进度条提示、融入GIS系统,实现报表到地图,地图到报表。值得注意的是所有这些功能都是在一个窗口中完成的,实现了菜单、维度定义、报表、统计图功能的融合,不用客户点来点去,一步了然。
2007年9月 - 2007年12月 北京市人事局人才综合计划系统
参与了部分功能的详细设计,考虑到用户体验和开发效率,经过测试,决定采用润乾报表中间件开发报表展现、填报、效验,由于润乾报表提供效验功能的局限性,自主设计替换润乾原有效验,利用DWR框架编写了javascript效验,实现了实时提示用户效验信息,并且可以打印效验信息以供核对,由于有些报表比较庞大,提供了临时保存功能,得到了用户的肯定。



























2019年6月24日星期一

等我闺女高考时,把这句话送给她

高考,无非就是很多人同时做同一份卷子,然后决定去哪一座城市,最终发现,错的每一道题都是为了遇见对的人,而对的每一道题,是为了遇见更好的自己。

2018年11月29日星期四

邮件发博客不能发图片吗

邮件发博客不能发图片吗

独自带闺女的一个周末

不想发朋友圈,是因为不是想别人看到,只是记录一下,所以写在这里


还有一个是2014去韩国的照片
我还能抱着她,没找到

现在已经抱不动了
也羞于让我抱她

她会跟你讲条件
她会问这问那
她会说一路平安,早点回来
她会跟你一样把刚说的话忘光

还没能晓得 就快要老了

这货也很快抱不动了

她长大了
他也很快

无知的索求,羞耻于求救
上一次谁给过拥抱,在什么时候

她突然问,某某同学的爸爸是卖茶叶的吗?
我说,不是,实在茶叶公司上班吧!
她说,挺好啊,不像你,啥用没有
我一时语塞

回忆这些
更不适合听李宗盛

越过山丘,却发现无人等候
太扎心

想得却不可得,你乃人生何
太扎心

一首新写的旧歌,他不等你,已来不及,他等过你,已来不及



2018年5月3日星期四

宝贝长得真快

就要二年级毕业了

我:
昨天你闺女主动写了10页口算
我:
是什么动力呢?
:
无聊?
:
口算简单?
我:
越逼越不写
我:
好深奥
:
我闺女将来肯定是个出色的人
我:
难易 都一样啊
我:
我想想明白,然后改变方式方法

2017年3月15日星期三

2016年5月6日星期五

2016-05-06

下周一小学开始报名了
真快 ,我还记得我上小学呢

2016年4月6日星期三

2016-04-06

好几个人说我肺痨了,咳嗽的厉害,赶紧给我弄块血馒头

天儿一天天热了,都短袖了,继续混吃等死的日子

昨晚闺女舔下来一颗牙,彻底变成豁子牙了,说话漏风~~~~~

2016年3月30日星期三

2016-03-30

暖和了
但还穿着秋裤
那叫自爱

感觉到又要进入救火节奏
刚灭了一把火 总结一下就是,迭代开发修改,就是在埋地雷啊,然后在上线后的日子里,冷不丁爆一个,断胳膊断腿啊

2016年3月27日星期日

2016-03-26

又是一个无聊的周末,11点吃早餐,16点午餐,17点午觉,23点吃晚餐,到现在还没睡

第二颗牙掉了,还给妈妈弄失落了

等我们满嘴漏风时,这就是轮回

2016年3月24日星期四

2016-03-24

生猴宝宝的可真多啊,周围有4个怀孕的了,两男两女 呵呵

今天闺女掉了第一颗牙,都开始换牙了

继续混吃等死

2016年3月16日星期三

2016了都

2014初立志记录日志,结果现在都2016了

天天立,年年立,立完倒,再立

2016
头等大事--闺女要上小学了
头发快白了一半了
还在呆了快10年的公司混吃等死

哄孩子睡觉去

2015年8月24日星期一

简单介绍一下国产框架nutz

介绍一下国产框架nutz
除了高大上的明星,spring hibrnate,在javaeye,csdn经常见到许多号称短小精悍(相比spring)简单的框架
Jfinal,我们现在这个bbs是用Jfinal做的,Jfinal号称在oschina上年度最活跃的项目,这次不介绍。
nutz,跟Jfinal有些类似
都号称自己:轻,简单,强大,快速
选择nutz的原因是:1、它的文档写的很好,很全面,让人一看就明白
2、它那测试覆盖率的图,让人看着踏实
开始一个简单的web项目来说认识nutz
1、添加jar
  1. <dependency>
  2. <groupId>org.nutz</groupId>
  3. <artifactId>nutz</artifactId>
  4. <version>1.b.52</version>
  5. </dependency>
2、nutz没有像spring那样的xml配置文件,它的配置文件都以json格式保存在js文件中(刚开始是有点不适应)
像所有框架一下,首先在web.xml中配置一个入口,一个过滤器,用来加载nutz
  1. <filter>
  2. <filter-name>nutz</filter-name>
  3. <filter-class>com.capinfo.zlzy.examapp.mvc.ExamappNutFilter</filter-class>
  4. <init-param>
  5. <param-name>modules</param-name>
  6. <param-value>com.capinfo.zlzy.examapp.MainModule</param-value>
  7. </init-param>
  8. </filter>
MainModule就像这样,用来指定配置文件,要扫描的包,事物拦截器,统一的错误页面,入口类,默认视图
其中MainSetup中有个init方法,用来初始化一些数据,比如可以像hibernate那样根据pojo初始化数据库表
  1. Daos.createTablesInPackage(dao, "com.capinfo.zlzy.examapp", false);
根据制定的sql文件初始化数据
  1. FileSqlManager fm = new FileSqlManager("init_system_mysql.sql");
  1. @SetupBy(value=MainSetup.class)
  2. @Modules(scanPackage=true)
  3. //ComboIocProvider的args参数, 星号开头的是类名或内置缩写,剩余的是各加载器的参数
  4. // *js 是JsonIocLoader,负责加载js/json结尾的ioc配置文件
  5. // *anno 是AnnotationIocLoader,负责处理注解式Ioc, 例如@IocBean
  6. //*tx 是TransIocLoader,负责加载内置的事务拦截器定义, 1.b.52开始自带
  7. @IocBy(type=ComboIocProvider.class, args={"*js", "ioc/",
  8. "*anno", "com.capinfo.zlzy.examapp",
  9. "*tx"})
  10. @ChainBy(args="mvc/examapp-mvc-chain.js")
  11. @Ok("json:full")
  12. @Fail("jsp:views.error.500")
  13. public class MainModule {
  14. }
3、初始化工作做好后,现在从DAO开始
为Dao配置数据源,新建一个dao.js放在resource下
  1. var ioc = {
  2. dataSource : {
  3. type : "com.alibaba.druid.pool.DruidDataSource",
  4. events : {
  5. create : "init",
  6. depose : 'close'
  7. },
  8. fields : {
  9. url : "jdbc:mysql://127.0.0.1:3306/test",
  10. username : "root",
  11. password : "root",
  12. testWhileIdle : true,
  13. validationQuery : "select 1" ,
  14. maxActive : 100
  15. }
  16. },
  17. dao : {
  18. type : "org.nutz.dao.impl.NutDao",
  19. args : [{refer:"dataSource"}]
  20. }
  21. };
建立pojo类,跟hibernate一样,基于注解配置表名,字段名,字段长度
  1. @Table("t_acct_user")
  2. public class UserGeneralInfo {
  3. /**
  4. * 会员标识
  5. */
  6. @Id
  7. @Column("id")
  8. private Integer id;
  9. /**
  10. * 用户名
  11. */
  12. @Column("login_name")
  13. private String loginName;
  14. /**
  15. * 密码
  16. */
  17. @Column("password")
  18. @ColDefine(width=128)
  19. private String password;
  20. ...................................
OK,这样,在项目启动时就会在数据库创建这个t_acct_user表
4、现在可以写Action了,跟springmvc很像,只是人家叫Module,管它Action,Controller,Module 就是个类名儿
  1. //就像@RequestMapping,制定url前缀
  2. @At("/manager")
  3. @IocBean // 声明为Ioc容器中的一个Bean 就像 @Controller
  4. public class UserModule {
  5. //注入service
  6. @Inject
  7. protected UserService userService;
  8. //就像@RequestMapping,制定url前缀
  9. @At({"/user"})
  10. //执行GET方式
  11. @GET
  12. //制定方法返回后,访问的页面,含义是返回jsp视图,路径是views/user.jsp
  13. @Ok("jsp:views.user")
  14. public void main() {
  15. }
  16. /**
  17. * 修改密码
  18. * @param oldpassword
  19. * @param password
  20. * @param password2
  21. * @param me
  22. * @return
  23. */
  24. //就像@RequestMapping,制定url前缀,未指定name,取方法名
  25. //方法返回值可以是任意类型,nutz会将返回值放在一个key为obj的map中,就像model.addAttribute("obj",Object);
  26. //@Param标识从页面传过来的值,这个注解不写也可以
  27. //@Attr("me")UserGeneralInfo me 是去登录用户的session
  28. //未指定@Ok,默认是返回json视图(MainModule中指定的)
  29. @At
  30. public Object updatepwd(@Param("oldpassword")String oldpassword, @Param("password")String password,@Param("password2")String password2,
  31. @Attr("me")UserGeneralInfo me) {
  32. if (Strings.isBlank(password) || password.length() < 6)
  33. return new NutMap().setv("ok", false).setv("msg", "密码不符合要求");
  34. if (!password.equals(password2))
  35. return new NutMap().setv("ok", false).setv("msg", "两次密码输入不一致");
  36. if(!(new Sha256Hash(oldpassword, me.getSalt()).toHex().equals(me.getPassword())))
  37. return new NutMap().setv("ok", false).setv("msg", "旧密码输入不正确");
  38. userService.updatePassword(me.getId(), password);
  39. return new NutMap().setv("ok", true);
  40. }
  41. }
5、这样配个页面,就可以实现修改密码功能了
用它确认减少了工作量
1、没有复杂的xml配置文件
2、mvc像springmvc一样好用
3、dao有很多便捷的方法:
比如:
1、取PersonInfo一条记录,只查询制定的字段,sql会执行select id,usedTime from person_info where id = ?

PersonInfo personInfo = Daos.ext(dao, FieldFilter.create(PersonInfo.class, "^id|usedTime")).fetch(PersonInfo.class,id);

2、只更新制定的字段,sql会执行update person_info set usedTime = ? where id = ?

Daos.ext(dao, FieldFilter.create(PersonInfo.class, "usedTime")).update(personInfo);

3、按条件查询并排序,sql会执行select * from person_info where person_id = ? order by q_id asc;

PersonInfo personInfoList = dao.query(PersonInfo.class,
Cnd.NEW().where("person_id","=",me.getId())

.orderBy("q_id","asc"));
6、其它,像集成log4j,集成shiro,集成redis,官方都有手把手说明,感兴趣的同学可以去看看
用它的确可以事半功倍的快速建立一个项目并实现功能