全部
技术
PHP
MySQL
前端
Linux
JAVA
工具
纪念日计算器
邮记星
个人记账
笔记侠
历史上的今天
生日密码
生日书
生日密码
生日花语
博古通今
三十六计
鬼谷子
笑林广记
本草纲目
山海经
唐诗宋词
宋词300首
唐诗300首
退出
登录
注册
编辑文章
选择分类
PHP
MySQL
前端
Linux
Java
工具
选择专栏
设计模式
java基础
Angular学习
Java面试题
描述:
封面图上传 :
+
点击上传图片
### XMLHttpRequest 是什么 XMLHttpRequest 对象用于在后台与服务器交换数据。 XMLHttpRequest 对象是**开发者的梦想**,因为您能够: - 在不重新加载页面的情况下更新网页 - 在页面已加载后从服务器请求数据 - 在页面已加载后从服务器接收数据 - 在后台向服务器发送数据 `ajax`最核心的依赖是浏览器提供的`XMLHttpRequest`对象。 所以我用一句话来总结两者的关系:我们使用`XMLHttpRequest`对象来发送一个`Ajax`请求 ### java序列化 Serializable接口是一个标记接口,不用实现任何方法。一旦实现了此接口,该类的对象就是可序列化的。 - **序列化:将对象写入到IO流中** - **反序列化:从IO流中恢复对象** - **意义:序列化机制允许将实现序列化的Java对象转换位字节序列,这些字节序列可以保存在磁盘上,或通过网络传输,以达到以后恢复成原来的对象。序列化机制使得对象可以脱离程序的运行而独立存在。** - **使用场景:所有可在网络上传输的对象都必须是可序列化的,**比如RMI(remote method invoke,即远程方法调用),传入的参数或返回的对象都是可序列化的,否则会出错;**所有需要保存到磁盘的java对象都必须是可序列化的。通常建议:程序创建的每个JavaBean类都实现Serializeable接口。** **参考文章:**[[java序列化,看这篇就够了](https://www.cnblogs.com/9dragon/p/10901448.html)](https://www.cnblogs.com/9dragon/p/10901448.html) ### 解析下Java @Transactional 事务如何控制的 在应用系统调用声明@Transactional 的目标方法时,Spring Framework 默认使用 AOP 代理,在代码运行时生成一个代理对象,根据@Transactional 的属性配置信息,这个代理对象决定该声明@Transactional 的目标方法是否由拦截器 TransactionInterceptor 来使用拦截,在 TransactionInterceptor 拦截时,会在在目标方法开始执行之前创建并加入事务,并执行目标方法的逻辑, 最后根据执行情况是否出现异常,利用抽象事务管理器(图 2 有相关介绍)AbstractPlatformTransactionManager 操作数据源 DataSource 提交或回滚事务. 默认情况下,如果在事务中抛出了未检查异常(继承自 RuntimeException 的异常)或者 Error,则 Spring 将回滚事务;除此之外,Spring 不会回滚事务。 ### @Transactional 只能应用到 public 方法才有效 只有@Transactional 注解应用到 public 方法,才能进行事务管理。这是因为在使用 Spring AOP 代理时,Spring 在调用在图 1 中的 TransactionInterceptor 在目标方法执行前后进行拦截之前,DynamicAdvisedInterceptor(CglibAopProxy 的内部类)的的 intercept 方法或 JdkDynamicAopProxy 的 invoke 方法会间接调用 AbstractFallbackTransactionAttributeSource(Spring 通过这个类获取表 1. @Transactional 注解的事务属性配置属性信息)的 computeTransactionAttribute 方法。 ```java protected TransactionAttribute computeTransactionAttribute(Method method,Class targetClass) {// Don't allow no-public methods as required. if (allowPublicMethodsOnly() && !Modifier.isPublic(method.getModifiers())) { return null; } ``` 这个方法会检查目标方法的修饰符是不是 public,若不是 public,就不会获取@Transactional 的属性配置信息,最终会造成不会用 TransactionInterceptor 来拦截该目标方法进行事务管理。 **参考:**[透彻的掌握 Spring 中@transactional 的使用](https://www.ibm.com/developerworks/cn/java/j-master-spring-transactional-use/index.html) ### Java 之访问控制权限(public,private,protected,default)作用域 | 作用域 | 当前类 | 同一package | 子孙类 | 其他package | | --------- | ------ | ----------- | ------ | ----------- | | public | √ | √ | √ | √ | | protected | √ | √ | √ | × | | friendly | √ | √ | × | × | | private | √ | × | × | × | 不写时默认为friendly ,也即是“包访问权限”。 ### UML是什么 UML建模技术是一种建模语言,指用模型元素来组建整个系统的模型,模型元素包括系统中的类、类和类之间的关联、类的实例相互配合实现系统的动态行为等。 ### 数据库隔离级别 **READ UNCOMMITED (未提交读)** 在READ UNCOMMITED 级别,事务中的修改,即使没有提交,对其他事务也是可见的,事务可以读取未提交的数据,既**脏读(Dirty Read)**的数据,**脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是脏数据,依据脏数据所做的操作可能是不正确的。**这个级别会导致很多问题,从性能上说READ UNCOMMITED 不会比其他的级别好太多,但缺乏其他级别的好多好处,除非有非常必要的理由,在实际的应用中一般很少使用READ UNCOMMITED. **READ COMMITED (提交读)** 大多数数据库系统的默认隔离级别都是READ COMMITED (但是MYSQL不是)。READ COMMITED 满足前面提到的隔离性的简单定义:一个事务开始时,只能看到已经提交的事务所做的修改。换句话说,一个事务从开始到提交之前,所做的任何修改对其他事务都 是不可见的。这个级别有时候也叫做**不可重复读(nonerepeatable read)**,因为两次执行同样的查询,可能会得到不一样的结果。 **REPEATABLE READ (可重复读)** REPEATABLE READ (可重复读) 解决了脏读问题。该级别保证了在同一个事务中多次读取同样的记录的结果是一致的。但是,理论上,可重复读隔离级别还是无法解决另一个幻读 (PhantomRead)的问题。**所谓幻读,指的是当某个事务在读取某个范围内的记录时,另外一个事务又在该范围内插入了新的记录,当之前的事务再次读取该范围的记录时,会产生幻行(Phantom Row)**。InnoDB和XtraDB 存储引擎通过多版并发控制(MVCC ,Multivesion Concurrency Control )解决了幻读问题。 **可重复读(REPEATABLE READ)是Mysql 默认的事务隔离级别,其中InnoDB主要通过使用MVVC获得高并发,使用一种被称为next-key-locking的策略来避免幻读。** **SERIALIZABLE(可串行化)** SERIALIZABLE是最高的隔离级别。它通过强制事务串行,避免了前面说的幻读问题。简单的来说,SERIALIZABLE会在读的每一行数据上 都加上锁,所以可能导致大量的超时和锁征用问题。实际应用中也很少用到这个隔离级别,只有在非常需要确保数据的一致性而且可以接受没有并发的情况,才可考 虑用该级别。 ### final,finally和finalize的区别 - final 用于声明属性,方法和类, 分别表示属性不可变, 方法不可覆盖, 类不可继承. - finally 是异常处理语句结构的一部分,表示总是执行. - finalize 是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等. JVM不保证此方法总被调用.
保存文章