当前位置:网站首页>2.整理华子面经--2

2.整理华子面经--2

2022-04-23 20:50:00 兴趣使然的CV工程师

你知道的加密算法?

MD5算法:使用哈希函数,它不是加密算法而是散列算法,它的典型应用是对一段信息产生信息摘要,以防止被篡改,无论多长的输入,md5都会输出一个128bits的一个串

SHA1算法:与MD5一样流行的散列算法,安全性强于MD5,但是慢与MD5,基于MD5,SHA1的信息摘要特性以及不可逆,可以被应用在检查文件完整性以及数字签名等场景

AES算法:对称的块加密算法,加解密的过程可逆

RSA算法:非对称加密算法,RSA是第一个能同时用于加密和数字签名的 算法,能地方到目前为止已知的所有密码攻击,它基于一个十分简单的数论事实:将两个大的素数相乘十分容易,但是想要对其乘积进行因式分解却十分困难,所以可以将其乘积公开作为加密密钥

数字签名:提供可鉴别的数字信息来验证自己身份的一种方式

加密:对明文或者数据按照某种算法处理,使其不可读

解密:加密的逆过程,将编码信息转化为原来数据的过程

对称加密/非对称加密:加密和解密的密钥相同/不同,对称算法的密钥难以管理,一般不适合于互联网,用于内部系统,加密/解密速度快,适合大数据量的处理,非对称算法密钥容易管理,安全性高,但是加密速度慢,适合小数据量加密或者数据签名

快速排序的思想?

  1. 先从数列中选取一个数作为基准数
  2. 分区过程中,将比这个数大的数放在它的右边,小于或等于它的数全放在它的左边
  3. 重复上一个步骤,知道左右区间只剩下一个数

如何计算有重复字符的全排列数?

统计全部字符的数量,和每个重复字符的数量,结果为全部数字的全排列/重复字符的全排列

public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String s=scanner.nextLine();
        HashMap<Character, Integer> map = new HashMap<>();
        for (int i = 0; i < s.length(); i++) {
            map.put(s.charAt(i),map.getOrDefault(s.charAt(i),0)+1);
        }
        int tol=getPermute(s.length());
        for (Map.Entry<Character, Integer> entry : map.entrySet()) {
            if(entry.getValue()!=1){
                tol/=getPermute(entry.getValue());
            }
        }
        System.out.println(tol);

    }
    public static int getPermute(int n){
        int res=1;
        while (n!=1){
            res*=n;
            n--;
        }
        return res;
    }

AOP的概念?

aop为面向切面编程,可以处理日志,事务,异常等

  • target:目标类
  • 通知:需要增强或者增加的功能,定义了切面的"什么"与"何时"
  • 连接点:应用执行过程中,能插入切面的时机
  • 切点:时机运行中,选择插入切面的连接点,定义了哪些点得到了增强,定义了何处
  • 切面:把横切关注点模块化为特殊类,这些类叫做切面
  • 引入:允许向现有类添加新方法和属性
  • 织入:把切面应用到目标对象并且创建新的代理对象的过程

 Dao接口里的方法怎么和xml里的语句进行关联?

MyBatis在初始化SqlSessionFactoryBean的时候,找到配置需要扫描的基本包路径区解析里面所有的XML文件

MyBatis会把每个sql标签封装成sqlSource对象,然后根据sql语句的不同,又分为动态sql和静态sql,其中静态sql包含一段String类型的sql语句,而动态sql是由一个个sqlNode组成(IfNode,WhereNode等)

XML文件中的每个sql标签就对应一个mapperStatement对象,它有两个很重要的属性:id为全限定类名+方法名,sqlSource;

创建完mapperStatement对象后会将其缓存在Configuration中,这样Configuration就包含了所有的sql信息,以后执行MyBatis方法的时候,就会通过全限定类名+方法名找到MappedStatement对象,然后解析里面的sql内容即可

主键索引和唯一索引哪个效率高?

普通索引保存的都是主键的地址,然后再根据主键去查询,所以要检索两次,因此主键索引效率高于唯一索引

Mysql为什么对字段使用函数就不走索引了?还有什么情况不走索引

对索引的字段做函数操作,可能会破坏索引值的有序性美因茨优化器就决定放弃走树搜索的功能,需要注意的是,优化器并不是要放弃使用这个索引

  • 隐式类型转换不走索引:比方说tradeid本来是varchar,结果写成了如下sql
mysql> select * from tradelog where tradeid=110717;
  • 不遵守最左前缀原则对复合索引的查询的操作

为什么HashMap线程不安全?

主要原因来在于resize扩容操作

在put的时候导致的多线程数据不一致,比如两个线程a和b,a希望插入一个记录到map中,首先计算桶的索引坐标,然后去获取链表头节点,此时a时间片用完,b得以执行,和a一样执行,只不过b成功插入了记录,此时a对b的行为一无所知,假设a记录插入索引和b记录插入索引一致,那么a的插入就会覆盖b的记录

在get的时候引起死循环,由1.7以前的头插法造成,resize方法的时候再迁移到新桶过程中,使用了头插法,假设有一个这样的链表1->2,在扩容的时候,使用头插会使得它在新桶的数据变为2->1,如果线程a还没来得及修改1的后继节点,线程b就执行了插入,就会导致死循环

MySQL的delete和truncate的区别?

delete是一条一条删除记录的,配合事件和回滚可以找回数据,并且自增不会重置

truncate是直接删除整个表,然后创建一个一模一样的新表,auto_increment会被重置,且数据无法找回

Mysql如何建立用户和更改密码?

创建用户:Create User 'aaa' identified by '123456';创建新用户,名为aaa密码为123456

更改密码:Set password for 'aaa' =Password("123");

忘记了root账户的密码:

  • mysqld --skip-grant-tables 跳过mysql的用户验证
  • 通过update user set password=password('root') where user='root' and host='localhost'更改密码

版权声明
本文为[兴趣使然的CV工程师]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_51211461/article/details/124359894