Java日记2018-06-27

2018-06-27  本文已影响0人  hayes0420
  1. 二叉搜索树与双向链表
private static TreeNode pre=null;
     private static TreeNode cur=null;
     public static TreeNode reverse(TreeNode root){
         inorder(root);
         return cur;
     }
     public static void  inorder(TreeNode root){
         if(root==null) return ;
         inorder(root.left);
         cur.left=pre;
         if(pre!=null){
             pre.right=cur;
         }
         pre = root;
         if(cur!=null){
             cur=root;
         }
         inorder(root.right);
     }
  1. 字符串的排列
public static void Permutation(StringBuffer stb) {
            if (stb == null)
                return;
            // for(int i=0;i<stb.length();i++) {
            PermuCore(stb, 0, stb.length() - 1);
            // }
        }

        public static void PermuCore(StringBuffer stb, int start, int end) {
            if (start > end)
                return;
            if (start == end) {
                System.out.println(stb);
            } else {
                for (int i = start; i <= end; i++) {
                    //选取一个元素放到当前最开始的位置(因为有for循环来回的增加i的值)
                    swap(stb, start, i);
                     //剩余全排列,
                    PermuCore(stb, start + 1, end);
                     //把元素放回原位置
                    swap(stb, start, i);
                }
            }

        }

        public static void swap(StringBuffer stb, int i, int j) {
            char temp = stb.charAt(i);
            stb.setCharAt(i, stb.charAt(j));
            stb.setCharAt(j, temp);

        }
  1. 数组中出现次数超过一半的数字
public static int morethahalf(int[] arr){
     if(arr.length==0) return -1;
     int cnt=1;
     int res = arr[0];
     for(int i=1;i<arr.length;i++){
         if(cnt==0){
             res = arr[i];
             cnt=0;
         } 
         if(arr[i]==res){
             cnt++;
         } else{
             cnt--;
         }
     }
     cnt=0;
     for(int i:arr){
         if(res==arr[i]){
             cnt++;
         }
     }
     if(cnt>=arr.length/2) {
         return res;
     }else{
     return -1;
     }
 }

1 java异常的关键字有哪些?
使用throw显式的抛出异常并终止程序
使用throws抛出“被检查的异常”但是不处理
try catch处理异常
finally最终执行与try catch一块使用

2 描述一下异常的层级?
thowable是所有异常的父类,它的两个直接子类是error和exception
其中error表示编译时系统错误,不可预期和恢复,比如jvm崩溃,内存不足
exception分为被检查的异常异常,运行时异常; Checked exception能被预期并应该尝试修复,比如FileNotFoundException;
runtime exception表示运行时异常,通常不能预期,比如ArrayIndexOutOfBoundException;

3 运行时数据区域
程序计数器 正在执行的虚拟机字节码指令地址
虚拟机栈 用于存储局部变量,常量池,操作数栈;通过 -Xss 这个虚拟机参数来指定一个程序的 Java 虚拟机栈内存大小,java -Xss=512M HackTheJava

本地方法栈 为本地方法服务,作用类似虚拟机栈,、

堆 为对象实例分配内存

方法区 用于存放已被加载的类信息、常量、静态变量、即时编译器编译后的代码等数据

上一篇下一篇

猜你喜欢

热点阅读