1. 操作系统中 heap 和 stack 的区别
  2. 什么是基于注解的切面实现
  3. 什么是 对象/关系 映射集成模块
  4. 什么是 Java 的反射机制
  5. 什么是 ACID
  6. BS与CS的联系与区别
  7. Cookie 和 Session的区别
  8. fail-fast 与 fail-safe 机制有什么区别
  9. get 和 post请求的区别
  10. Interface 与 abstract 类的区别
  •  
    1,heap是堆,stack是栈
    堆和栈在操作系统中的概念和在java中的概念有区别
    堆和栈是两种数据结构,要理解堆和栈要从空间分配、缓存释放、数据结构三个方面入手
    操作系统中的堆和栈的区别:
    栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈; 
    堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。
    栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放; 
    存中堆是存放在二级缓,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些
    堆(数据结构):堆可以被看成是一棵树,如:堆排序; 栈(数据结构):一种先进后出的数据结构。
    Java中的堆和栈的区别:
     栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。
      在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。 
      堆内存用来存放由new创建的对象和数组,在堆中分配的内存,由Java虚拟机的自动垃圾回收器来管理。在堆中产生了一个数组或对象后,还可以在栈中定义一个特殊的变量,让栈中这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量。引用变量就相当于是为数组或对象起的一个名称,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象。
     
    2、面向切面编程:在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。
    如何实现面向切面编程:
    第一步:创建切面辅助类。并使用 @Aspect( ) 将类标注为切面 
    第二步:创建切点方法,该方法必须为 void 返回值类型,可以不进行实现。并采用 @Pointcut 方式进行标注为切点。 
    第三步:采用 @Before、@After、@AfterThrowing 等等进行定义通知类型。 
    第四步:运行测试。
    采用注解方式定义了切面,切点,通知。接下来就是通知 Spring 的配置文件,在 Spring 中声明自动代理 Bean ,该 Bean 知道如何把 @AspectJ 注解所标注的 Bean 转换为代理通知
    3、
    对象关系映射(Object Relational Mapping,简称ORM)是通过使用描述对象和数据库之间映射的元数据,将面向对象语言程序中的对象自动持久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。
    4、
    反射机制指的是程序在运行时能够获取自身的信息,通过对程序集元数据的搜索找到对应的成员类型并使用,以实现验证或动态调用程序集的目的。
    反射是一种计算机处理方式。有程序可以访问、检测和修改它本身状态或行为的这种能力。能提供封装程序集、类型的对象。(程序集包含模块,而模块包含类型,类型又包含成员。)
    反射的具体用法:在运行时判断任意一个对象所属的类。 在运行时构造任意一个类的对象。 在运行时判断任意一个类所具有的成员变量和方法。 在运行时调用任意一个对象的方法
    5、
    ACID:事务的四大属性,atom原子性,Consistency 一致性 Isolation隔离性 Durability 持久性
    6、
    bs是浏览器/服务器编程,cs是客户端/服务器编程
    C/S是Client/Server的缩写。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或 SQL Server。客户端需要安装专用的客户端软件。 
    B/S是Brower/Server的缩写,客户机上只要安装一个浏览器(Browser),如Netscape Navigator或Internet Explorer,服务器安装Oracle、Sybase、Informix或 SQL Server等数据库。在这种结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现。浏览器通过Web Server 同数据库进行数据交互。
    C/S 与 B/S的具体 区别: 
    1.硬件环境不同: 
      C/S 一般建立在专用的网络上, 小范围里的网络环境, 局域网之间再通过专门服务器提供连接和数据交换服务. 
      B/S 建立在广域网之上的, 不必是专门的网络硬件环境,例与电话上网, 租用设备. 信息自己管理. 有比C/S更强的适应范围, 一般只要有操作系统和浏览器就行 
    2.对安全要求不同 
      C/S 一般面向相对固定的用户群, 对信息安全的控制能力很强. 一般高度机密的信息系统采用C/S 结构适宜. 可以通过B/S发布部分可公开信息. 
      B/S 建立在广域网之上, 对安全的控制能力相对弱, 可能面向不可知的用户。 
    3.对程序架构不同 
      C/S 程序可以更加注重流程, 可以对权限多层次校验, 对系统运行速度可以较少考虑. 
      B/S 对安全以及访问速度的多重的考虑, 建立在需要更加优化的基础之上. 比C/S有更高的要求 B/S结构的程序架构是发展的趋势, 从MS的.Net系列的BizTalk 2000 Exchange 2000等, 全面支持网络的构件搭建的系统. SUN 和IBM推的JavaBean 构件技术等,使 B/S更加成熟. 
    4.软件重用不同 
      C/S 程序可以不可避免的整体性考虑, 构件的重用性不如在B/S要求下的构件的重用性好. 
      B/S 对的多重结构,要求构件相对独立的功能. 能够相对较好的重用.就入买来的餐桌可以再利用,而不是做在墙上的石头桌子 
    5.系统维护不同 
      C/S 程序由于整体性, 必须整体考察, 处理出现的问题以及系统升级. 升级难. 可能是再做一个全新的系统 
      B/S 构件组成,方面构件个别的更换,实现系统的无缝升级. 系统维护开销减到最小.用户从网上自己下载安装就可以实现升级. 
    6.处理问题不同 
      C/S 程序可以处理用户面固定, 并且在相同区域, 安全要求高需求, 与操作系统相关. 应该都是相同的系统 
      B/S 建立在广域网上, 面向不同的用户群, 分散地域, 这是C/S无法作到的. 与操作系统平台关系最小. 
    7.用户接口不同 
      C/S 多是建立的Window平台上,表现方法有限,对程序员普遍要求较高 
      B/S 建立在浏览器上, 有更加丰富和生动的表现方式与用户交流. 并且大部分难度减低,减低开发成本. 
    8.信息流不同 
      C/S 程序一般是典型的中央集权的机械式处理, 交互性相对低 
      B/S 信息流向可变化, B-B B-C B-G等信息、流向的变化, 更像交易中心。
    7、Cookie 和 Session的区别:
    cookie 是指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)
    session其实指的就是访问者从到达某个特定主页到离开为止的那段时间。 Session其实是利用Cookie进行信息处理的,当用户首先进行了请求后,服务端就在用户浏览器上创建了一个Cookie,当这个Session结束时,其实就是意味着这个Cookie就过期了。
    注:为这个用户创建的Cookie的名称是aspsessionid。这个Cookie的唯一目的就是为每一个用户提供不同的身份认证。
    cookie和session的共同之处在于:cookie和session都是用来跟踪浏览器用户身份的会话方式。
    cookie 和session的区别是:cookie数据保存在客户端,session数据保存在服务器端
    8、fail-fast快速失败,fail-safe安全失败
    在对集合遍历修改时,两种不同的方式会产生相应的问题,并发修改异常和对修改后的内容无法进行访问
     
     快速失败:  在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加、删除、修改),则会抛出Concurrent Modification Exception。
      原理:迭代器在遍历时直接访问集合中的内容,并且在遍历过程中使用一个 modCount 变量。集合在被遍历期间如果内容发生变化,就会改变modCount的值。每当迭代器使用hashNext()/next()遍历下一个元素之前,都会检测modCount变量是否为expectedmodCount值,是的话就返回遍历;否则抛出异常,终止遍历。
          注意:这里异常的抛出条件是检测到 modCount!=expectedmodCount 这个条件。如果集合发生变化时修改modCount值刚好又设置为了expectedmodCount值,则异常不会抛出。因此,不能依赖于这个异常是否抛出而进行并发操作的编程,这个异常只建议用于检测并发修改的bug。
          场景:java.util包下的集合类都是快速失败的,不能在多线程下发生并发修改(迭代过程中被修改)。
    安全失败: 采用安全失败机制的集合容器,在遍历时不是直接在集合内容上访问的,而是先复制原有集合内容,在拷贝的集合上进行遍历。
          原理:由于迭代时是对原集合的拷贝进行遍历,所以在遍历过程中对原集合所作的修改并不能被迭代器检测到,所以不会触发Concurrent Modification Exception。
          缺点:基于拷贝内容的优点是避免了Concurrent Modification Exception,但同样地,迭代器并不能访问到修改后的内容,即:迭代器遍历的是开始遍历那一刻拿到的集合拷贝,在遍历期间原集合发生的修改迭代器是不知道的。
              场景:java.util.concurrent包下的容器都是安全失败,可以在多线程下并发使用,并发修改。
    注意:
    fall-fast产生的两种环境(1)单线程环境,集合被创建后,在遍历它的过程中修改了结构。注意 remove()方法会让expectModcount和modcount 相等,所以是不会抛出这个异常。(2)多线程环境,当一个线程在遍历这个集合,而另一个线程对这个集合的结构进行了修改。
    fail-safe机制有两个问题(1)需要复制集合,产生大量的无效对象,开销大(2)无法保证读取的数据是目前原始数据结构中的数据。
    9、get 和 post请求的区别
    get和post我们常在浏览器的地址栏,html代码的表单请求中见到它们。
    Http协议中的get和post的区别:
    URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的获取,请求,更新,删除4个操作。(Http定义了与服务器交互的不同方法)
    Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据
     
    在表单中提交数据get和post方式的区别:
    1、通过get方法提交数据,可能会带来安全性的问题。比如一个登陆页面。当通过get方法提交数据时,用户名和密码将出现在URL上,在Form中,建议使用post方法。
    2、Get传输的数据量小,这主要是因为受URL长度限制;而Post可以传输大量的数据,所以在上传文件只能使用Post。GET 支持的最大字节限制是 2048 Bytes;POST 支持的最大字节限制是 2GB。
    10、Interface 与 abstract 类的区别
    1,接口是更加抽象的抽象类。接口是被实现,抽象类是被继承。
    2,抽象类可以有构造方法,抽象方法,普通方法,静态变量,普通变量,接口只有抽象方法,静态变量
    3,接口可以继承接口,并且可以继承多个接口,但抽象类只能单根继承
posted on 2018-03-07 10:46  玉月晴  阅读(171)  评论(0)    收藏  举报