[网页特效] jQuery百度搜索框下拉代码
源码简介 jQuery百度搜索框下拉代码,鼠标点击搜索框弹出搜索记录,可切换百度、搜狗、必应、谷歌等搜索引擎。
Java基础知识的27个点
1、JAVA中的几种基本数据类型是什么,各自占用若干字节。
2、String类能被继续吗,为什么
不能。在Java中,只要是被界说为final的类,也可以说是被final修饰的类,就是不能被继续的。
3、String,Stringbuffer,StringBuilder的区别。
4、ArrayList和LinkedList有什么区别。
简朴的区别: 1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。 (LinkedList是双向链表,有next也有previous) 2.对于随机接见get和set,ArrayList以为优于LinkedList,由于LinkedList要移动指针。 3.对于新增和删除操作add和remove,LinedList对照占优势,由于ArrayList要移动数据。
深度的区别: 1.对ArrayList和LinkedList而言,在列表末尾增添一个元素所花的开销都是牢靠的。对ArrayList而言,主要是在内部数组中增添一项,指向所添加的元素,偶然可能会导致对数组重新举行分配;而对LinkedList而言,这个开销是统一的,分配一个内部Entry工具。
2.在ArrayList的中央插入或删除一个元素意味着这个列表中剩余的元素都市被移动;而在LinkedList的中央插入或删除一个元素的开销是牢靠的。
3.LinkedList不支持高效的随机元素接见。
4.ArrayList的空间虚耗主要体现在在list列表的末尾预留一定的容量空间,而LinkedList的空间破费则体现在它的每一个元素都需要消耗相当的空间
5、讲讲类的实例化顺序。
问题:好比父类静态数据,组织函数,字段,子类静态数据,组织函数,字 段,当new的时刻,他们的执行顺序。
谜底: 类加载器实例化时举行的操作步骤(加载–>毗邻->初始化)。 父类静态变量、 父类静态代码块、 子类静态变量、 子类静态代码块、 父类非静态变量(父类实例成员变量)、 父类组织函数、 子类非静态变量(子类实例成员变量)、 子类组织函数。
6、用过哪些Map类,都有什么区别。
问题:好比HashMap是线程平安的吗,并发下使用的Map是什么,他们 内部原理划分是什么,好比存储方式,hashcode,扩容,默认容量等。 谜底: 不平安,并发下使用ConcurrentHashMap。
7、JAVA8的ConcurrentHashMap为什么放弃了分段锁?
缘故原由:通过 JDK 的源码和官方文档看来, 他们以为的弃用分段锁的缘故原由由以下几点: 1、加入多个分段锁虚耗内存空间。 2、生产环境中, map 在放入时竞争统一个锁的概率异常小,分段锁反而会造成更新等操作的长时间守候。 3、为了提高 GC 的效率
既然弃用了分段锁, 那么一定由新的线程平安方案, 我们来看看源码是怎么解决线程平安的呢?CAS
首先通过 hash 找到对应链表事后, 查看是否是第一个object, 若是是, 直接用cas原则插入,无需加锁,然后若是不是链表第一个object, 则直接用链表第一个object加锁,这里加的锁是synchronized,虽然效率不如 ReentrantLock, 但节约了空间,这里会一直用第一个object为锁, 直到重新盘算map巨细, 好比扩容或者操作了第一个object为止。
8、ConcurrentHashMap(JDK1.8)为什么要使用synchronized而不是如ReentranLock这样的可重入锁?
可以从下面几个方面讲述: 锁的粒度 首先锁的粒度并没有变粗,甚至变得更细了。每当扩容一次,ConcurrentHashMap的并发度就扩大一倍。 Hash冲突 JDK1.7中,ConcurrentHashMap从过二次hash的方式(Segment -> HashEntry)能够快速的找到查找的元素。在1.8中通过链表加红黑树的形式填补了put、get时的性能差距。 扩容 JDK1.8中,在ConcurrentHashmap举行扩容时,其他线程可以通过检测数组中的节点决议是否对这条链表(红黑树)举行扩容,减小了扩容的粒度,提高了扩容的效率。
为什么是synchronized,而不是可重入锁
削减内存开销 假设使用可重入锁来获得同步支持,那么每个节点都需要通过继续AQS来获得同步支持。但并不是每个节点都需要获得同步支持的,只有链表的头节点(红黑树的根节点)需要同步,这无疑带来了伟大内存虚耗。
获得JVM的支持 可重入锁事实是API这个级其余,后续的性能优化空间很小。 synchronized则是JVM直接支持的,JVM能够在运行时作出响应的优化措施:锁粗化、锁消除、锁自旋等等。这就使得synchronized能够随着JDK版本的升级而不改动代码的条件下获得性能上的提升。
9、有没有有顺序的Map实现类,若是有,他们是怎么保证有序的。
Hashmap和Hashtable 都不是有序的。 TreeMap和LinkedHashmap都是有序的。(TreeMap默认是key升序,LinkedHashmap默认是数据插入顺序) TreeMap是基于对照器Comparator来实现有序的。 LinkedHashmap是基于链表来实现数据插入有序的。
10、抽象类和接口的区别,类可以继续多个类么,接口可以继续多个接口么,类可以实现多个接口 么。
区别: 1、抽象类和接口都不能直接实例化,若是要实例化,抽象类变量必须指向实现所有抽象方式的子类工具,接口变量必须指向实现所有接口方式的类工具。 2、抽象类要被子类继续,接口要被类实现。 3、接口只能做方式声名,抽象类中可以做方式声名,也可以做方式实现 4、接口里界说的变量只能是公共的静态的常量,抽象类中的变量是通俗变量。 5、抽象类里的抽象方式必须所有被子类所实现,若是子类不能所有实现父类抽象方式,那么该子类只能是抽象类。同样,一个实现接口的时刻,如不能所有实现接口方式,那么该类也只能为抽象类。 6、抽象方式只能声名,不能实现。abstract void abc();不能写成abstract void abc(){}。 7、抽象类里可以没有抽象方式 8、若是一个类里有抽象方式,那么这个类只能是抽象类 9、抽象方式要被实现,以是不能是静态的,也不能是私有的。 10、接口可继续接口,并可多继续接口,但类只能单根继续。
类不能继续多个类 接口可以继续多个接口 类可以实现多个接口
11、继续和聚合的区别在哪。
继续指的是一个类继续另外的一个类的功效,并可以增添它自己的新功效的能力,继续是类与类或者接口与接口之间最常见的关系;在Java中此类关系通过要害字extends明确标识。
聚合
聚合体现的是整体与部门、拥有的关系,此时整体与部门之间是可星散的,他们可以具有各自的生命周期;好比盘算机与CPU、公司与员工的关系等;
12、IO模子有哪些,讲讲你明白的nio ,他和bio,aio的区别是啥,谈谈reactor模子。
各IO的区别:
reactor是什么?
事宜驱动
可以处置一个或多个输入源
通过Service Handle同步的将输入事宜接纳多路复用分发给响应的Request Handler(一个或多个)处置
13、反射的原理,反射确立类实例的三种方式是什么。
//确立Class工具的方式一:(工具.getClass()),获取类中的字节码文件Class class1 = p1.getClass();//确立Class工具的方式二:(类.class:需要输入一个明确的类,随便一个类型都有一个静态的class属性)Class class3 = Person.class;//确立Class工具的方式三:(forName():传入时只需要以字符串的方式传入即可)//通过Class类的一个forName(String className)静态方式返回一个Class工具,className必须是全路径名称;//Class.forName()有异常:ClassNotFoundExceptionClass class4 = Class.forName(“cn.xbmchina.Person”);
14、反射中,Class.forName和ClassLoader区别 。
Class.forName(className)方式,内部现实挪用的方式是 Class.forName(className,true,classloader); 第2个boolean参数示意类是否需要初始化, Class.forName(className)默认是需要初始化。 一旦初始化,就会触发目的工具的 static块代码执行,static参数也也会被再次初始化。 ClassLoader.loadClass(className)方式,内部现实挪用的方式是 ClassLoader.loadClass(className,false); 第2个 boolean参数,示意目的工具是否举行链接,false示意不举行链接,由上面先容可以, 不举行链接意味着不举行包罗初始化等一些列步骤,那么静态块和静态工具就不会获得执行
15、形貌动态署理的几种实现方式,划分说出响应的优瑕玷。
原理区别:
[网页特效]企业网站我要咨询留言板代码
源码简介 企业网站我要咨询留言板代码
java动态署理是行使反射机制天生一个实现署理接口的匿名类,在挪用详细方式前挪用InvokeHandler来处置。
而cglib动态署理是行使asm开源包,对署理工具类的class文件加载进来,通过修改其字节码天生子类来处置。
1、若是目的工具实现了接口,默认情形下会接纳JDK的动态署理实现AOP 2、若是目的工具实现了接口,可以强制使用CGLIB实现AOP
3、若是目的工具没有实现了接口,必须接纳CGLIB库,spring会自动在JDK动态署理和CGLIB之间转换
若何强制使用CGLIB实现AOP? (1)添加CGLIB库,SPRING_HOME/cglib/*.jar (2)在spring设置文件中加入<aop:aspectj-autoproxy proxy-target-class=”true”/>
JDK动态署理和CGLIB字节码天生的区别? (1)JDK动态署理只能对实现了接口的类天生署理,而不能针对类 (2)CGLIB是针对类实现署理,主要是对指定的类天生一个子类,笼罩其中的方式 由于是继续,以是该类或方式最好不要声明成final
16、final的用途。
1、被final修饰的类不能以被继续 2、被final修饰的方式不能以被重写 3、被final修饰的变量不能以被改变(切记不能变的是变量的引用而非引用指向工具的内容。) 4、被final修饰的方式,JVM会实验为之追求内联,这对于提升Java的效率是异常主要的。因此,若是能确定方式不会被继续,那么只管将方式界说为final的,详细参见运行期优化手艺的方式内联部门 5、被final修饰的常量,在编译阶段会存入挪用类的常量池中,详细参见类加载机制最后部门和Java内存区域
17、写出三种单例模式实现 。
1 饿汉式
public class EagerSingleton {static { System.out.println(“EagerSingleton 被加载”);}//私有化组织方式,限制直接组织,只能挪用 getInstance() 方式获取单例工具private EagerSingleton(){} private static final EagerSingleton eagerSingleton=new EagerSingleton(); // 私有化静态 final成员,类加载直接天生单例工具,对照占用内存 public static EagerSingleton getInstance(){ //提供对外的公共api获取单例工具 return eagerSingleton;}}
总结:饿汉式单例的特点:饿汉式在类确立的同时就实例化一个静态工具出来,不管之后会不会使用这个单例,都市占有一定的内存,然则响应的,在第一次挪用时速率也会更快,由于其资源已经初始化完成。
2 懒汉式
public class LazySingleton {static { System.out.println(“LazySingleton 被加载”);}private LazySingleton(){} //私有化组织方式,限制直接组织,只能挪用 getInstance() 方式获取单例工具private static LazySingleton lazySingleton=null;//静态域初始化为null,为的是需要时再确立,阻止像饿汉式那样占用内存public static LazySingleton getInstance(){//提供对外的公共api获取单例工具 if(lazySingleton==null){ synchronized (LazySingleton.class){ //在getInstance中做了两次null检查,确保了只有第一次挪用单例的时刻才会做同步,这样也是线程平安的,同时阻止了每次都同步的性能消耗 if(lazySingleton==null){ lazySingleton = new LazySingleton(); } } } return lazySingleton; }}
总结:有同步锁的性能消耗
3 静态内部类实现
public class IoDHSingleton {static {System.out.println(“IoDHSingleton 被加载”);}private IoDHSingleton(){} //私有化组织方式,限制直接组织,只能挪用 getInstance() 方式获取单例工具public static IoDHSingleton getInstance(){//提供对外的公共api获取单例工具//当getInstance方式第一次被挪用的时刻,它第一次读取HolderClass.ioDHSingleton,内部类HolderClass类获得初始化;//而这个类在装载并被初始化的时刻,会初始化它的静态域,从而创ioDHSingleton 的实例,由于是静态的域,因此只会在虚拟机装载类的时刻初始化一次,并由虚拟机来保证它的线程平安性。 return HolderClass.ioDHSingleton; } private static class HolderClass{ static { System.out.println(“HolderClass 被加载”); } private static IoDHSingleton ioDHSingleton = new IoDHSingleton(); } // 防止反序列化获取多个工具的破绽 private Object readResolve() throws ObjectStreamException { return HolderClass.ioDHSingleton; } }
这个模式的优势在于,getInstance方式并没有被同步,而且只是执行一个域的接见,因此延迟初始化并没有增添任何接见成本。
思量反射: 由于在挪用 SingletonHolder.instance 的时刻,才会对单例举行初始化,而且通过反射,是不能从外部类获取内部类的属性的。 以是这种形式,很好的阻止了反射入侵。 思量多线程: 由于静态内部类的特征,只有在其被第一次引用的时刻才会被加载,以是可以保证其线程平安性。 总结: 优势:兼顾了懒汉模式的内存优化(使用时才初始化)以及饿汉模式的平安性(不会被反射入侵)。 劣势:需要两个类去做到这一点,虽然不会确立静态内部类的工具,然则其 Class 工具照样会被确立,而且是属于永远带的工具。
18、若何在父类中为子类自动完成所有的hashcode和equals实现?这么做有何优劣。
19、请连系OO设计理念,谈谈接见修饰符public、private、protected、default在应用设计中的作用。
接见修饰符,主要标示修饰块的作用域,利便隔离防护。
public: Java语言中接见限制最宽的修饰符,一样平常称之为“公共的”。被其修饰的类、属性以及方式不仅可以跨类接见,而且允许跨包(package)接见。
private: Java语言中对接见权限限制的最窄的修饰符,一样平常称之为“私有的”。被其修饰的类、属性以及方式只能被该类的工具接见,其子类不能接见,更不能允许跨包接见。
protect: 介于public 和 private 之间的一种接见修饰符,一样平常称之为“珍爱形”。被其修饰的类、属性以及方式只能被类自己的方式及子类接见,纵然子类在差其余包中也可以接见。
default:即不加任何接见修饰符,通常称为“默认接见模式“。该模式下,只允许在统一个包中举行接见。
20、深拷贝和浅拷贝区别。
浅拷贝(Shallow Copy):
①对于数据类型是基本数据类型的成员变量,浅拷贝会直接举行值转达,也就是将该属性值复制一份给新的工具。由于是两份差其余数据,以是对其中一个工具的该成员变量值举行修改,不会影响另一个工具拷贝获得的数据。 ②对于数据类型是引用数据类型的成员变量,好比说成员变量是某个数组、某个类的工具等,那么浅拷贝会举行引用转达,也就是只是将该成员变量的引用值(内存地址)复制一份给新的工具。由于现实上两个工具的该成员变量都指向统一个实例。在这种情形下,在一个工具中修改该成员变量会影响到另一个工具的该成员变量值。
深拷贝:
首先先容工具图的看法。设想一下,一个类有一个工具,其成员变量中又有一个工具,该工具指向另一个工具,另一个工具又指向另一个工具,直到一个确定的实例。这就形成了工具图。那么,对于深拷贝来说,不仅要复制工具的所有基本数据类型的成员变量值,还要为所有引用数据类型的成员变量申请存储空间,并复制每个引用数据类型成员变量所引用的工具,直到该工具可达的所有工具。也就是说,工具举行深拷贝要对整个工具图举行拷贝!
简朴地说,深拷贝对引用数据类型的成员变量的工具图中所有的工具都开拓了内存空间;而浅拷贝只是转达地址指向,新的工具并没有对引用数据类型确立内存空间。
21、数组和链表数据结构形貌,各自的时间庞大度。
数组和链表的区别: 1、从逻辑结构角度来看: 数组必须事先界说牢靠的长度(元素个数),不能顺应数据动态地增减的情形。当数据增添时,可能超出原先界说的元素个数;当数据削减时,造成内存虚耗。 链表动态地举行存储分配,可以顺应数据动态地增减的情形,且可以利便地插入、删除数据项。(数组中插入、删除数据项时,需要移动其它数据项) 2、数组元素在栈区,链表元素在堆区; 3、从内存存储角度来看: (静态)数组从栈中分配空间, 对于程序员利便快速,但自由度小。 链表从堆中分配空间, 自由度大但申请治理对照穷苦。 数组行使下标定位,时间庞大度为O(1),链表定位元素时间庞大度O(n); 数组插入或删除元素的时间庞大度O(n),链表的时间庞大度O(1)。
22、error和exception的区别,CheckedException,RuntimeException的区别。
23、在自己的代码中,若是确立一个java.lang.String类,这个类是否可以被类加载器加载?为什么。
加载历程中会先检查类是否被已加载,检查顺序是自底向上,从Custom ClassLoader到BootStrap ClassLoader逐层检查,只要某个classloader已加载就视为已加载此类,保证此类只所有ClassLoader加载一次。而加载的顺序是自顶向下,也就是说当发现这个类没有的时刻会先去让自己的父类去加载,父类没有再让儿子去加载,那么在这个例子中我们自己写的String应该是被Bootstrap ClassLoader加载了,以是App ClassLoader就不会再去加载我们写的String类了,导致我们写的String类是没有被加载的。
24、说一说你对java.lang.Object工具中hashCode和equals方式的明白。在什么场景下需要重新实现这两个方式。
对于equals()与hashcode(),对照通用的规则: ①两个obj,若是equals()相等,hashCode()一定相等 ②两个obj,若是hashCode()相等,equals()纷歧定相等
25、在jdk1.5中,引入了泛型,泛型的存在是用来解决什么问题。
面向工具的转型只会发生在具有继续关系的父子类中(接口也是继续的一种) 向上转型:其焦点目的在于参数的统一上,基本不需要强制类型转换。 向下转型:是为了操作子类界说的特殊功效,需要强制类型转换,可是现在存在的问题是:向下转型实在是一种异常不平安的操作,以为编译的时刻,程序不会报错,而在运行的时刻会报错,这就是传说中的—迷之报错。
不外呢,在JDK1.5之后,新增添了泛型的手艺,这就将上述向下转型的问题祛除在了萌芽之中。 泛型的焦点意义在于:类在举行界说的时刻可以使用一个符号,此符号就示意类中属性或者方式以及参数的类型,符号在使用的时刻,才会去动态的设置类型。
26、Java中的HashSet内部是若何事情的。
HashSet 的内部接纳 HashMap来实现。由于 Map 需要 key 和 value,以是HashSet中所有 key 的都有一个默认 value。类似于 HashMap,HashSet 不允许重复的 key,只允许有一个null key,意思就是 HashSet 中只允许存储一个 null 工具。
27、什么是序列化,怎么序列化,为什么序列化,反序列化会遇到什么问题,若何解决。
什么是序列化? 序列化:把工具转换为字节序列的历程称为工具的序列化。 反序列化:把字节序列恢复为工具的历程称为工具的反序列化
什么情形下需要序列化? 当你想把的内存中的工具状态保留到一个文件中或者数据库中时刻; 当你想用套接字在网络上传送工具的时刻; 当你想通过RMI传输工具的时刻;
若何实现序列化? 实现Serializable接口即可
注重事项: transient 修饰的属性,是不会被序列化的 静态static的属性,他不序列化。 实现这个Serializable 接口的时刻,一定要给这个 serialVersionUID 赋值
关于 serialVersionUID 的形貌: 序列化运行时使用一个称为 serialVersionUID 的版本号与每个可序列化类相关联,该序列号在反序列化历程中用于验证序列化工具的发送者和吸收者是否为该工具加载了与序列化兼容的类。若是吸收者加载的该工具的类的 serialVersionUID 与对应的发送者的类的版本号差异,则反序列化将会导致 InvalidClassException。可序列化类可以通过声明名为 “serialVersionUID” 的字段(该字段必须是静态 (static)、最终 (final) 的 long 型字段)显式声明其自己的 serialVersionUID
[Python教程]《Python高级编程》中文版
《Python高级编程》中文版针对具备一定Python基础,并希望通过在项目中应用最佳实践和新的开发技术来提升自己的Python开发人员。 目录: 第1章 准备工作 1 1.1 安装Python 1 1.1.1 Python实现版本 2 1.1.2 在Linux环境下安装 3 1.1.3 在Windows环境下安装 5 1.1.4 在MacOSX环境下安装 8 1.2 Python命令行 9 1....