java支持多继承吗? java类不支持多继承只支持单继承,一个子类继承一个父类;java接口支持多继承,一个子接口可以有多个父接口。 java集合框架的是什么?说出一些集合框架的优点? 每种编程语言中都有集合,最初的Java版本包含几种集合类:Vector、Stack、HashTable和Array。随着集合的广泛使用,Java1.2提出了囊括所有集合接口、实现和算法的集合框架。在保证线程安全的情况下使用泛型和并发集合类,Java已经经历了很久。它还包括在Java并发包中,阻塞接口以及它们的实现。集合框架的部分优点如下: (1)使用核心集合类降低开发成本,而非实现我们自己的集合类。 (2)随着使用经过严格测试的集合框架类,代码质量会得到提高。 (3)通过使用JDK附带的集合类,可以降低代码维护成本。 (4)复用性和可操作性。 集合框架的部分优点如下: 1.使用核心集合类降低开发成本,而非实现我们自己的集合类 2.随着使用经过严格测试的集合框架类,代码质量会得到提高 3.通过使用JDK附带的集合类,可以降低代码维护成本 4.复用性和可操作性 list和set区别 list,set都是继承自collection接口 list特点:元素有放入顺序,元素可重复 set特点:元素无放入顺序,元素不可重复,重复元素会覆盖掉 set和list对比: set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置的改变 list:和数组类似,list可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变 java反射机制的作用: 1.在运行时判断任意一个对象的所属类 2.在运行时判断任意一个对象的所属类所具有的成员变量和方法 3.在运行时任意调用一个对象的方法 4.在运行时构造任意一个对象的类 什么是反射机制? 简单说,反射机制指的是程序在运行时能够获取自身的信息,在java中,只要给定类的名字,那么就可以通过反射机制来获得类的所有信息 反射机制的优缺点: 静态编译:在编译时确定类型,绑定对象,即通过 动态编译:运行时确定类型,绑定对象。动态编译最大限度的发挥了java的灵活性,体现了多态的应用,有利于降低类之间的耦合性。 优点:可以实现动态创建对象和编译,体现出很大的灵活性 缺点:对性能有影响 什么是动态代理? 代理类在程序运行时创建的代理方式被称为“动态代理” stringbuffer和stringbuilder stringbuffer是线程安全的可变字符串,其内部实现是可变数组 stringbubuilder是非线程安全的,但性能比stringbuffer好 #{}和${}的区别是什么?
网上的答案是:#{}是预编译处理,$ {}是字符串替换。mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;mybatis在处理 $ { } 时,就是把 ${ } 替换成变量的值。使用 #{} 可以有效的防止SQL注入,提高系统安全性。
对于这个题目我感觉要抓住两点:
(1)$ 符号一般用来当作占位符,常使用Linux脚本的人应该对此有更深的体会吧。既然是占位符,当然就是被用来替换的。知道了这点就能很容易区分$和#,从而不容易记错了。
(2)预编译的机制。预编译是提前对SQL语句进行预编译,而其后注入的参数将不会再进行SQL编译。我们知道,SQL注入是发生在编译的过程中,因为恶意注入了某些特殊字符,最后被编译成了恶意的执行操作。而预编译机制则可以很好的防止SQL注入。Mybatis是如何进行分页的?分页插件的原理是什么? Mybatis使用RowBounds对象进行分页,它是针对ResultSet结果集执行的内存分页,而非物理分页,可以在sql内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。 分页插件的基本原理是使用Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,根据dialect方言,添加对应的物理分页语句和物理分页参数。 举例:select * from student,拦截sql后重写为:select * from (select *from student)t limit 0,10 Mybatis 动态sql是做什么的?都有哪些动态sql?能简述一下动态sql的执行原理不? Mybatis动态sql提供了9种动态sql标签trim/where/set/foreach/if/choose/when/otherwise/bind 其执行原理为,使用OGNL从sql参数对象中计算表达式的值,根据表达式的值动态拼接sql,以此完成动态sql的功能。 消息中间件的应用场景: 常用的消息队列有: ActiveMQ , RabbitMQ ,ZeroMQ ,Kafka, MetaMQ ,RocketMQ. 消息中间件使用的典型场景有四个: 1.典型的异步处理2.应用解耦3.流量削峰4.消息通讯四个场景 典型的秒杀活动,抢购,消息通讯,邮件发送,电话短信等都是典型的采用消息中间件的业务场景 Tcp和UDP的区别和优缺点: TCP与UDP区别总结: 1.TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接 2.TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,既不保证可靠交付 TCP通过校验和,重传控制,序号标识,滑动窗口,确认应答实现可靠传输。 3.UDP具有较好的实时性,工作效率比TCP高,适用于高速传输和失效性有较高的通信或广播通信 4.每一条TCp连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信 5.TCp对系统资源要求较多,UDP对系统资源要求较少 sleep和wait的区别: 它们最大本质的区别是:sleep()不释放同步锁,wait()释放同步锁 还有用法上的不同是:sleep(milliseconds)可以用时间指定来使他自动醒过来,如果时间不到你只能调用interreput()来强行打断,wait()可以用notify()直接唤起。 1.这两个方法来自不同的类分别是Thread和Object 2.最主要的是sleep方法没有释放锁,而wait方法释放锁,使得其他线程可以使用同步控制块或者方法 3.wait,notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用 4.sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常。 基本数据类型所占字节: byte 1字节 short 2字节 int 4字节 long 8字节 char 2字节 float 4字节 double 8字节 boolean 1字节 JSP的九大内置对象及其作用: JSP一共有九大内置对象,分别为:request, response, session, application, out , pagecontext, config,page, exception 封装,继承,多态和抽象。 封装给对象提供了隐藏内部特性和行为的能力。对象提供一些能被其他对象访问的方法来改变它内部的数据。 多态是编程语言给不同的底层数据类型做相同的接口展示的一种能力。一个多态类型上的操作可以应用到其他类型的值上面。 继承给对象提供了从基类获取字段和方法的能力 抽象是把想法从具体的实例中分离出来的步骤 95.解释下Servlet的生命周期。 Servlet生命周期可以分成四个阶段:加载和实例化、初始化、服务、销毁。 当客户第一次请求时,首先判断是否存在Servlet对象,若不存在,则由Web容器创建对象,而后调用init()方法对其初始化,此初始化方法在整个Servlet生命周期中只调用一次。 完成Servlet对象的创建和实例化之后,Web容器会调用Servlet对象的service()方法来处理请求。 当Web容器关闭或者Servlet对象要从容器中被删除时,会自动调用destory()方法。 96.doGet()方法和doPost()方法有什么区别? doGet:GET方法会把名值对追加在请求的URL后面。因为URL对字符数目有限制,进而限制了用在客户端请求的参数值的数目。并且请求中的参数值是可见的,因此,敏感信息不能用这种方式传递。 doPOST:POST方法通过把请求参数值放在请求体中来克服GET方法的限制,因此,可以发送的参数的数目是没有限制的。最后,通过POST请求传递的敏感信息对外部客户端是不可见的。 1.JDBC编程有哪些不足之处,MyBatis是如何解决这些问题的?
① 数据库链接创建、释放频繁造成系统资源浪费从而影响系统性能,如果使用数据库链接池可解决此问题。
解决:在SqlMapConfig.xml中配置数据链接池,使用连接池管理数据库链接。
② Sql语句写在代码中造成代码不易维护,实际应用sql变化的可能较大,sql变动需要改变java代码。
解决:将Sql语句配置在XXXXmapper.xml文件中与java代码分离。
③ 向sql语句传参数麻烦,因为sql语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。
解决: Mybatis自动将java对象映射至sql语句。
④ 对结果集解析麻烦,sql变化导致解析代码变化,且解析前需要遍历,如果能将数据库记录封装成pojo对象解析比较方便。
解决:Mybatis自动将sql执行结果映射至java对象。
什么是值传递和引用传递?对象被值传递,意味着传递了对象的一个副本。因此,就算是改变了对象副本,也不会影响源对象的值。 对象被引用传递,意味着传递的并不是实际的对象,而是对象的引用。因此,外部对引用对象所做的改变会反映到所有的对象上 HashMap和Hashtable有什么区别?
HashMap和Hashtable都实现了Map接口,因此很多特性非常相似。但是,他们有以下不同点:
HashMap允许键和值是null,而Hashtable不允许键或者值是null。
Hashtable是同步的,而HashMap不是。因此,HashMap更适合于单线程环境,而Hashtable适合于多线程环境。
HashMap提供了可供应用迭代的键的集合,因此,HashMap是快速失败的。另一方面,Hashtable提供了对键的列举(Enumeration)。
一般认为Hashtable是一个遗留的类。
HashSet和TreeSet有什么区别?
HashSet是由一个hash表来实现的,因此,它的元素是无序的。add(),remove(),contains()方法的时间复杂度是O(1)。
另一方面,TreeSet是由一个树形的结构来实现的,它里面的元素是有序的。因此,add(),remove(),contains()方法的时间复杂度是O(logn)。
解释下Servlet的生命周期。
Servlet生命周期可以分成四个阶段:加载和实例化、初始化、服务、销毁。
当客户第一次请求时,首先判断是否存在Servlet对象,若不存在,则由Web容器创建对象,而后调用init()方法对其初始化,此初始化方法在整个Servlet生命周期中只调用一次。
完成Servlet对象的创建和实例化之后,Web容器会调用Servlet对象的service()方法来处理请求。
当Web容器关闭或者Servlet对象要从容器中被删除时,会自动调用destory()方法。 什么是cookie?session和cookie有什么区别?
cookie是Web服务器发送给浏览器的一块信息。浏览器会在本地文件中给每一个Web服务器存储cookie。以后浏览器在给特定的Web服务器发请求的时候,同时会发送所有为该服务器存储的cookie。下面列出了session和cookie的区别:
无论客户端浏览器做怎么样的设置,session都应该能正常工作。客户端可以选择禁用cookie,但是,session仍然是能够工作的,因为客户端无法禁用服务端的session。
在存储的数据量方面session和cookies也是不一样的。session能够存储任意的Java对象,cookie只能存储String类型的对象。
final, finally, finalize的区别。
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。
finally是异常处理语句结构的一部分,表示总是执行。
finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。 Jquery中有哪几种类型的选择器?
从我自己的角度来讲,可以有3种类型的选择器,如下:
1、基本选择器:直接根据id、css类名、元素名返回匹配的dom元素。
2、层次选择器:也叫做路径选择器,可以根据路径层次来选择相应的DOM元素。
3、过滤选择器:在前面的基础上过滤相关条件,得到匹配的dom元素。
什么是Lambda表达式?
Lambda Expression可以定义为允许用户将方法作为参数传递的匿名函数。这有助于删除大量的样板代码。Lambda函数没有访问修饰符(私有,公共或受保护),没有返回类型声明和没有名称。
Lambda表达式允许用户将“函数”传递给代码。所以,与以前需要一整套的接口/抽象类想必,我们可以更容易地编写代码。例如,假设我们的代码具有一些复杂的循环/条件逻辑或工作流程。使用lambda表达式,在那些有难度的地方,可以得到很好的解决。
Lambda函数的优点:
直到Java 8列表和集合通常由客户端代码从集合中获取迭代器来处理,然后使用它迭代其元素并依次处理每个元素。如果要并行处理不同的元素,那么客户代码而不是集合的责任就是组织它。 通过Java 8,可以更轻松地在多个线程上分发集合的处理。 集合现在可以在内部组织自己的迭代,将并行化的责任从客户端代码转移到库代码中。
更少的代码行。如上所述,用户必须仅以声明方式声明要执行的操作。 n > System.out.println(“Hello World”+ n); 所以用户必须键入减少的代码量。
使用Java 8 Lambda表达式可以实现更高的效率。通过使用具有多核的CPU,用户可以通过使用lambda并行处理集合来利用多核CPU。
多态的好处
允许不同类对象对同一消息做出响应,即同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消息就是函数调用)。即父类型的引用指向子类型的对象。主要有以下优点:
可替换性:多态对已存在代码具有可替换性
可扩充性:增加新的子类不影响已经存在的类结构
更加灵活
面向对象和面向过程的区别?
面向过程
优点:性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源。比如,单片机、嵌入式开发、Linux/Unix 等一般采用面向过程开发,性能是最重要的因素。
缺点:没有面向对象易维护、易复用、易扩展。
面向对象
优点:易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护。
缺点:性能比面向过程低
代码中如何实现多态
实现多态主要有以下三种方式:
1. 接口实现
2. 继承父类重写方法
3. 同一类中进行方法重载
|