1. 请写出单例模式的两个实现
饿汉式
class Hungry{
private Hungry(){
}
private static Hungry hungry = new Hungry();
public static Hungry getInstance() {
return hungry;
}
}
懒汉式
public class Lazy {
private Lazy() {
}
private static volatile Lazy lazy; //volatile 防止指令重排
public static Lazy getInstance() {
if (lazy == null) {
synchronized (Lazy.class) { // 双重校验保证线程安全,防止多线程进入初始化多个实例
if(lazy == null) {
lazy = new Lazy();
}
}
}
return lazy;
}
}
枚举式
public enum Singleton {
INSTANCE;
public void doSomething() { // 调用,方便简洁又安全
System.out.println("doSomething");
}
}
// 调用方法
public class Main {
public static void main(String[] args) {
Singleton.INSTANCE.doSomething();
}
}
2. 给你一个字符串s(包含大写/小写字符),请你去除字符串中重复的字符,使得每个字母只出现一次,需保证返回结果按照ascii码的顺序展示。ps:A->65,a->97。
public String Solution(String s) {
char[] c = s.toCharArray(); // 变char数组
int count = 0; // 重复的字符数量
int flag = 0; // 重复标记,重复置1
// 去重
for (int i=0; i < c.length - count; i++) {
char temp; // 中间变量,用于复制c[i]去查重比较
// 如果重复的数量比i还多,则i从0开始
if(count > i && flag == 1) {
i = 0;
}else if (count <= i && flag == 1) {
i = i - count;
}
temp = c[i];
flag = 0;
// 取第i个字符,后续遍历字符数组查看是否有重复,重复多个就去除多个
// if判断是否相同,内层for遍历,将发生重复的位置之后的都往前移一位,实现去重
for (int j = i+1; j < c.length - count; j++) {
if(temp == c[j]) {
for (int z = i; z < c.length - count -1; z++) {
c[z] = c[z+1];
}
count++; // 重复数+1
flag = 1; // 相同则置1
break;
}
}
}
// 排序——字符排序默认就是按ascii码排序
for (int i = 0; i < c.length - count; i++) {
for (int j = 0; j < c.length - count -1; j++) {
char temp;
if(c[j] > c[j+1]) {
temp = c[j];
c[j] = c[j+1];
c[j+1] = temp;
}
}
}
// 转为String并返回
String str = c.toString();
return str;
}
3. 十进制转N进制
import java,util.Scanner;
public class JinZhi() {
public String fun(int n, int num) {
String str = "";
int yushu;
int shang = num;
while(shang > 0) {
yushu = shang % n;
shang = shang / n;
// 如果进制>=10
if (yushu > 9) {
str = (char) ('a' + (yushu - 10)) + str;
} else {
str = yushu + str;
}
}
return str;
}
public static void main(String args[]) {
JinZhi s = new JinZhi();
Scanner scanner = new Scanner(System.in);
System.out.println("输入目标进制:");
Int jinzhi = scanner.nextInt();
System.out.println("输入待转换数字:");
Int input = scanner.nextInt();
scan.close();
System.out.println(s.fun(jinzhi, input));
}
}
4. 笔试
Object类:notify、notifyAll、wait 不是Object类的:sleep
getClass:获取运行时类型
http2解决的问题: 传输层加速、服务端推送、防止窃取数据 未解决:节约流量
网段主机IP地址计算:
与10.110.12.29mask255.255.255.224属于同一网段的主机ip地址是()
a。10.110.12.0
b。10.110.12.32
c。10.110.12.31
d。10.110.12.30
解答:
1- 10.110.12.29 的网络地址为 10.110.12.0
2- 确认子网为 10.110.12.0
10.110.12.32
10.110.12.64
......
3- 10.110.12.29位于0-32,属于子网 10.110.12.0
4- 而子网的网络地址为 10.110.12.0
5- 广播地址为 10.110.12.31
6- 网络地址和广播地址 不能 作为 主机地址
7- D
重定向状态码(3xx) https://www.cnblogs.com/wuguanglin/p/redirect.html
301 Moved Permanently(永久移动) 场景:(一般是资源位置永久更改)
302 Found(发现) 场景:(一般是普通的重定向需求:临时跳转)
1.未登录前先使用302重定向到登录页面,登录成功后再跳回到原来请求的页面
2.有时候需要自动刷新页面,比如5秒后回到订单详细页面之类。
3.有时系统进行升级或者切换某些功能时,需要临时更换地址。
4.像微博之类的使用短域名,用户浏览后需要重定向到真实的地址之类。
5.电脑端与移动端的转换 比如我访问网页端页面https://www.taobao.com/,302重定向到了移动端页面m.taobao.com
303 See Other(查看其他) 场景:几乎没有,一般就是用302
307 Temporary Redirect(临时重定向) 场景:很少用,与302类似,只不过是针对POST方法的请求不允许更改方法
308 Permanent Redirect (永久重定向) 场景:很少用,与301类似,只不过是针对POST方法的请求不允许更改方法
数据库范式 1NF,2NF,3NF,BCNF,4NF,5NF。
符合高一级范式的设计,必定符合低一级范式,例如符合2NF的关系模式,必定符合1NF。
1NF的定义为:符合1NF的关系中的每个属性都不可再分。1NF是所有关系型数据库的最基本要求。
2NF在1NF的基础之上,消除了非主属性对于码的部分函数依赖。
3NF在2NF的基础之上,消除了非主属性对于码的传递函数依赖。
如何强制垃圾回收器立即回收一个对象?
A.调用System.gc()方法
B.调用Runtime.gc()方法
C.将对象赋值null
D.无法强制垃圾回收器立即执行
解答:
没有方法可以强行回收垃圾,只能提高优先级
system.gc可以提醒垃圾回收执行,不能强制。这个方法可以调用垃圾回收,但是具体值不值行,什么时间执行,由jvm调度