字节跳动数据开发面试复盘Hive 数据仓库分层可以看我这篇文章Hive 数据仓库分层
爬楼梯问题经典的递归问题,也可以优化一下题目来源: LeetCode 70. 爬楼梯
递归解法1234567891011class Solution { public int climbStairs(int n) { if(n == 1){ return 1; }else if(n == 2){ return 2; }else{ return climbStairs(n - 1) + climbStairs(n - 2); } }}
递归优化算法用常规的递归去解决这个问题,但会带来一个问题,即超出时间限制因此,可以用 Map 去做一个缓存,类似于减枝的效果,可以显著降低递归带来的重复计算问题这里呢,有点像是动态规划,用一个缓存表去减少递归的计算量,由于我也不太会动态规划, ...
JUC面试题volatile关键字的作用?一个共享变量(类的成员变量、类的静态成员变量)在被 volatile关键字 修饰之后,那么就具备了两层语义:
保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的
禁止进行指令重排序
volatile和synchronized的区别
volatile 本质是在告诉 jvm 当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取synchronized 则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住
volatile 仅能使用在变量级别synchronized则可以使用在变量、方法、和类级别的
volatile仅能实现变量的修改可见性,并不能保证原子性synchronized则可以保证变量的修改可见性和原子性
volatile不会造成线程的阻塞synchronized可能会造成线程的阻塞
volatile标记的变量不会被编译器优化synchronized标记的变量可以被编译器优化
旋转数组的最小数字剑指 Offer 第11题 简单题 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。
给你一个可能存在 重复 元素值的数组 numbers ,它原来是一个升序排列的数组,并按上述情形进行了一次旋转。请返回旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一次旋转,该数组的最小值为 1。
注意,数组 [a[0], a[1], a[2], ..., a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], ..., a[n-2]] 。
示例1
输入: numbers = [3,4,5,1,2]输出: 1
示例2
输入: numbers = [2,2,2,0,1]输出: 0
查看提示
n == numbers.length1 <= n <= 5000-5000 <= numbers[i] <= 5000numbers 原来是一个升序排序的数组,并进行了 1 至 n 次旋转
...