20190903 小米一面

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qunqunstyle99/article/details/100521244

小米没有进行笔试直接发起了面试。
整体感觉还挺好的,面试官很和善。

  • 上来先是自我介绍
  • 问项目
  • 问在Android开发中遇到的问题及解决方案
  • 对工作地的选择
  • 问未来希望的发展方向,上层应用还是偏 framework 的(介绍了下工作地等)
  • finally final finalize 的区别 讲一下
  • final可以修饰什么 作用等
  • JVM中 堆和栈的区别
  • 堆和栈的内存可见性
  • Java 中的四种引用方式,强引用弱引用等
  • Android activity的四种启动模式
  • 事件分发机制
  • 还有些基础知识不记得了
  • 手撕代码1 实现一个单链表的反转,自定义链表类型,不要使用递归(自己定义输入,并进行输出检测,也就是自己先生成一个链表再去翻转)
  • 手撕代码2 实现atoi函数,输入string,输出int(字符串可能存在字符,可能超过int最大长度,要求判断特殊情况。)
  • 反问环节

在这里插入图片描述

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        Stack <Node> stack = new Stack<>();//使用栈
        int temp = in.nextInt();
        Node head = new Node(temp);
        Node head1 = head;//保存头结点
        for(int i = 1 ; i < n; i++ ){
            int temp1 = in.nextInt();
            Node temp2 = new Node(temp1);
            head1.next = temp2;
            head1 = head1.next;
        }//完成初始链表建立
        in.close();
        for(int i = 0 ; i < n;i++ ){
            stack.push(head);
            head = head.next;
        }//插入栈中
        Node out = new Node(100);
        Node out1 = out;
        while(!stack.isEmpty()){
            out.next = stack.pop();
            out = out.next;
        }//弹栈,建立输出链表
        out.next =null;
        out1 = out1.next;
        for(int i = 0 ; i < n;i++ ){
           System.out.println(out1.val);
            out1 = out1.next;
        }//打印
        
    }
   
    static class Node {//节点类
        int val;
        Node next;
        public Node(int val){
            this.val = val;
        }
    }

//字符串转成int
 public static int atoi(String string){
        char ato = string.charAt(0);//判断是不是负数
        int bigger0 = 1;
          if(ato == '-')
              bigger0 = -1;
        long length = string.length();
        if(length > 11){ //int max=2147483647 int min=-2147483648 算上符号位最长11位
            System.out.println("超过int型最大长度")return -1;
        }
        int value = 0;
        int time = 0;
        if(bigger0 == -1)
           time = 1;
        while(time <= length - 1){
            if(string.charAt(time)> '9' ||string.charAt(time)<'0'){
                System.out.println("含有非数字字符")return -1;
            }else{
                value = (string.charAt(time)-'0') + 10 * vaule;
                //这个地方这么写肯定情况是不全的,我还没写完,面试官说时间差不多,没在继续考虑
                if(vaule > Integer.max() / 10){
                    if(length - 1 -time > 1){
                        System.out.println("超过int型最大值")return -1;
                    }
                }
            }
            time++;
        }
        return vaule * bigger0;
    }
}

第一个翻转链表写完通过了,我说还可以用头插法,只不过感觉栈简单一点,他说其实是希望我用头插法写的,说他看一下代码,然后就让我写第二题,第二题最后没有输入用例去调试,只是写了个函数。写的不全面。

猜你喜欢

转载自blog.csdn.net/qunqunstyle99/article/details/100521244