面试题day4

任拓数据科技

  • 自我介绍

  • 聊我的项目

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

    {}

    权限认证,shiro、springsecurity,认证授权

  • json数据裸奔

    对数据加密,MD5加密

    权限认证,shiro

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

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

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

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

  • 平时使用最多的语言?

    Java

  • 谈谈职业规划?

  • 对公司有哪些了解?

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

思特奇

  • 自我介绍

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

    • 验证手机号是否为注册用户手机号
    • 非注册报错, 否则生成随机验证码,然后调用第三方接口给用户发送验证码
    • 将随机数保存在redis,给接口调用方返回成功信号
    • 先验证用户输入的验证码是否正确
    • 验证成功后删除redis中的验证码
    • 生成登录用的token,保存在redis,返回tokenId
  • spring注入的几种方式;

    setter注入、构造器注入、注解注入

  • bean加载步骤;

    image-20220817164519629

  • 自动配置怎么实现的;

    • @EnableAutoConfiguration:启用 SpringBoot 的自动配置机制

      自动装配核心功能的实现实际是通过 AutoConfigurationImportSelector类。

      • 获取需要自动装配的所有配置类,读取META-INF/spring.factories
      • 筛选,@ConditionalOnXXX 中的所有条件都满足,该类才会生效
    • @Configuration:允许在上下文中注册额外的 bean 或导入其他配置类

    • @ComponentScan: 扫描被@Component (@Service,@Controller)注解的 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为什么快?缓存淘汰策略?

    • 定时删除
      • 创建一个定时器,当key有过期时间时,时间一到,定时器任务就会立即执行 将expires区域和k-v区域都删除
      • 优点:节约内存
      • 缺点:cpu压力较大,此时无论cpu负载量多高,都会占用cpu来释放,影响redis的吞吐量
    • 惰性删除
      • 数据过期后,并不会立刻删除 等到该数据下次访问的时候,redis才会删除该数据,并返回该值为nil
      • 优点:节省cpu的资源
      • 缺点:可能存在大量的,无人访问的数据会一直存在服务器
    • 定期删除
      • 每秒钟定期对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过期数据删除的机制 删除的策略

    • 定时删除
      • 创建一个定时器,当key有过期时间时,时间一到,定时器任务就会立即执行 将expires区域和k-v区域都删除
      • 优点:节约内存
      • 缺点:cpu压力较大,此时无论cpu负载量多高,都会占用cpu来释放,影响redis的吞吐量
    • 惰性删除
      • 数据过期后,并不会立刻删除 等到该数据下次访问的时候,redis才会删除该数据,并返回该值为nil
      • 优点:节省cpu的资源
      • 缺点:可能存在大量的,无人访问的数据会一直存在服务器
    • 定期删除
      • 每秒钟定期对redis中每个库的数据进行轮询 轮询的数据,对过期的数据随机删除一部分 如果随机删除的数据占轮训数据的比例超过一定值,继续轮询删除
  • 实际项目中用到了redis哪些数据结构 用list做了什么

    • string 缓存 session共享 分布式锁
    • list 消息队列
    • hash 存储对象
    • set 集合
    • zset 排行榜
  • 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底层通过什么机制来实现的

    动态代理

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

    如果要代理的对象,实现了某个接口,那么Spring AOP会使用JDK Proxy,去创建代理对象

    对于没有实现接口的对象,就无法使用 JDK Proxy 去进行代理了,这时候Spring AOP会使用 Cglib 生成一个被代理对象的子类来作为代理。常用于计算接口运算时间、记录日志。

posted @ 2022-07-12 17:25  Faetbwac  阅读(34)  评论(0编辑  收藏  举报