11、值传递和引用传递的区别
值传递:只要是基本类型都是值传递
引用传递:针对于基本类型进行封装,对封装进行传递
12、单例模式的详细介绍
(1) 单例模式,创建一个全局对象,每次调用使用同一个实例
(2) 原型模式,每次调用都新建一个对象
(3) session,一个session会话,使用一个对象实例
(4) request, 一个request请求,使用一个对象实例
单例模式优势:
单例模式在全局服务只需要创建一个对象,减少重复创建,提高性能。
每个新创建的对象都放在jvm的新生代里,而新生代的容量是一定的,如果对象不断创建,会频繁触发垃圾回收,有时还会导致fullGC,严重影响性能。
3、单例陷阱
单例陷阱是在多线程的问题
一个线程创建一个独立栈帧,栈帧存储方法的局部变量,而全局变量存储在堆中。这时全局变量就是不安全的,获取到的值可能是另一个线程的临时值。
4、单例陷阱解决方法
(1) 减少使用全局便令
(2) 不变变量加入final
(3) 使用static全局变量
13、冒泡排序和递归调用
冒泡排序:
// 对 bubbleSort 的优化算法
public void bubbleSort_2(int[] list) {
int temp = 0; // 用来交换的临时数
boolean bChange = false; // 交换标志
// 要遍历的次数
for (int i = 0; i < list.length - 1; i++) {
bChange = false;
// 从后向前依次的比较相邻两个数的大小,遍历一次后,把数组中第i小的数放在第i个位上
for (int j = list.length - 1; j > i; j--) {
// 比较相邻的元素,如果前面的数大于后面的数,则交换
if (list[j - 1] > list[j]) {
temp = list[j - 1];
list[j - 1] = list[j];
list[j] = temp;
bChange = true;
}
}
// 如果标志为false,说明本轮遍历没有交换,已经是有序数列,可以结束排序
if (false == bChange)
break;
System.out.format("第 %d 趟:\t", i);
printAll(list);
}
}
递归调用:(函数调用自身的方法)
# include <stdio.h>
void Func(int n); //函数声明
int main(void)
{
int n;
printf("想输出几个我爱你:");
scanf("%d", &n);
Func(n);
return 0;
}
void Func(int n)
{
if (n > 0)
{
printf("i love you\n");
Func(n-1);
}
else
{
return ;
}
}
14、操作字符串的方法,
1)、字符串查找:
indexOf(Sting s)用于字符串s首次出现的索引位置,如果没有搜索到s,返回值为-1
lastIndex(Sting s)用于字符串s最后一次出现的索引位置,如果没有搜索到s,返回值为-1
2)、获取指定位置的字符
charAt(int i)
public static void main(String args[]){
String st="hello word";
System.out.print(st.charAt(2));
}
输出为 e
3)、获取截取后的子字符串
subString(int i)从指定的索引位置截取到结尾
subString(int i,int j)截取从索引位置i到j的字符串
4)、去除空格
trim( ):返回字符串的副本,忽略前空格和尾部空格
String tr="head";
System.out.print(tr.trim());
5)、字符串的替换
replace(char a,char b):实现指定的字符a换成字符b
6)、判断字符串的开始与结尾
startsWith( )和endsWith( ):判定字符串是否以指定内容开始或结尾
String st=hello word ;
boolean b=st.startsWith("h");
boolean b=st.endsWith("d");
7)、比较字符串是否相等
equals( ):比较时必须区分大小写
equalsIgnoreCase( ):比较时不区分大小写
("ass").equals("Ass") false
("ass").equalsIgnoreCase( )("Ass") true
8)、字母大小写转换
toLowerCase( ):将字符串转换为小写
toUpCase( ):将字符串转换为大写
9)、字符串拆分
split(String sign,int limit):对给定的分割符sign进行有限次limit分割
10)、格式化字符串
format()用于创建格式化的字符串
11)、字符串生成器
StringBuilder对象初始容量是16字符,可以自行指定初始长度,利用StringBuilder类中方法可以动态执行添加、删除、插入等操作
15、 string和int的转换:
有两个方法:
1). int i = Integer.parseInt([String]); 或
i = Integer.parseInt([String],[int radix]);
2). int i = Integer.valueOf(my_str).intValue();
注: 字串转成 Double, Float, Long 的方法大同小异.
16、string和date相互转换
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class StringToDate {
public static void main(String[] args) {
//获得一个时间格式的字符串
String dateStr = "2016-12-31";
//获得SimpleDateFormat类,我们转换为yyyy-MM-dd的时间格式
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
try {
//使用SimpleDateFormat的parse()方法生成Date
Date date = sf.parse(dateStr);
//打印Date
System.out.println(date);
} catch (ParseException e) {
e.printStackTrace();
}
}
}
17、div+css和table布局的区别
a> div+css布局的好处:
1.符合W3C标准,代码结构清晰明了,结构、样式和行为分离,带来足够好的可维护性。
2.布局精准,网站版面布局修改简单。
3.加快了页面的加载速度(最重要的)。
4.节约站点所占的空间和站点的流量。
5.用只包含结构化内容的HTML代替嵌套的标签,提高另外搜索引擎对网页的搜索效率。
b> table布局的好处(table布局也不是一点用的没有,这点是毋庸置疑的)
1.容易上手。
2.可以形成复杂的变化,简单快速。
3.表现上更加“严谨”,在不同浏览器中都能得到很好的兼容。
18、数组实例化的方法
1. 直接给每个元素赋值
int array[4] = {1,2,3,4};
2. 给一部分赋值,后面的全部为0
int array[4] = {1,2};
3. 由赋值参数个数决定数组的个数
int array[] = {1,2};
4. 数组元素的值是随机分配的
int array[4] = {};
当初始化参数时,推荐使用 int array[4] = {0};
19、数组和list的区别
list可以封装对象,不限制大小,顺序排序,可以不用类型
数组必须是相同的类型
20、项目中图片和文件储存在什么位置
1)、项目中
2)、本地磁盘中
3)、第三方工具中
转载于:https://www.cnblogs.com/caiwx/p/11188708.html