上周刚面完百度,首次面试的经验不足,还是有一点挫败感的,看到同学在群里的招聘信息(内推邮箱),我还是在很短时间内修改了简历并投递了滴滴的算法岗实习,在第二天就收到了滴滴的面试电话,我突然又进入到了比较紧张的准备状态。
  正所谓初生牛犊不怕虎,自己本事没到家,但还要努力尝试,增长经验和阅历,把在百度面试过程中答得比较模棱两可、逻辑混乱的知识重新梳理一遍,将数据结构的一些排序算法背过并默写,时间有限,我只把我比较熟悉的重新复习,已达到熟练的程度。剩下的就交给命运。

面试前

  时间飞逝,短短四天,只做了梳理工作,没有其他的学习,骑上私人小宝马----摩拜,穿梭在去滴滴的小路上,看着路边的景色,仿佛心情平静了下来,不骄不躁,做最真实的自己。临近公司附近,导航竟然连林荫小道都找得到,那是一个“这草坪上本来没有路,走的人多了,也便成了路”的典型,穿过去换到了平坦的似公园内的人行道,在上坡经过一个小兰亭,哦买噶,是仅能一个人通过的、有工作人员看守的、手动开关的网状小铁门,这导航越做越无敌了!通过它,我看到了开阔的视野,大片的草坪环绕着,滴滴在中央,虽然不大,但是环境挺优雅。
  在外面稍等了片刻,回忆回忆自己准备的东西,随后联系面试官,将我带到了会议室,进行题目考察。

面试中

问题1:给定一个螺旋矩阵,依次从小到大进行打印
[[ 1, 2, 3, 4, 5, 6, 7],
[18,19,20,21,22,23, 8],
[17,28,27,26,25,24, 9],
[16,15,14,13,12,11,10]]

答:(代码不给出了,因为我答的这种方式不是面试官想要的解答)
使用java语言,遍历二维数组将数据存到一个一维数组里边,使用冒泡排序法进行排序输出。

面试官意见:能否用控制索引来循环输出 (当时尝试写了十分钟,没有搞定,结束条件没有总结出来)

正解:
寻找规律
1x1矩阵 环绕1周
2x2矩阵 环绕1周
3x3矩阵 环绕2周
4x4矩阵 环绕2周
5x5矩阵 环绕3周
6x6矩阵 环绕3周

得出结论:环绕圈数 行数/2 向上取整

代码实现:

import math
''' coding by Li at 2019-08-26 '''
def sort_print():
    arr = [ [1, 2, 3, 4, 5, 6, 7],
            [18,19,20,21,22,23, 8],
            [17,28,27,26,25,24, 9],
            [16,15,14,13,12,11,10]]
    # 获取行数、列数
    n_row = len(arr)
    n_col = len(arr[0])
	# 取值范围0~(行数/2 向上取整)
    for i in range(math.ceil(n_row/2)):
        # 先从第一行开始遍历 1,2,3,4,5,6,7
        # i = 0 j=[0-6]
        for j in range(i,n_col-i):
            print(arr[i][j])

        # 遍历竖的一列 7,8,9,10
        # i=[1-3] j=7
        for j in range(i+1,n_row):
            print(arr[j][n_col-i-1])

        # 遍历底层一行 [16,15,14,13,12,11,10]
        # i = 3 j=[6-0]
        for j in range(n_col-i-2,i-1,-1):
            print(arr[n_row-i-1][j])

        # 遍历左边一竖 16,17,18
        # i = [2,1] j=[0]
        for j in range(n_row-i-2,i,-1):
            print(arr[j][i])

        # 循环一轮 标志
        print('-------------------')

if __name__ == '__main__':
    sort_print()

问题2:sql按时间统计订单数量

问题描述: 给定三张数据库

Basic表数据:

第一问:使用sql统计一小时内有效订单的数量(订单产生时间)

insert into view(cid,order_num,insert_time,time_hour) 
select 
	cid,
count(*) as num ,
	NOW(),					# NOW()获取当前日期
	DATE_FORMAT(order_form_time,'%Y-%m-%d %H:00:00') as date	
from basic 
where flag=1					# 选择有效的数据
group by date
order by date;

执行结果查看view表

第二问:按15分钟统计订单数量

insert into view_minute(cid,order_num,insert_time,time_minute) 
SELECT cid,COUNT( * ) AS num,NOW(),time
FROM
	(
	select
			cid,
			DATE_FORMAT(
				CONCAT(Date(order_form_time),' ',
				HOUR(order_form_time),':',
				FLOOR(MINUTE(order_form_time) / 15)*15),
				'%Y-%m-%d %H:%i'
			)as time,
			flag
	from basic 
where flag=1
) a 
GROUP BY DATE_FORMAT( time, '%Y-%m-%d %H:%i' ) 
ORDER BY time;

效果如下:

面试结束

  面试完题目之后,面试官跟我说了很多中肯的意见,我觉得面试不单单是要找工作,也是一次学习的机会,不会的地方要抽时间补足,既然选择了做这一行,就加油吧!期待明天会更好!