实习生一年工作经验和技术总结 ?java实习总结

java实习总结(实习生一年工作经验和技术总结)
4.2 Spring IOC
4.1.1 Spring bean
1.bean注入 注解方式方便易读,引用第三方(数据库连接,数据库连接池,JedisPool等)采用配置文件方式 。
2. bean作用域:Singleton,prototype,request,session,global session
3.bean生命周期:如下图所示

实习生一年工作经验和技术总结 ?java实习总结

文章插图
4.3 Spring AOP
基本概念:关注点、切面Aspect、切入点pointcut、连接点joinpoint、通知advice、织入weave、引入introduction 。
Spring AOP支持5中类型通知,分别是MethodBeforeAdvice、AfterReturningAdvice、ThrowsAdvice、MethodInterceptor、IntroductionInterceptor(吐槽一下名字太长)
实现方式如下:
1.基于代理的AOP
2.基于@Aspect注解驱动的切面 。(强烈推荐:可读性好 , 易维护,易扩展,开发快)
3.纯POJO切面 。
4.注入式Aspect切面 。
4.4 Srping事务
4.4.1 事务传播
概念:某些操作需要保证原子性,如果中间出错 , 需要事务回滚 。如果某个事务回滚,那么调用该事务的方法中的事务的作出如何的动作,就是事务传播 。
短时间内写不清楚 , 建议访问
http://www.cnblogs.com/yangy608/archive/2010/12/15/1907065.html 查看 。
事务传播属性:
1. PROPAGATION_REQUIRED–支持当前事务,如果当前没有事务 , 就新建一个事务 。这是最常见的选择 。
2. PROPAGATION_SUPPORTS–支持当前事务,如果当前没有事务,就以非事务方式执行 。
3. PROPAGATION_MANDATORY–支持当前事务,如果当前没有事务,就抛出异常 。
4. PROPAGATION_REQUIRES_NEW–新建事务,如果当前存在事务,把当前事务挂起 。
5. PROPAGATION_NOT_SUPPORTED–以非事务方式执行操作,如果当前存在事务,就把当前事务挂起 。
6. PROPAGATION_NEVER–以非事务方式执行,如果当前存在事务,则抛出异常 。
【实习生一年工作经验和技术总结 ?java实习总结】事务隔离级别:
1. ISOLATION_DEFAULT: 这是一个
PlatfromTransactionManager默认的隔离级别 , 使用数据库默认的事务隔离级别.另外四个与JDBC的隔离级别相对应
2.
ISOLATION_READ_UNCOMMITTED: 这是事务最低的隔离级别 , 充许令外一个事务可以看到这个事务未提交的数据 。这种隔离级别会产生脏读,不可重复读和幻像读 。
3. ISOLATION_READ_COMMITTED: 保证一个事务修改的数据提交后才能被另外一个事务读取 。另外一个事务不能读取该事务未提交的数据
4. ISOLATION_REPEATABLE_READ: 这种事务隔离级别可以防止脏读,不可重复读 。但是可能出现幻像读 。它除了保证一个事务不能读取另一个事务未提交的数据外,还保证了避免下面的情况产生(不可重复读) 。
5. ISOLATION_SERIALIZABLE 这是花费最高代价但是最可靠的事务隔离级别 。事务被处理为顺序执行 。除了防止脏读,不可重复读外,还避免了幻像读 。
4.5 其他Spring 技术栈
spring boot 轻量级启动框架
spring security 用户权限管理,根据角色和用户,实现UserDetailsService , 进行自定义权限管理 。
spring task 代码级定时任务,注解方式,使用起来非常方便 。需要注意的是,如果某次定时任务出了异常而没有进行处理,会导致接下来定时任务失效 。如果各个任务相互独立,可以简单用try , catch包围(之前就吃过这方面的亏) 。
spring data 注解方式定义实体,属性等
spring mvc 简单明了的mvc框架 。url传值、数组传值、对象传值、对象数组等传值类型,上传/下载文件类型需要注意 。
spring restful 注意命名,对命名要求很严格 。
spring shell 命令行方式执行命令,救火、导入导出数据等用起来非常方便、制作报表 。
5. Web基础
5.1 web容器启动
1.web.xml加载顺序: listener -> filter -> servlet
2.webt容器启动过程,java新手很怕配置文件 , 理解完这些有助于熟悉配置文件
http://blog.csdn.net/u014431852/article/details/47042895
5.2 Servlet、Interceptor、Listener、Filter
Servlet 接收请求返回响应,最原始的web业务处理类 。
Interceptor 拦截器,可以实现HandlerInterceptor接口自定义拦截器,在日志记录、权限检查、性能监控、通用行为等场景使用,本质是AOP 。
Listener 监听器 常用于统计在线人数等纵向功能 。
Filter 过滤器 在请求接口处理业务之前改变requset,在业务处理之后响应用户之前改变response 。如果某些数据不加密,很容易用抓包工具加filter作弊 。
5.3 web项目结构
5.3.1 mvn结构
熟练掌握几种常见的mvn项目结构,mvn可以自动生成,这里不再详述 。
5.3.2 mvn包管理
1.版本号尽量几种在一个文件中便于管理 。
2.spring milestone包解决spring包冲突问题 。
3.mvn dependency:tree命令分析所有包依赖,对于冲突的在pom文件中 包围起来
5.3.3 版本控制
1.git、svn等
2.代码冲突解决方案
3.分支管理 。
对于某个稳定版本上线后,如果在此基础上开发新功能,一定要新建分支,在新分支上提交代码,最后在新版发布时合并分支 。修改运营环境bug切换到主分支进行修改
5.4 Http请求
5.4.1 请求方法
post、get、put、head、delete、copy、move、connect、link、patch,最常用的是前4、5个 。
5.4.2 请求头,状态码
常用的请求头有Accept(下载文件会特殊使用)、Accept-Charset(设置utf-8字符集)、Content-Type(json等配置)等
常用的响应头有Content-Type、Content-Type、Content-Length等 , 偏前端,不再详述 。
6. 系统架构
接触的不是特别多 , 目前用到的只是服务器主从备份 。Nginx反向代理进行配置 。
多个项目nginx配置
Spring Mvc 用json数据进行交互,配置json转换的servlet 。
封装返回值
自定义RunEnvironmentException(状态码,原因),覆盖原有Exception,切面ExceptionHandler抓取Exception并封装到返回值中(前后端松耦合)
令人头疼的用户重复(连续快速点击)提交问题,前端限制治标不治本;后端用sessonid在切面上实现,又需要前端存储 , 对所有请求数据加sessionId 。最后用jedis中存储,用接口名+用户名当做key,根据不同的接口对不同的key可以单独设置时间,不仅保证了重复提交问题,也避免了恶意请求问题 , 同时还能自定义请求间隔 。(期初担心redis缓存读写时间延误导致限制失效,后来发现多虑了 , 对一般的小系统来说,经性能测试,发现即使请求频率再提高100被也不会导致限制失效)
testNg单元测试、性能测试 , 覆盖测试 。
切面管理日期、权限 。缓存等 。
7. Nosql
1.Redis的java库Jedis 。
Jedispool配置 。
项目中用到的有任务队列、缓存 。
2. neo4j图数据库
处理社交、推荐
8. 服务端
linux操作系统熟悉以centos为例:
常用简单命令:ssh、vim、scp、ps、gerp、sed、awk、cat、tail,df、top,shell、chmod、sh、tar、find、wc、ln、|
目录结构明细:/etc/、~/、/usr/、/dev/、/home/、/etc/init.d/
服务端:jdk、tomcat、nginx、mysql、jedis、neo4j启动与配置(特别说明的是该死的防火墙,nginx启动后一直访问不了 , 查找一下午查不到原因,最后发现是防火墙问题)
监控服务器状态(cpu , 磁盘,内存),定位pid , 日志查看
nginx负载均衡、反向代理、配置
自动化部署脚本
简单shell脚本书写,避免大量人力劳动 。
监控系统,代码抛fatal异常自动发邮件,系统指标持续偏高自动发邮件 。
9. 数据库相关
10. 第三方接口对接
10.1 支付接口
微信支付坑比较多,用将近两周时间才把微信支付所有完成 。需要在微信后台配置的地方太多 。
而支付宝支付模块只用了2天时间就搞定了 。
10.2 推送接口
为用户定义tag、定义alias,注意当数据更新时需要同步更新tag、更新alias 。如果没采用异步实现(用户体验就是好卡?。?
10.3 云存储
大量文件上传云端(七牛云),注意创建bucket
10.4 短信验证
很简单的第三方接口,引入依赖,直接调用即可 。需要在第三方后台设置模板等 , 注意限定用户访问次数 。
10.5 邮件
很简单小功能,工具类 。
实习生一年工作经验和技术总结 ?java实习总结

文章插图