兴业数金Java开发校招总结(笔试+面试)

笔试:

选择题和不定项选择:题目应该是题库出的,设计java基础知识,servlet,框架和一些微服务、中间也能看到python的一些基础知识。

算法题 最长不重复子字符串。

很简单的双指针+Hash,时间复杂度O(n),空间复杂度O(n), AC.

技术面:

总结下来:个人感觉有一些些的怪异. 问了问个人背景(学校和以前学习的课程),然后没有问关于Java或者分布式的知识,直奔数据库提问。

流程如下:

1. 确认信息无误,做个基本的自我介绍

2. 之前有过MYSQL调优的经验吗,如何调的?

答:SQL调优分为两部分,可以通过数据库设计做,比如分库分表,也可以通过提升查询语句效率去做。以查询语句为例子:

比如在查询的时候使用小表驱动大表,Order by使用索引最左列;GroupBy优化,因为Group by是建立缓冲区在分组排序,遵守最左匹配原则否则会索引失效,产生临时表。

同时开启慢查询日志,把超过阈值的查询语句抓出来做explain,通过show profile来看SQL的具体执行细节和生命周期,根据这些数据尝试改进SQL.

3. 如果一个表的索引加在字段(a,b)上,而现在去对a,b,c三个字段进行查询,是否会走索引。

答:mysql会先通过a,b字段的索引进行查询,然后带着查询出来的数据行进行一次回表查询来匹配c.

问:那就是会走索引咯?

实际面试的时候这里紧张愣住了一下,其实上面答的是没错的,但是看着面试官不自信了:emmmmmm,如果是ab的话肯定是走索引的,abc的话它超出了索引范围没有实现覆盖,所以不走索引。

面试完了觉得自己犯傻了,坚持自己第一次的回答就好。

追问:如果是(a,b)字段只查询a呢?

当然走索引,并且作为第一字段查询会很快,索引全覆盖级别甚至不用回表,好的话能达到const.

追问:如果(a,b)字段只查询b呢?

不走索引的,很明显打破了最左匹配原则。因为mysql它的底层是一颗B+树,首先按照第一字段的大小进行排列,如果缺失了聚簇索引的第一字段,无法直接查询到后面的字段。

4. having知道吗,一般和什么一起用?

如果是和聚合函数啥的比如max一起用则就是过滤用的。

不过更常见的是和它一定和Group by一起用,没有group by分组having就用不上了.

5. Groupby的使用?

其实刚刚提到了:聚合函数和普通字段一起的时候一般都要用到group by

这里随着group by追问了一下:如何在一个SQL查询里查询员工表的男女性人数?

太紧张了= =非常简单的问题,放在leetcode上肯定是easy的评级

我重复到:也就是需要对员工表做一个条件查询对吗?(也就是这句话给我自己埋下了坑)

1. 可以分别查询后做一个联合

select count(1) as 'male' from employee where sex = 'male'
union all
select count(2) as 'female' from employee where sex = 'female';

如果sex上有索引则会走索引。

但是事后想起来这是相当于进行了两次查询,效率一般。

2. 看着面试官不太满意,我说:条件查询去做,用mysql中的if进行查询,分别统计男女的人数

select

        sum(case when sex="male" then 1 else 0 end) as 'male',

        sum(case when sex = "female" then 1 else 0) as 'female'

from employee;

相当于做了聚合函数里的一个条件判断。

3. 面试官也不太满意,说提示你一下:考虑一下刚刚的group by? 这次不要说思路,直接给代码。

我恍然大悟:为啥一定要做条件判断,groupby这里不就是活生生的例子嘛。平时写sql也没少用group by,在这里反而被自己一开始卡住了,一下没反应过来。

答:select sex, count(*) from employee group by sex;

答出来了但是很险,是面试官的想要的答案。但是几经周折,卡在这么简单的问题上让自己有一点点受挫。

5. 你有做过并发相关的东西吗?怎么做的?

并发控制主要是针对堆中的线程共享内存做的并发,之前有遇到过一次并发修改异常的案例。

(这里是不是应该再提一下常见的并发控制手段?比如Syncrhonized/ Lock/ CAS/ volatile等)

当时直接讲了项目以前遇到的一个并发上的异常:简单来说是,把redis远程缓存修改为了调用本地缓存,而在读本地缓存后放在了一个List中进行储存和后续修改,当时在并发的情况下就抛出了异常,因为list在堆中并且在并发的条件下去读和写肯定是会产生覆盖的,它在迭代器中写的时候会检查版本号,如果发生了变更则会抛出并发修改异常。

当时解决没有加锁,而是通过theadloacl去做的。借鉴了一下java内存模型,因为分为主存和线程私有工作线程嘛,我需要修改的话就可以把主存的东西做一个线程私有的分配,在写入的时候再刷回到主存,而不是直接在主存上修改。

6. 之前有学过C语言的课程吗?

没有,直接主修Java,python,面向应用层编程。

7. 具体想做什么方向呢?

研发,比较偏向于Web和分布式,如果之后能够接触云会更好。

8. 说说你的缺点?

9. 说说你的优点?

10. 你认为面试的重要性?

时间紧迫,没有反问环节。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值