zoukankan      html  css  js  c++  java
  • 工作五年面试准备

    Java 中的委托、代理

    Java 中的委托是指委托模式,即两个对象处理同一请求,接受请求的对象(A)把请求委托给另一对象(B)处理,一般A会在B处理前后(或者抛出异常),做些其他处理;委托使得我们可以使用组合实现继承。

    静态代理,被代理的类已经确定;动态代理,被代理的类不能确定,由传入的实参确定。委托模式可由 Java 代理实现。

    网友详解:Java代理模式用Java动态代理实现委托模式

    jdk 动态代理依靠接口实现,如果某个类没有实现接口,则不能使用 jdk 动态代理,cglib 动态代理就弥补了这点。(java动态代理(JDK和cglib)

    Tomcat 调优

    1)调大 JVM 堆空间占用内存,较大空间可以减少GC次数,最大可达物理内存80%

    2)解决 JRE 内存泄露,选用较新版本 Tomcat(6.0.26以后)

    3)线程池 maxThreads 设置,当 maxThreads 较大时,如1000,应该采用 Tomcat 集群方式,两个各设置500;

    4)数据库性能调优,Tomcat 在等待数据库查询被执行期间会降低性能,注意关闭数据库连接以及合理管理数据库连接池,如 maxIdle、maxActive、maxWait

    5)设置压缩选项,如文件大于500bytes,采用压缩

    6)启用 Tomcat 原生库(ARP)

    7)其他,Tomcat 定时重启,开启浏览器缓存等

    参考:tomcat调优的几个方面

    事务处理

    1)JDBC事务, 有效范围,单次连接

    2)JTA,分布式、跨数据源事务管理

    3)EJB容器事务

    4)Spring事务处理,常用 tx 标签配置的拦截器 (Spring事务配置的五种方式

    参考:Java事务处理总结java事务处理全解析(系列博客)

    字节流,InputStream/OutputStream,所有文件都以字节存储,不使用缓冲区

    字符流,Reader/Writer,使用缓冲区,(字符只有在内存中形成),文本使用字符流

    字节流 -> 字符流,即 byte[] -> String

    序列化:1)对象字节序列存盘;2)网络传输

    数据库设计原则:
    1、满足第二范式,适量冗余,提高性能与开发效率
    2、字段类型,根据取值范围,优先选择较小类型,例如状态位用enum,是/否用bit,定长取值用char,避免使用varchar,text,blob
    3、其他,1)合理建立索引;2)少用触发器,多用存储过程 等
    数据库设计满足3大因素:1)兼容ACID;2)高可用性;3)可扩展性

    Spring事务传播机制 spring传播特性解惑
    PROPAGATION_REQUIRED,默认;当前存在事务,加入;否则新建事务
    PROPAGATION_REQUIRS_NEW,新建事务(假如当前存在事务,挂起,即与当前事务不在一起)
    PROPAGATION_SUPPORTS,假如处于Spring事务之中,加入;否则使用本地事务(即自动提交)
    PROPAGATION_NOT_SUPPORTED,本地事务;当前存在事务,挂起,后续操作仍然处于事务之中
    PROPAGATION_MANDATORY,必须处于事务之中,否则抛出异常
    PROPAGATION_NEVER,处于事务之中,抛出异常
    PROPAGATION_NESTED,处于事务之中,嵌套运行,(网上观点不同数据源互不影响,个人认为不同连接互不影响,待测);否则新建事务

    SQL Server
    事务隔离级别:
    READ UNCOMITTED,脏读,行级锁定,其他事务不能update
    READ COMMITTED(默认),不可重复读(commit前/后)、修改丢失,行级锁定,其他事务不能update,可以select
    REPEATABLE READ,可能幻读(T-A,select-update;T-B,insert;B inserted没有update),行级锁定,其他事务不能update与select,可以insert/delete
    SNAPSHOT,读取事务启动之前快照(MySQL中没有)
    SERIALIABLE,串行执行,select holdlock,其他事务可以insert/delete,但是不会影响select结果

    事务一致性,事务执行结果使数据库从一个一致性状态变到另一个一致性状态。
    包括写一致性与读一致性;
    写一致性,例如user/dept都要新增成功,保证user有其dept;
    读一致性,不同连接在事务提交前后,read committed

    Java 线程,api:http://www.blogjava.net/syniii/articles/338254.html


    多线程、高并发、线程安全 (保证数据的并发可读性以及保存数据的排他性)
    1、synchronized (以时间换空间)

    2、volatile (不可进行原子性计算)

    3、ThreadLocal (以空间换时间)

    4、悲观锁,事务隔离级别
    5、乐观锁(系统级别限制,如果外系统访问可以通过开放存储过程实现dml,存储过程中实现乐观锁)

    线程通信:内部类、管道、公共接口

    JSF:事件驱动前端框架;Struts2和Spring MVC是请求驱动MCV框架

    跨域访问
    隐患:CSRF(Cross-site request forgery),跨站请求攻击
    防止:防止CSRF,首先需要防止XSS(应答中带有<或者>,办法:不用get,cookie加密等),其次采用隐藏token方式防止CSRF
    js 跨域方案:1)iframe;2)script 脚本,jsonp callback采用此方案;3)后台转发,结果显示

    OSGi,服务规范,构建动态化、模块化的Java系统
    分为三层:
    Module Layer —— 模块层 主要涉及包及共享的代码
    Lifecycle Layer —— 生命周期层 主要涉及 Bundle 的运行时生命周期管理
    Service Layer —— 服务层 主要涉及模块之间的交互和通信

    SOA,面向服务架构,以业务驱动IT,更快捷、更灵活、更易于重用

    大数据文件读取方案
    1)内存映射文件
    2)LineNumberReader
    3)RandomAccessReader + 缓冲区
    4)文件流 java.util.Scanner、Apache Commons IO LineIterator

  • 相关阅读:
    POJ 2329 Nearest number
    POJ 2192 Zipper (简单DP)
    POJ 2231 Moo Volume(递推、前缀和)
    数据库增删改查--2017-04-08
    时间戳--2017-04-07
    数据库三大范式---2017-04-07
    数据库主键和外键----数据库基础知识1---2017-04-07
    登录页面(简单版,带遮罩层)---2017-04-06 (与04-05日写的差不多,界面圆滑点)
    第一阶段项目所遇到的问题---2017-04-066
    图片点击轮播(四)高级--2017-04-05
  • 原文地址:https://www.cnblogs.com/zhiqsyr/p/4933771.html
Copyright © 2011-2022 走看看