1. 请写出单例模式的两个实现

饿汉式

  1. class Hungry{
  2. private Hungry(){
  3. }
  4. private static Hungry hungry = new Hungry();
  5. public static Hungry getInstance() {
  6. return hungry;
  7. }
  8. }

懒汉式

  1. public class Lazy {
  2. private Lazy() {
  3. }
  4. private static volatile Lazy lazy; //volatile 防止指令重排
  5. public static Lazy getInstance() {
  6. if (lazy == null) {
  7. synchronized (Lazy.class) { // 双重校验保证线程安全,防止多线程进入初始化多个实例
  8. if(lazy == null) {
  9. lazy = new Lazy();
  10. }
  11. }
  12. }
  13. return lazy;
  14. }
  15. }

枚举式

  1. public enum Singleton {
  2. INSTANCE;
  3. public void doSomething() { // 调用,方便简洁又安全
  4. System.out.println("doSomething");
  5. }
  6. }
  7. // 调用方法
  8. public class Main {
  9. public static void main(String[] args) {
  10. Singleton.INSTANCE.doSomething();
  11. }
  12. }

2. 给你一个字符串s(包含大写/小写字符),请你去除字符串中重复的字符,使得每个字母只出现一次,需保证返回结果按照ascii码的顺序展示。ps:A->65,a->97。

  1. public String Solution(String s) {
  2. char[] c = s.toCharArray(); // 变char数组
  3. int count = 0; // 重复的字符数量
  4. int flag = 0; // 重复标记,重复置1
  5. // 去重
  6. for (int i=0; i < c.length - count; i++) {
  7. char temp; // 中间变量,用于复制c[i]去查重比较
  8. // 如果重复的数量比i还多,则i从0开始
  9. if(count > i && flag == 1) {
  10. i = 0;
  11. }else if (count <= i && flag == 1) {
  12. i = i - count;
  13. }
  14. temp = c[i];
  15. flag = 0;
  16. // 取第i个字符,后续遍历字符数组查看是否有重复,重复多个就去除多个
  17. // if判断是否相同,内层for遍历,将发生重复的位置之后的都往前移一位,实现去重
  18. for (int j = i+1; j < c.length - count; j++) {
  19. if(temp == c[j]) {
  20. for (int z = i; z < c.length - count -1; z++) {
  21. c[z] = c[z+1];
  22. }
  23. count++; // 重复数+1
  24. flag = 1; // 相同则置1
  25. break;
  26. }
  27. }
  28. }
  29. // 排序——字符排序默认就是按ascii码排序
  30. for (int i = 0; i < c.length - count; i++) {
  31. for (int j = 0; j < c.length - count -1; j++) {
  32. char temp;
  33. if(c[j] > c[j+1]) {
  34. temp = c[j];
  35. c[j] = c[j+1];
  36. c[j+1] = temp;
  37. }
  38. }
  39. }
  40. // 转为String并返回
  41. String str = c.toString();
  42. return str;
  43. }

3. 十进制转N进制

  1. import java,util.Scanner;
  2. public class JinZhi() {
  3. public String fun(int n, int num) {
  4. String str = "";
  5. int yushu;
  6. int shang = num;
  7. while(shang > 0) {
  8. yushu = shang % n;
  9. shang = shang / n;
  10. // 如果进制>=10
  11. if (yushu > 9) {
  12. str = (char) ('a' + (yushu - 10)) + str;
  13. } else {
  14. str = yushu + str;
  15. }
  16. }
  17. return str;
  18. }
  19. public static void main(String args[]) {
  20. JinZhi s = new JinZhi();
  21. Scanner scanner = new Scanner(System.in);
  22. System.out.println("输入目标进制:");
  23. Int jinzhi = scanner.nextInt();
  24. System.out.println("输入待转换数字:");
  25. Int input = scanner.nextInt();
  26. scan.close();
  27. System.out.println(s.fun(jinzhi, input));
  28. }
  29. }

4. 笔试

Object类:notify、notifyAll、wait 不是Object类的:sleep
image.png
getClass:获取运行时类型
http2解决的问题: 传输层加速、服务端推送、防止窃取数据 未解决:节约流量
网段主机IP地址计算:

  1. 与10.110.12.29mask255.255.255.224属于同一网段的主机ip地址是()
  2. a。10.110.12.0
  3. b。10.110.12.32
  4. c。10.110.12.31
  5. d。10.110.12.30
  6. 解答:
  7. 1- 10.110.12.29 的网络地址为 10.110.12.0
  8. 2- 确认子网为 10.110.12.0
  9. 10.110.12.32
  10. 10.110.12.64
  11. ......
  12. 3- 10.110.12.29位于0-32,属于子网 10.110.12.0
  13. 4- 而子网的网络地址为 10.110.12.0
  14. 5- 广播地址为 10.110.12.31
  15. 6- 网络地址和广播地址 不能 作为 主机地址
  16. 7- D

image.png
重定向状态码(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的基础之上,消除了非主属性对于码的传递函数依赖。

  1. 如何强制垃圾回收器立即回收一个对象?
  2. A.调用System.gc()方法
  3. B.调用Runtime.gc()方法
  4. C.将对象赋值null
  5. D.无法强制垃圾回收器立即执行
  6. 解答:
  7. 没有方法可以强行回收垃圾,只能提高优先级
  8. system.gc可以提醒垃圾回收执行,不能强制。这个方法可以调用垃圾回收,但是具体值不值行,什么时间执行,由jvm调度