ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

面试题day4

2022-07-12 17:31:31  阅读:142  来源: 互联网

标签:面试题 加锁 synchronized Lock day4 死锁 线程 方法


任拓数据科技

  • 自我介绍

  • 聊我的项目

  • 项目中的网页有没有安全机制?防sql注入等等

  • json数据裸奔

    对数据加密,MD5加密

    权限认证,shiro

  • 项目中遇到的问题?跨域

  • 为什么跨域?解决方法?

  • 几个算法(括号匹配、排序高考分数、身份证号码索引)

  • 说我的简历好像没有体现对代码的热爱?没有什么内容,基本上都是学校的课程任务。

  • 平时使用最多的语言?

    Java

  • 谈谈职业规划?

  • 对公司有哪些了解?

  • 反问?(技术栈、新人学习机会)

思特奇

  • 自我介绍

  • 介绍项目,权限控制怎么做的;

  • spring注入的几种方式;

  • bean加载步骤;

  • 自动配置怎么实现的;

  • 重载和重写的区别;

    重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。

    重载是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。

  • 抽象类和接口的区别;

    • 单继承多实现

    • 抽象类可以有成员变量,而接口中只可有常量final

    • 抽象类可有有成员方法用(public、protected和default),而接口中只有抽象方法(public)

    • 抽象类可以有构造器,而接口不能有构造器

  • 抽象方法能不能加final;

    final修饰类不能继承,方法不能重写,变量不能修改

  • 集合框架中的线程安全类你知道那些;

    StringBuffer

    list Vector

    HashTable ConcurrentHashMap

    ArrayBlockingQueue

    AtomicLong AtomInteger

  • 进程和线程的区别;

    进程是运行的程序

    线程是操作系统能够进行运算调度的最小单位

  • 创建线程的方式;

    继承Thread类创建线程,并重写该类的run(),调用线程的start()

    实现Runnable接口,并实现run(),作为Thread的参数,调用线程的start()

    实现Callable接口,并实现call(),创建该类的实例,Future Task类来包装Callable对象,FutureTask对象作为Thread对象的target创建并启动线程

    线程池

  • 说说锁重入;

    可重入锁:自己可以再次获取自己的内部的锁。比如有线程A获得了某对象的锁,此时这个时候锁还没有释放,当其再次想获取这个对象的锁的时候还是可以获取的,如果不可锁重入的话,就会造成死锁。

  • sleep和wait的区别;

    sleep方法没有释放锁,wait方法释放了锁

    sleep()方法可以在任何地方使用,wait()方法只能在synchronized方法或synchronized块中使用

  • 数据库优化了解哪些;

    多表关联最多2张

    使用left join或right join代替not in和exist

    不使用外键和触发器

    查找避免索引失效

    逻辑删除

    更新使用id作为条件,更新非索引字段

    增加 id有顺序

  • 索引何时失效;

    违背最左前缀匹配原则

    对索引字段做函数操作

    隐式类型转换

    != 或 <>

  • 左右外连接;

    外连接 保留所有行,无对应补null

    左连接 保留条件都相等的行及左表未对应的行,无对应补null

    有链接 保留条件都相等的行及右表未对应的行,无对应补null

    内连接 只保留两表条件都相等的行

  • 视图的好处。

    视图能够简化用户的操作

    视图使用户能以多种角度看待同一数据

    视图重构数据库提供了一定程度的逻辑独立性

    视图能够对机密数据提供安全保护

    视图能够更清晰的表达

蚂蚁金服

  • 半小时,上来先简单自我介绍一下再简要介绍项目。

  • 项目有用到redis,说说redis两种持久化的方式和特点(第一次面太紧张说着说着给忘了)、再说说缓存雪崩、缓存击穿缓存穿透吧,解决办法?redis为什么快?缓存淘汰策略?

  • 说说springmvc一些常用注解和作用

  • 简单说说cookie做什么的?session又是什么?它们直接的关系?

    记录客户状态的机制

    cookie数据存放在客户的浏览器上,session数据放在服务器上。

    cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。

    session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。

  • 说说浏览器输入网址到返回页面的过程?

    dns

    ip

    tcp

    http

  • 如果服务器返回不是静态的页面?动态的?

    json数据

  • 说说线程之间的同步方式?

    原子变量

    volatile

    synchronized

    reentrantLock

  • 两个不同的JVM的进程如何同步?

    文件锁

  • 消息中间件,可靠性消息?

  • 分布式事务?

  • MySQL(GBK编码下)有个字符串”coder李四110”它们的char_length()和length()函数的值?

    length()字节 2*2+8

    char_length()字符 5+2+3

招银网络

  • 自我介绍

  • 项目用到redis redis过期数据删除的机制 删除的策略

  • 实际项目中用到了redis哪些数据结构 用list做了什么

  • kafka 如何保证消费者不会重复消费数据

  • offset自动提交还是消费完之后才提交offset

  • kafka有没有什么确认机制保证消息一定写入kafka集群当中

  • 哈希表的作用 哈希表使用的数据结构 哈希内部解决哈希冲突的方式有哪几种

    快速的插入操作和查找操作

    再哈希法

    链地址法

  • 多线程环境下为什么要引入同步的机制

    同步机制可以实现线程之间的通信,同步机制保证共享资源只能被一个线程所持有,

    避免了多线程执行时数据的不安全问题.

  • java内部有哪些同步的机制 回答 synchronized 和 reentrantLock 问 这两种锁有哪些区别

    1. 原始构成
      • Synchronized是关键字属于JVM层面,
        monitorenter(底层是通过monitor对象来完成,其实wait/notify等方法也依赖monitor对象只有在同步块或方法中才能调wait/notify等方法)
        monitorexit
      • Lock 是具体类(java.util.concurrent.locks.lock)是api层面的锁
    2. 使用方法
      • Synchronized 不需要用户手动释放锁,当synchronized代码执行完成后系统会自动让线程释放对锁的占用
      • Reentrantlock则需要用户去手动释放锁若没有主动释放锁,就有可能导致出现死锁的现象。
        需要lock()和unlock()方法配合try/finally语句块来完成
    3. 等待是否可中断
      • synchronized不可中断,除非抛出异常或者正常运行完成。
      • Reentrantlock 可中断,
        • 设置超时方法。tryLock(Long timeout,TimeUnit unit)
        • lockInterruptibly()放代码块中,调用interruptibly()方法可中断。
    4. 加锁是否公平
      • synchronized非公平锁
      • Reentrantlock俩者都可以,默认非公平锁,构造方法可以传入boolean值,true为公平锁,false为非公平锁。
    5. 锁绑定多个条件Condition
      • synchronized没有
      • Reentrantlock用来实现分组唤醒需要唤醒的线程们,可以精确唤醒,不像synchronized随机唤醒或者唤醒全部线程。
  • 多线程什么场景下会发生死锁

    当两个(或更多)线程(进程)相互持有对方所需要的的资源,又不主动释放,导致所有人都无法继续前进,导致程序陷入无尽的阻塞,这就是死锁

  • 有什么具体的办法可以避免死锁

    1. 避免多次锁定。尽量避免同一个线程对多个 Lock 进行锁定。例如上面的死锁程序,主线程要对 A、B 两个对象的 Lock 进行锁定,副线程也要对 A、B 两个对象的 Lock 进行锁定,这就埋下了导致死锁的隐患。
    2. 具有相同的加锁顺序。如果多个线程需要对多个 Lock 进行锁定,则应该保证它们以相同的顺序请求加锁。比如上面的死锁程序,主线程先对 A 对象的 Lock 加锁,再对 B 对象的 Lock 加锁;而副线程则先对 B 对象的 Lock 加锁,再对 A 对象的 Lock 加锁。这种加锁顺序很容易形成嵌套锁定,进而导致死锁。如果让主线程、副线程按照相同的顺序加锁,就可以避免这个问题。
  • Http的请求报文和响应报文各有哪几部分组成

    请求行 请求头 请求体

    响应行 响应头 响应体

  • Http 协议和TCP协议的关系是什么

    http协议是应用层协议,主要是解决如何包装数据。而tcp协议是传输层协议,主要解决数据如何在网络中传输。

  • Http TCP 都有保活 keep-alive 机制 两者有什么区别

    HTTP协议(七层)的Keep-Alive意图在于连接复用,希望可以短时间内在同一个连接上进行多次请求/响应

    TCP协议(四层)的KeepAlive机制意图在于保活、心跳,检测连接错误。

  • 实际项目中有用到Spring AOP模块吗 主要用来做什么 答:记录日志 为什么用AOP记录日志

  • AOP底层通过什么机制来实现的

  • Spring 内部具体有哪几种代理的方式呢

标签:面试题,加锁,synchronized,Lock,day4,死锁,线程,方法
来源: https://www.cnblogs.com/faetbwac/p/16470903.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有