底层的小开发遇到的面试问题(
http://blog.csdn.net/a296777513/article/details/73610719 仰望这位大神,以后学习完知识点都好好总结下)
先简单记住,然后在整理。
1、集合
1.1 ArrayList怎么转set:
List<String> result = new ArrayList<>(staffsSet);
Set result = new HashSet(staffsList);
数组、list、set都可以直接互转。
1.2 arraylist和linkedlist的区别:
ArrayList是实现了基于动态数组的数据结构,线性结构存储,获取很快,但是增删很慢。
LinkedList基于链表的数据结构,是使用双链表实现的。链式结构有指针,不是线性存储。获取慢,但增删很快。
1.3 hashtable与hashmap的区别?
链接: http://blog.csdn.net/fujiakai/article/details/51585767
HashMap是基于哈希表实现的,每一个元素是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阀值)时,同样会自动增长。
HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的concurrentHashMap。
HashMap 实现了Serializable接口,因此它支持序列化,实现了Cloneable接口,能被克隆。
1.4 hashMap实现原理
链接: http://blog.csdn.net/qq_27093465/article/details/52209814
链接:https://www.cnblogs.com/chengxiao/p/6059914.html
上面两位大神写的不错,简单易懂。
2、spring
2.1 spring的AOP与IOC
IOC依赖注入和AOP面向切面编程,这两个是Spring的灵魂。
IOC:所有的类的创建、销毁都由spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转。
BeanFactory factory =
new
XmlBeanFactory(
new
ClassPathResource(
"root.xml"
));
TestBean bean = factory.getBean(
"testBean"
);
上面这样的简单代码其实在spring中执行了太多太多的逻辑。推荐《Spring源码深度解析》。
AOP(Aspect Orient Programming),我们一般称为面向方面(切面)编程。一般用在事务管理、日志、缓存等等。AOP实现的关键在于AOP框架自动创建的AOP代理,AOP代理主要分为静态代理和动态代理,静态代理的代表为AspectJ;而动态代理则以Spring AOP为代表。
JDK动态代理和CGLIB动态代理。JDK动态代理通过反射来接收被代理的类,并且要求被代理的类必须实现一个接口。JDK动态代理的核心是InvocationHandler
接口和Proxy
类。
如果目标类没有实现接口,那么Spring AOP会选择使用CGLIB来动态代理目标类。CGLIB(Code Generation Library),是一个代码生成的类库,可以在运行时动态的生成某个类的子类,注意,CGLIB是通过继承的方式做的动态代理,因此如果某个类被标记为final
,那么它是无法使用CGLIB做动态代理的。
链接:http://www.importnew.com/24305.html
3、mybatis中#和$的区别
#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id".
#方式能够很大程度防止sql注入
$方式一般用于传入数据库对象,例如传入表名。
MyBatis排序时使用order by 动态参数时需要注意,用$而不是#。
$方式无法防止Sql注入
一般能用#的就别用$
4、sleep与wait的区别
5、线程池的概念
6、Oracle存储过程与函数的区别
7、JVM
8、MySQL的数据引擎