美文网首页
Java日记2018-06-27

Java日记2018-06-27

作者: hayes0420 | 来源:发表于2018-06-27 06:46 被阅读0次
    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

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

    堆 为对象实例分配内存

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

    相关文章

      网友评论

          本文标题:Java日记2018-06-27

          本文链接:https://www.haomeiwen.com/subject/ceivyftx.html