• 第一次面试的上机题目


     今天去一家公司面试,一开始就做上机题目,题目很简单,拿到我就有思路,但是到自己真正要去写的时候发现,下笔就错,很多细节问题以前都没考虑到,花了1个小时才把勉勉强强的做出来,大把错误,哎!,都怪自己平时动手太少,从今天开始多动手,立下一个flag;

    今天把题目重新做了一下,题目如下:

    读取read.txt文件
    1.最小和最大的price 和对应的time
    2.出现次数最多的price 和对应的time
    3.按price去重后的size

    read.txt的格式是name:xx,price:xx,time:xx,看起来像json字符串,这种形式的之前没写过直接上代码了

    思路是把每一行的数据封装成一个对象;然后放入list中进行处理

     实体类非常简单,略过了;

    读取文件

     1 public List<Item> read(File file) {
     2         List<Item> list = new ArrayList();
     3          try {
     4              System.out.println("开始读取");
     5             BufferedReader  bd = new  BufferedReader( new FileReader(file));            
     6             while(bd.read()!= -1) {//使用read判断,会读取第一个字符,再调用readLine会从第二个字符出开始读,
     7                 
     8                 String readLine = bd.readLine();
     9                 //对String进行分割
    10                 Item item = new Item();
    11                 String[] line = readLine.split(",");
    12                 for( String str:line) {
    13                     String[] split = str.split(":");
    14                     if(split[0].equals("name")) {
    15                         item.setUsername(split[1]);
    16                                     
    17                     }else if(split[0].equals("price")) {
    18                      item.setPrice(Double.valueOf(split[1]));                     
    19                     }else {
    20                          item.setTime(split[1]);                        
    21                     }
    22                     
    23                 }
    24                 list.add(item);
    25             }
    26         } catch (FileNotFoundException e) {
    27             // TODO Auto-generated catch block
    28             e.printStackTrace();
    29         } catch (IOException e) {
    30             // TODO Auto-generated catch block
    31             e.printStackTrace();
    32         }
    35         return list;
    36     }

      这里有一个小问题,我们在使用bd.read()!= -1的时候其实已经将文件第一个字符读取了,再调用readLine方法时会导致第一个字符没有,我找了好久也没有找到好的解决方法,只能就txt文件第一行空出来处理

     1.最小和最大的price 和对应的time

    //1.最小和最大的price 和对应的time
        public void first(List<Item> list) {
            double maxPrice=0.0;
            String maxTime=null;
            
             for(int j=0;j<list.size();j++) {
                  if( list.get(j).getPrice()>maxPrice) {
                      maxPrice = list.get(j).getPrice();
                      maxTime = list.get(j).getTime();
                  }
              }        
             double minPrice=maxPrice;
             String minTime=null;  ;
             for(int j=0;j<list.size();j++) {
                  if( list.get(j).getPrice()<minPrice) {
                      minPrice = list.get(j).getPrice();
                      minTime = list.get(j).getTime();
                  }
              }        
                 System.out.println("最"+maxPrice+" "+maxTime);    
                 System.out.println("最小"+minPrice+" "+minTime);    
            }

    题目很简单,但是如果写的不多,遇到for循环想半天,时间浪费很多;

    2.出现次数最多的price 和对应的time

    //出现次数最多的price
        public void second(List<Item> list) {
            int times = 0;
            
             for(int i=0;i<list.size();i++) {
                 int k=0;
                 double tem = list.get(i).getPrice();
                 for(int j=0;j<list.size();j++) {
                     if( list.get(j).getPrice()== tem) {
                         k++;
                     }
                  }      
                 System.out.println("k "+k+" tiems "+times);
                 if(k>times) {
                     times = k;                  
                 }
              }        
                System.out.println("出现最大次数" +times+" " );
        }

      这里在判断list.get(j).getPrice()== tem的时候注意 list.get(j).getPrice()是一个对象,我们的tem是一个数据类型,可以自动拆箱;不能定义为Double对象,不然比较的是内存地址

    3.按price去重后的size

    //去重使用hashSet
        public void third(List<Item> list) {
            Set set = new HashSet();
            for(int i=0;i<list.size();i++) {
                set.add(list.get(i).getPrice().doubleValue());            
            }
            System.out.println("去重后次数" +set.size());
            
        }

    使用HashSet去重,因为是基本数据类型不用,重写hashCode和equals方法 在面试的时候我写成了linkedList这很尴尬,哈哈

    找不到工作 ,不怪别人,还是自己的技术不到位,那些劝你面试吹水的人,其实只是站着说话不腰疼,面试不仅是hr面试你,也是你自己面试自己,你要是回答不上来,只能说自己努力不够,技术不到位。加油,继续找工作

    遇事犹豫不决时,须持虎狼之心,行仁义之事
  • 相关阅读:
    css之布局
    css之浮动
    白扯之聊聊我们的情怀
    Vue之指令
    Vue之vue.js声明式渲染
    AJAX经常遇到的那些问题
    HTTP之cookie技术
    正则表达式资料
    require.js资料
    AMD 和 CMD 的区别
  • 原文地址:https://www.cnblogs.com/fmlyzp/p/10381230.html
Copyright © 2020-2023  润新知