Java基础问题

Java语言是学习JavaEE、大数据、安卓开发的基石。

Java语言的特点

面向对象性:两个要素:类、对象                     三个特征:封装、继承、多态
健壮性:① 去除了C语言中的指针 ②自动的垃圾回收机制 -->仍然会出现内存溢出、内存泄漏
跨平台型:write once,run anywhere:一次编译,到处运行,功劳归功于:JVM

1.注释:Comment

分类:
单行注释://
多行注释:/*    */
文档注释:/**    */
作用:
① 对所写的程序进行解释说明,增强可读性。方便自己,方便别人
② 调试所写的代码
特点:
①单行注释和多行注释,注释了的内容不参与编译。
  换句话说,编译以后生成的.class结尾的字节码文件中不包含注释掉的信息
② 注释内容可以被JDK提供的工具 javadoc 所解析,生成一套以网页文件形式体现的该程序的说明文档。
③ 多行注释不可以嵌套使用
2.Java API 文档: 
API:application programming interface。习惯上:将语言提供的类库,都称为api.
API文档:针对于提供的类库如何使用,给的一个说明书。类似于《新华字典》
3.良好!、的编程风格

tips:\表示转义    “你不是”真正“的爱我”。 “你不是\”真正\“的爱我”  才OK。

1,变量

java中的引用数据类型有3种:类class,数组array,接口interface

而基本数据类型和引用数据类型最大的区别就是:基本数据类型被分配在栈中,

而引用数据类型,会被分配到堆中.

但是不论是基本数据类型,还是引用数据类型都会进入栈,被分配一块内存,对于基本数据类型来说,这块区域包含的就是基本数据类型的内容,而引用数据类型在这块区域中包含的是指向真正内容的指针,真正的内容被手动的分配在堆上.

此时出现了一个面试题?跟谁学面试问到int范围,由来?

1. 在计算机内部数据的存储和运算都采用二进制;
2. 计算机中数据分为有符号数和无符号数,对于有符号数,计算机规定用最高位来表示符 号。“0”表示正,“1”表示负;
3. Java中的数据都是有符号数;
4. 计算机中带符号的整数都是使用二进制的补码。

2.1 计算机底层的存储方式:所有数字在计算机底层都以二进制形式存在。
2.2 二进制数据的存储方式:所有的数值,不管正负,底层都以补码的方式存储。
2.3 原码、反码、补码的说明:
正数:三码合一
负数:

比如:正数 5 和 负数 5
5 原码:00000101     -5 原码:10000101
 反码:00000101     -5 反码:11111010
 补码:00000101     -5 补码:11111011


  不难想到Java中byte能够表示的最大二进制是01111111,换算成十进制就是127(1+2+4+8+16+32+64)。
而能够表示的最小二进制是10000000。但是注意,这是一个补码,我们需要根据规则反向求出它本身的原码,首先减去1,得到01111111,然后在求反,得到10000000,换算成十进制就是128,加上符号,即-128。
  最后说一个小技巧:对于负数求补码的时候,可以从原码低位开始,遇到第一个1就保留,后面各个位依次取反,当然符号位依然不变。
  还是上面的-5例子求补码,从原码低位开始,第一位是1,保留,然后后面的位依次取反,符号位不变,得到11111011。

String

引用数据类型,声明变量时候使用一对“”,和基本数据类型+就是一个联结作用
(a=97 A=65)

向上转型---自动 。
向下转型---丢失精度。

AOP如何保证事物的

一.为什么要用框架和模式 

1.为什么要用模式? 

  因为模式是一种指导,在一个良好的指导下,有助于你完成任务,有助于你作出一个优良的设计方案,达到事半功倍的效果。而且会得到解决问题的最佳办法。 

2.为什么要用框架? 

  因为软件系统发展到今天已经很复杂了,特别是服务器端软件,设计到的知识,内容,问题太多。在某些方面使用别人成熟的框架,就相当于让别人帮你完成一些基础工作,你只需要集中精力完成系统的业务逻辑设计。而且框架一般是成熟,稳健的,他可以处理系统很多细节问题,比如,事物处理,安全性,数据流控制等问题。还有框架一般都经过很多人使用,所以结构很好,所以扩展性也很好,而且它是不断升级的,你可以直接享受别人升级代码带来的好处。  
总之:就是让开发更简单,让我们成功 

二. AOP 

1. AOP是什么? 
  AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向方面编程。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。 

2. 切面意义何在? 
  就可以在这层切面上进行统一的集中式权限管理。而业务逻辑组件则无需关心权限方面的问题。也就是说,通过切面,我们可以将系统中各个不同层次上的问题隔离开来,实现统一集约式处理。各切面只需集中于自己领域内的逻辑实现。这一方面使得开发逻辑更加清晰,专业化分工更加易于进行;另一方面,由于切面的隔离,降低了耦合性,我们就可以在不同的应用中将各个切面组合使用,从而使得代码可重用性大大增强。 

3. AOP应用范围 

  Authentication 权限 
  Caching 缓存 
  Context passing 内容传递 
  Error handling 错误处理 
  Lazy loading 懒加载 
  Debugging  调试 
  logging, tracing, profiling and monitoring 记录跟踪 优化 校准 
  Performance optimization 性能优化 
  Persistence  持久化 
  Resource pooling 资源池 
  Synchronization 同步 
  Transactions 事务 


三.Spring事务处理  

1.Spring事务管理能给我们带来什么? 

  对于传统的基于特定事务资源的事务处理而言(如基于JDBC 的数据库访问),Spring并不会对其产生什么影响,我们照样可以成功编写并运行这样的代码。同时,Spring还提供了一些辅助类可供我们选择使用,这些辅助类简化了传统的数据库操作流程,在一定程度上节省了工作量,提高了编码效率。 

  对于依赖容器的参数化事务管理而言,Spring则表现出了极大的价值。Spring本身也是一个容器,只是相对EJB容器而言,Spring显得更为轻便小巧。我们无需付出其他方面的代价,即可通过Spring实现基于容器的事务管理(本质上来讲,Spring的事务管理是基于动态AOP)。 

2. Hibernate in Spring 
  applicationContext.xml 

  UserDAO.java ArticleDAO.java 



public class UserDAOImpl extends HibernateDaoSupport implements UserDAO { public void saveUser(Tuser user) {  
getHibernateTemplate().saveOrUpdate(user);  


public class ArticleDAOImpl extends HibernateDaoSupport implements ArticleDAO {  
public void saveArticle(Article article) {  
getHibernateTemplate().saveOrUpdate(article);  




  HibernateDaoSupport 
  实现了HibernateTemplate和SessionFactory实例的关联。HibernateTemplate对Hibernate Session操作进行了封装,而HibernateTemplate.execute方法则是一封装机制的核心,感兴趣可以研究一下其实现机制。  


  借助HibernateTemplate我们可以脱离每次数据操作必须首先获得Session实例、启动事务、提交/回滚事务以及烦杂的try/catch/finally的繁琐操作。从而获得以上代码中精干集中的逻辑呈现效果。 

  org.mzone.service.impl.UserManagerImpl 


public class UserManagerImpl implements UserManager {  
private UserDAO userDao;  
private ArticleDAO articleDao;  
public void saveUserAndArticle(Tuser user, Article article) {  
userDao.saveUser(user);  
articleDao.saveArticle(article);  





  测试代码 


InputStream is = new FileInputStream("applicationContext.xml"); 
XmlBeanFactory factory = new XmlBeanFactory(is); 
UserManager userManager = (UserManager )factory.getBean(" baseTxProxy ");  
user = new Tuser();  
article = new Article();  
user.setUsername("hellboys_topic 1");  
user.setPassword("12345678_topic 1"); 
article.setTitle("hellboys_topic 1");  
article.setContent("hellboys_topic 1");  
userManager.saveUserAndArticle(user,article); 


注意问题 


UserManager userManager = (UserManager )factory.getBean("baseTxProxy "); 
UserManager userManager = (UserManagerImpl) ctx.getBean("baseTxProxy"); 
java.lang.ClassCastException 



  原因在于Spring的AOP实现机制,前面曾经提及,Spring中的事务管理实际上是基于动态AOP机制实现,为了实现动态AOP,Spring在默认情况下会使用Java DynamicProxy,但是,Dynamic Proxy要求其代理的对象必须实现一个接口,该接口定义了准备进行代理的方法。而对于没有实现任何接口的Java Class,需要采用其他方式,Spring通过CGLib10实现这一功能。 

  CGLib可以在运行期对Class行为进行修改。由于其功能强大,性能出众,常常被作为Java Dynamic Proxy之外的动态Proxy模式的实现基础。在Spring、Hibernate中都用到了CGLib类库。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.Thompson

相互学习,欢迎指正。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值