java的一些小知识
来源:互联网 发布:linux nginx 全局变量 编辑:程序博客网 时间:2024/05/21 00:18
(1)StringBuffer和StringBuilder的区别
StringBuffer和StringBuilder主要区别在于StringBuffer类的方法是线程安全的,而StringBuilder的方法不是线程安全的,相比而言,StringBuilder会略微快一点。开发中一般都是字符串缓冲区被单个线程使用,因此使用StringBuilder一般会得到性能的提升。
StringBuffer和StringBuilder主要区别在于StringBuffer类的方法是线程安全的,而StringBuilder的方法不是线程安全的,相比而言,StringBuilder会略微快一点。开发中一般都是字符串缓冲区被单个线程使用,因此使用StringBuilder一般会得到性能的提升。
(2)为什么不使用字符串相加?
从java 6之后,编译器“始终”把字符串的+连结编译成StringBuilder,然后toString()返回。没有嵌入循环里的字符串相加效率和直接使用StringBuilder相差不大,但是遇到循环相加,将会在循环内创建StringBuilder,将造成很大的内存开销,也会伴随着很多的开辟和销毁内存的操作,效能大打折扣。因此这种情况一定要自己在循环外部手工定义StringBuilder而不能依赖编译器了,因此一般还是建议采用手动StringBuilder来操作,如果只是单行的字符串拼接,可以考虑采用”+”操作,或者在确定字符串个数的情况下,可以将它们放在一个数组中,并调用String.Concat进行连接,也是不错的选择。
从java 6之后,编译器“始终”把字符串的+连结编译成StringBuilder,然后toString()返回。没有嵌入循环里的字符串相加效率和直接使用StringBuilder相差不大,但是遇到循环相加,将会在循环内创建StringBuilder,将造成很大的内存开销,也会伴随着很多的开辟和销毁内存的操作,效能大打折扣。因此这种情况一定要自己在循环外部手工定义StringBuilder而不能依赖编译器了,因此一般还是建议采用手动StringBuilder来操作,如果只是单行的字符串拼接,可以考虑采用”+”操作,或者在确定字符串个数的情况下,可以将它们放在一个数组中,并调用String.Concat进行连接,也是不错的选择。
(3)为什么不拼sql
动态拼接sql容易造成sql注入的问题,比如验证用户登录拼的sql为select COUNT(*) from Users where Password = 'a' and UserName = 'b' 这个时候如果用户在前台页面把输入用户名字为'b' or 1=1--类似的东西,如果后台没做输入校验的话,那么这个sql返回的就是非0了。
而且考虑到共享sql的问题,采用绑定变量的形式一般可以提高执行效率。
(4)关于InitializingBean
InitializingBean接口是spring为bean提供了初始化方法的一种方式,它只包括afterPropertiesSet方法,凡是继承该接口的类,必须实现这个方法,在初始化bean的时候会执行该方法。一份示例afterPropertiesSet的实现如下:
public void afterPropertiesSet() throws Exception {
Assert.notNull(destDataUpdateDao, "destDataUpdateDao must not be null");
Assert.notNull(destImageDao, "destImageDao must not be null");
}
可以使得这些DAO在工程启动阶段就能判断非空。
Spring 还提供了一种在配置文件中通过init-method指定方法的方式来实现bean的初始化。
这两种方式是可以同时使用的,如果同时使用了,将会是先调用afterPropertiesSet方法,再用反射机制去调用init-method指定的方法,因此相对来说afterPropertiesSet方法的效率会高一些。同时使用的时候,如果调用afterPropertiesSet方法时出错,则不调用init-method指定的方法。
动态拼接sql容易造成sql注入的问题,比如验证用户登录拼的sql为select COUNT(*) from Users where Password = 'a' and UserName = 'b' 这个时候如果用户在前台页面把输入用户名字为'b' or 1=1--类似的东西,如果后台没做输入校验的话,那么这个sql返回的就是非0了。
而且考虑到共享sql的问题,采用绑定变量的形式一般可以提高执行效率。
(4)关于InitializingBean
InitializingBean接口是spring为bean提供了初始化方法的一种方式,它只包括afterPropertiesSet方法,凡是继承该接口的类,必须实现这个方法,在初始化bean的时候会执行该方法。一份示例afterPropertiesSet的实现如下:
public void afterPropertiesSet() throws Exception {
Assert.notNull(destDataUpdateDao, "destDataUpdateDao must not be null");
Assert.notNull(destImageDao, "destImageDao must not be null");
}
可以使得这些DAO在工程启动阶段就能判断非空。
Spring 还提供了一种在配置文件中通过init-method指定方法的方式来实现bean的初始化。
这两种方式是可以同时使用的,如果同时使用了,将会是先调用afterPropertiesSet方法,再用反射机制去调用init-method指定的方法,因此相对来说afterPropertiesSet方法的效率会高一些。同时使用的时候,如果调用afterPropertiesSet方法时出错,则不调用init-method指定的方法。
0 0
- java的一些小知识
- Java 的一些小知识
- 关于Java编程的一些小知识
- java异常的一些小知识
- java中常用到的一些小知识
- 关于JAVA的一些小知识
- java接口的一些小知识
- Java 中的一些小知识
- JAVA中容易混淆的一些小知识
- java的一些小知识(不断补充中..)
- 黑马程序员:java中集合的一些小知识
- JAVA线程相关的一些小知识,Thread
- [Thinking in JAVA] 前N章的一些小知识
- JAVA date类型处理的一些小知识
- ASP的一些小知识
- 一些小的网络知识
- vc的一些小知识
- javascript的一些小知识
- Java程序性能优化
- iOS学习之UIActionSheet的使用
- [Android]aapt使用小结
- SimpleSkewedGroupByTest
- Android中ViewHolder模式超简洁写法(一劳永逸)
- java的一些小知识
- 标准C++的4个类型转换符使用场景
- android 获取网速
- mac下安装memcached
- Android系统自带样式(@android:style/)
- ios学习之路(一)也说说HelloWorld
- BASH学习手册
- IShellLink获取快捷方式的真正地址(创建WIN32后台程序)
- UIImagePickerController详解