2020年腾讯实习一面题目解答

  • 1. HTTPS如何保证安全通信?

传输加密的流程

原先HTTP是应用层将数据直接给到TCP进行传输,现在HTTPS改成应用层将数据给到TLS/SSL,将数据加密后,再给到TCP进行传输。

数据加密后再传输,而不是任由数据在复杂而又充满危险的网络上明文裸奔,在很大程度上确保了数据的安全。这样的话,即使数据被中间节点截获,坏人也看不懂。

详细解释:​ https://blog.csdn.net/d06110902002/article/details/106432674 ​

  • 2. Java内存模型?

我们常说的JVM内存模式指的是JVM的内存分区;而Java内存模式是一种虚拟机规范。

Java虚拟机规范中定义了Java内存模型(Java Memory Model,JMM),用于屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的并发效果,JMM规范了Java虚拟机与计算机内存是如何协同工作的:规定了一个线程如何和何时可以看到由其他线程修改过后的共享变量的值,以及在必须时如何同步的访问共享变量。

原始的Java内存模型存在一些不足,因此Java内存模型在Java1.5时被重新修订。这个版本的Java内存模型在Java8中仍然在使用。

Java内存模型(不仅仅是JVM内存分区):调用栈和本地变量存放在线程栈上,对象存放在堆上。

  • 一个本地变量可能是原始类型,在这种情况下,它总是“呆在”线程栈上。
  • 一个本地变量也可能是指向一个对象的一个引用。在这种情况下,引用(这个本地变量)存放在线程栈上,但是对象本身存放在堆上。
  • 一个对象可能包含方法,这些方法可能包含本地变量。这些本地变量仍然存放在线程栈上,即使这些方法所属的对象存放在堆上。
  • 一个对象的成员变量可能随着这个对象自身存放在堆上。不管这个成员变量是原始类型还是引用类型。
  • 静态成员变量跟随着类定义一起也存放在堆上。
  • 存放在堆上的对象可以被所有持有对这个对象引用的线程访问。当一个线程可以访问一个对象时,它也可以访问这个对象的成员变量。如果两个线程同时调用同一个对象上的同一个方法,它们将会都访问这个对象的成员变量,但是每一个线程都拥有这个成员变量的私有拷贝。

详细解释:https://zhuanlan.zhihu.com/p/29881777

 

  • 3. 垃圾回收器和垃圾回收机制介绍?

垃圾回收器:

有关其不同特点及应用场景详见:https://blog.csdn.net/tjiyu/article/details/53983650

垃圾回收机制:

 Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用空闲的内存。

  ps:内存泄露是指该内存空间使用完毕之后未回收,在不涉及复杂数据结构的一般情况下,Java 的内存泄露表现为一个内存对象的生命周期超出了程序需要它的时间长度,我们有时也将其称为“对象游离”。

垃圾回收机制中的算法:

1. 引用计数法(Reference Counting Collector)

2. tracing算法(Tracing Collector) 或 标记-清除算法(mark and sweep)

3. compacting算法 或 标记-整理算法

4. copying算法(Compacting Collector)

5. generation算法(Generational Collector)

详细分析见:https://www.cnblogs.com/sunniest/p/4575144.html

 

  • 4. MySQL 如何保证查询效率?

 

1、优化索引、SQL语句、分析慢查询;

2、设计表的时候严格根据数据库的设计三范式来设计数据库

3、使用缓存,把经常访问的数据而且不需要经常变化的数据放在缓存中,能节省磁盘IO;

4、优化硬件,采用SSD,使用磁盘队列技术(RAID0、RAID1、RAID5)

5、采用MySQL内部自带的表分区技术,把数据分成不同的文件,能提高磁盘的读取效率;

6、垂直分表;把一些不经常读的数据放在一张表里,节约磁盘I/O;

7、主从分离读写;采用主从复制把数据库的读操作和写入操作分离开来;

8、分库分表分机器(数据量特别大),主要的操作原理就是数据路由;

9、选择合适的表引擎,参数上的优化;

10、进行架构级别的缓存,静态化和分布式;

11、不采用全文索引;

三范式:

第一范式:要求有主键,并且要求每一个字段原子性不可再分
第二范式:要求所有非主键字段完全依赖主键,不能产生部分依赖
第三范式:所有非主键字段和主键字段之间不能产生传递依赖

 

  • 详细解释下explain?

EXPLAIN是什么?

  使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道Mysql是如何处理你的SQL语句的。分析你的查询与或是表结构的性能瓶颈。

详细解释:https://zhuanlan.zhihu.com/p/101087603

 

  • 5. B+树结构?

B+Tree的定义

B+Tree是B树的变种,有着比B树更高的查询性能,来看下m阶B+Tree特征:

1、有m个子树的节点包含有m个元素(B-Tree中是m-1)

2、根节点和分支节点中不保存数据,只用于索引,所有数据都保存在叶子节点中。

3、所有分支节点和根节点都同时存在于子节点中,在子节点元素中是最大或者最小的元素。

4、叶子节点会包含所有的关键字,以及指向数据记录的指针,并且叶子节点本身是根据关键字的大小从小到大顺序链接。

详见:https://blog.csdn.net/scj1014/article/details/100088640

 

  • 6. 回文子串?

class Solution {
    public int countSubstrings(String s) {
        int n = s.length(), ans = 0;
        for (int i = 0; i < 2 * n - 1; ++i) {
            int l = i / 2, r = i / 2 + i % 2;
            while (l >= 0 && r < n && s.charAt(l) == s.charAt(r)) {
                --l;
                ++r;
                ++ans;
            }
        }
        return ans;
    }
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值