zoukankan      html  css  js  c++  java
  • 【java面试题——测试版2】

    Q:对内存溢出的理解,什么情况下会内存溢出,你写代码时遇到过内存溢出吗

    A:个人理解,内存溢出就是可用内存不够了,(它还有个亲戚叫内存泄漏,申请内存用完了不释放,大量内存泄漏就会导致内存溢出)

    可能会出现溢出的情况:

    一次性在内存中处理的数据过多,或者对象调用资源但是最后没有释放,JVM无法回收;也可能是死循环造成的;还有静态集合类,因为静态集合类的生命周期是和jvm一致的,如果其引用的对象一直得不到释放也会造成内存溢出;

    OutofMemoryError....

    第一次遇到内存溢出好像是因为递归吧,没设置结束条件很容易这样。

    Q:jdbc连接数据库的步骤

    A:(啊这,不都是mybatis搞定了吗,现在谁还写老jdbc啊)传统jdbc连接步骤如下:

      注册驱动,Class.forName.....

      设置三个参数:连接(url);用户名,密码

      获取连接:Connection co = DriverManager.getConnection(参数1,参数2,参数3)

      //建立完连接jdbc其实就结束了,剩下就是执行sql语句

      //Connection的对象创建startment语句  :Statement st=conn.createStatement();

      //然后就是执行SQL语句,处理结果集ResultSet:ResultSet rs=st.executeQuery(sql语句),结果集是用来显示的

      

    Q:为什么要分页查询,Mysql如何分页查询?如果有几万条数据不使用分页查询,直接查询可能会有什么后果?

    A:为什么要分页查询:使用分页查询可以节省查询耗费的时间,而且每次“翻页”只查询当前页面的数据,虽然增加了与数据库的交互次数但是每次查询很快很轻便,数据库里的数据量越大优势越明显。

      Mysql如何实现分页查询:

     使用limit:   SELECT * FROM 表名 LIMIT 5,10; // 检索记录行 6-15,5的意思是从第六行开始查询, 10的意思是一次查询十条(行)

      不过太多数据的时候limit也会很慢,而且是偏移量越往后越慢,必须增加索引限定,比如根据唯一主键id查询,或者使用子查询(子查询是在索引上完成的,而普通的查询时在数据文件上完成的,通常来说,索引文件要比数据文件小得多,所以操作起来也会更有效率)

      不优化直接查询那后果可能是几十秒的查询时间。

    Q:判断String中是否包含有其他字符串的方法

    A:可以用IndexOf,假如待测试字符串为a = “I love you”,判断是否包含“love” :打印  a.indexOf("love")  ,应当是待测试字符串中的位置下标

    String a = "I love you";
    System.out.println(a.indexOf("love"));//2
    System.out.println(a.indexOf("you"));//7


    Q:List和set的区别

    A:Set不允许重复对象,而且只能有一个null,存储是无序的;List允许重复对象,可以有多个null,存储顺序有序

    Q:获取map中的key的方法 

    A:for遍历中使用get方法,或者entrySet()方法,或者迭代器

    //<Sting,String>
    HashMap<String,String> hashMap1 = new HashMap<String,String>();
    hashMap1.put("1","a");
    hashMap1.put("2","b");
    hashMap1.put("3","c");
    hashMap1.put("4","d");
    //entryset
    for (Map.Entry<String,String> entry : hashMap1.entrySet()) {//entrySet方法
        String key = entry.getKey();
        String v = entry.getValue();
        System.out.println("------key----"+ key + "------value-----"  +v);
    }
    
    //迭代器遍历法
    System.out.println("迭代器遍历法");
    Iterator<String> iter = hashMap1.keySet().iterator();
    while(iter.hasNext()){
        String key=iter.next();
        String value = hashMap1.get(key);
        System.out.println(key+" "+value);
    }

    Q:linux如何编辑文件

    A: touch hello.c  //创建文件

      vi hello.txt  //进入vi打开文件,

      按a或者i进入文本编辑 

    Ps:也可以用echo命令,或者cat命令

    Q:对反射的理解,反射常用在哪些地方,如何用反射创建对象?

    A:反射是java的一种特性,java是静态语言,不过通过反射可以形成“伪动态”,也就是说可以在程序运行时获得类,类的对象,属性,接口等,并可以进行修改。

      和正常类先实例化后取得实例化对象不同,反射是根据实例化对象获取类的名字,再进行下一步操作。

      每一个类都有一个Class对象,每当编译一个新类就产一个Class对象,可以说,每个Class对象对应的是一个加载到JVM中的.class文件,

      所以,第一步是获取class对象:

        方式一:Class.forName("xxx")

        方式二:对象.GetClass

        方式三:类.class

      第二步就是创建对象:

      方法一:通过newInstence()
      Phone instance1 = (Phone) class1.newInstance();


      方法二:先调用构造器,再通过newInstence()创建
      Constructor<?> constructor = userinfoClass1.getConstructor(String.class,Integer.class);
      UserInfo newInstance = (UserInfo)constructor.newInstance("张三",15);

      System.out.println(newInstance);//UserInfo [name=张三, age=15]

    Q:创建线程的三种方式,如何获取线程的返回值

    A: 方法一:继承Thread类

        public class MyThread extends Thread{ xxx },可以MyThread myThread1 = new MyThread();然后myThread.start()来创建线程

        方法二:使用Runnable接口  

        public class Mythread implements Runnable{ xxx },不能直接调用,需要多一步Thread实例化:

        MyThread myThread2 = new MyThread();
        Thread thread = new Thread(myThread2);

        thread.start();

        方法三:用Callable<V>接口通过FutureTask包装器来创建Thread线程(这种方法有返回值)    

        需要使用FutureTask对象作为Thread对象的target创建并启动新线程。

        调用FutureTask对象的get()方法来获得子线程执行结束后的返回值

        CallableThreadTest ctt = new CallableThreadTest();    FutureTask<Integer> ft = new FutureTask<>(ctt);

      线程开启后可以用对象ft 调用get方法获取返回值

      获取线程返回值:除了上述那个callable接口,还可以人为阻塞线程来获得返回值(fool),休眠,或者join之类的(a.join,可以优先执行a线程)

     

  • 相关阅读:
    Vue.Draggable/SortableJS 的排序功能,在VUE中的使用
    vue项目中安装使用echarts
    CSS3美化有序列表
    Git 设置
    javascript 使用btoa和atob来进行Base64转码和解码
    vue 裁剪图片,插件Cropper的使用
    PHPEXCEL xls模板导入,及格式自定义:合并单元格、加粗、居中等操作
    HTML5的 input:file上传 以及 类型控制
    phpexcel 导出到xls文件的时候出现乱码解决
    Python+Selenium+PIL+Tesseract真正自动识别验证码进行一键登录
  • 原文地址:https://www.cnblogs.com/dabuliu/p/14518959.html
Copyright © 2011-2022 走看看