美文网首页
面试遇到的几个没注意的问题记录下来

面试遇到的几个没注意的问题记录下来

作者: 明日乌鸦 | 来源:发表于2019-12-09 23:52 被阅读0次

    版权申明

    原创文章:本博所有原创文章,欢迎转载,转载请注明出处,并联系本人取得授权。
    版权邮箱地址:banquan@mrdwy.com

    SpringIOC启动顺序

    1. 加载并且保存Spring配置文件路径信息然后保存到configLocation中

    2. 刷新Spring上下文环境

    3. 创建并且载入DefaultListableBeanFactory(即BeanFactory)

    4. 根据DefaultListableBeanFactory创建XMLBeanDefinitionReader,用于后面读取xml配置文件信息

    5. 创建BeanDefinitionDelegate代理类,用于解析xml配置信息

    6. 解析xml中配置的<import>、<bean>、<beans>、<alias>等不同的标签信息,以便于可以使用不同的解析器进行解析

    7. 通过XMLBeanDefinitionReader结合location路径信息读取Resources资源信息

    8. 使用BeanDefinitionDelegate代理类解析Bean元素并且依次进行实例化操作,实例化完毕之后将Bean信息注册(put)到BeanDefinitionMap中以便于可以下次继续使用

    大表在生产环境不停机数据迁移

    1、业务系统实现双写;

    2、分批次同步历史数据;

    3、同步完成后进行数据比对;

    具体的实现没想好,预计另外开一篇文章来写了,暂时这边留个坑

    检查java代码单元测试覆盖率

    可以使用Sonar,这个我用过居然不记得了😂

    Mock框架

    这个直接用EasyMock 、Mockito之类就好了,我忘记名字了,没答上来😭

    如何创建线程,有哪些方法

    这个简单 可以new Thread()、或者实现Runnable接口,然后new 这个实现类,一般推荐用第二种,不知道为啥面试的时候鬼使神差的去谈到了线程池,又忘记线程池是哪个类了,ExecutorService!!!
    然后创建线程池简单就直接用Executors,不过这个工具类的几种实现都有各自的局限性,推荐手动创建线程池,例如

    public final static ExecutorService POOL = new ScheduledThreadPoolExecutor(INIT_QUEUE_NUM, new BasicThreadFactory.Builder().namingPattern("thead_pool-%d").daemon(true).build());
    

    反射如何执行方法

    method.invoke() 这个记错了,记成excute了🙃

    设计理发店排队程序使用设计模式

    这个问题没想太清楚,其实功能实现很简单,但是具体用到哪个设计模式一下没反应过来,大概是想要我用组合模式吧,题目大概是说一个理发店有三个理发师,然后最多允许七位顾客来排队,多余的顾客谢绝接待这样子,这边需要使用一个队列作为顾客池,容量设置最大值7,新增顾客超过容量则需要向客户端报错,理发店需要自动工作,分配顾客池的顾客给三个理发师,因此理发师需要有个正忙的状态,分配的工具类会根据各个理发师的状态分配顾客给理发师,具体的设计可能再挖一个坑另开一篇文章写了,这里暂时只记录😀
    ps.因为需要手写代码理发店,所以有一些类、方法等命名当然要用到英文,理发店。。英文是barber shop,嗯,我写成了cut hair house😄

    Java性能问题诊断工具

    嗯,大概有jps、jstack、jmap、jstat、jhat、hprof、jvisualvm等jvm自带工具,另外有第三方工具JMC、JFR 、Tprofiler、Jprofiler、Arthas等

    MySQL查询数据库表名查询表字段命令

    > use database;
    > show tables;
    > desc table_name;
    

    一个JavaBean,只提供了get方法,没有提供set方法,如何修改私有属性的值

    我觉得这个题目比较偏门,当时没答出来,百度了一番,是可以利用反射来实现修改类属性的访问权限,代码样例

    // 创建一个JavaBean类的对象
    PrivateField privateField = new PrivateField();
    // 获取对象的Class
    Class<?> clazz = privateField.getClass();
    // 获取指定名字的私有域
    Field field = clazz.getDeclaredField("username");
    // 设置压制访问类型检查,只有这样,才能获取和设置某个具体类的Field对应的值。
    // 参数为 true时 则指示反射的对象在使用时应该取消 Java 语言访问检查。值为 false 则指示反射的对象应该实施 Java 语言访问检查。
    // 如果为true是,能够正常运行,如果为false则会抛出异常信息:java.lang.IllegalAccessException
    field.setAccessible(true);
    System.out.println(field.get(privateField));
    // 设置私有域的值
    field.set(privateField, "123456");
    // 输出被改变的属性值
        System.out.println(field.get(privateField));
    }
    
    

    其它还有很多暂时想不起来了,想起来再更新吧,晚安、好梦。

    相关文章

      网友评论

          本文标题:面试遇到的几个没注意的问题记录下来

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