1.Java中的override和overload的区别?

override(重写):指子类继承父类,重写父类中的方法。
overload(重载):指用一个类中,方法名相同,传参个数不同、参数类型不同、传参顺序不同的方法,与方法返回类型无关。

2.什么是值传递什么是引用传递?

值传递:传递的是存储单元中的内容,而非地址或者引用!

引用传递:引用传递是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。

Java中只有按值传递,没有按引用传递!

3.创建线程有几种方式?你喜欢哪一种,为什么?

创建线程有三种方法:

1.继承Thread类,重写run方法;

2.实现Runnable的方法;

3.使用ExecutorService、Callable、Future实现有返回结果的多线程;

但多数时间我们实现Runnable,因为java支持多实现,但不支持多继承。

4.ES是什么?简述他的优点。

ES(Elasticsearch)是一个基于Lucene的搜索服务器。
ES是分布式的不需要其他组件,分发是实时的;
ES实时搜索非常快;
ES处理多租户不需要特殊配置,学习成本较低;

5.简述你所知道的mysql的分库分表方案?

垂直拆分

垂直分表

也就是“大表拆小表”,基于列字段进行的。一般是表中的字段较多,将不常用的, 数据较大,长度较长(比如text类型字段)的拆分到“扩展表“。一般是针对那种几百列的大表,也避免查询时,数据量太大造成的“跨页”问题。

垂直分库
垂直分库针对的是一个系统中的不同业务进行拆分,比如用户User一个库,商品Producet一个库,订单Order一个库。 切分后,要放在多个服务器上,而不是一个服务器上。为什么? 我们想象一下,一个购物网站对外提供服务,会有用户,商品,订单等的CRUD。没拆分之前, 全部都是落到单一的库上的,这会让数据库的单库处理能力成为瓶颈。按垂直分库后,如果还是放在一个数据库服务器上, 随着用户量增大,这会让单个数据库的处理能力成为瓶颈,还有单个服务器的磁盘空间,内存,tps等非常吃紧。 所以我们要拆分到多个服务器上,这样上面的问题都解决了,以后也不会面对单机资源问题。

水平拆分

水平分表

针对数据量巨大的单张表(比如订单表),按照某种规则(RANGE,HASH取模等),切分到多张表里面去。 但是这些表还是在同一个库中,所以库级别的数据库操作还是有IO瓶颈。不建议采用。

水平分库分表
将单张表的数据切分到多个服务器上去,每个服务器具有相应的库与表,只是表中数据集合不同。 水平分库分表能够有效的缓解单机和单库的性能瓶颈和压力,突破IO、连接数、硬件资源等的瓶颈。

水平分库分表切分规则

RANGE

从0到10000一个表,10001到20000一个表;

HASH取模

一个商场系统,一般都是将用户,订单作为主表,然后将和它们相关的作为附表,这样不会造成跨库事务之类的问题。 取用户id,然后hash取模,分配到不同的数据库上。

地理区域

比如按照华东,华南,华北这样来区分业务,七牛云应该就是如此。

时间

按照时间切分,就是将6个月前,甚至一年前的数据切出去放到另外的一张表,因为随着时间流逝,这些表的数据 被查询的概率变小,所以没必要和“热数据”放在一起,这个也是“冷热数据分离”。

6.简述shrio实现权限控制的原理。

  • 应用代码调用Subject(当前登录用户)控制期限
  • Subject在shiro框架内部调用Shiro在shiro框架里调用Shiro SecurityManager 安全管理器
  • 安全管理器调用 Realm (程序和安全数据连接器 )。
  • Subject如果要进行任何操作都西亚哟调用安全管理(底层自动实现),而安全管理器会调用指定的Realms对象,来连接安全数据。
  • Realms用来编写安全代码逻辑和访问安全数据,是连接程序和安全数据的桥梁。

7.IOC和AOP分别是什么,原理呢?

IOC:控制反转,一种思想,将创建Bean的工作交给框架去完成;
实例化一个 java 对象有三种方式:使用类构造器,使用静态工厂方法,使用实例工厂方法,当使用 spring 时我们就不需要关心通过何种方式实例化一个对象,spring 通过控制反转机制自动为我们实例化一个 对象。

AOP:面向切面编程,一种思想,将服务,模块,方法,想象成一个个的切面,在前面的前后进行一些操作,,权限验证,事物管理,记录日志等公用操作处理的过程就是面向切面编程的思想。

8.三根不均匀的绳子,每根绳子烧完是一个小时,如何实现计时一个小时十五分钟。

第一根和第二根同时点,第一根点一头,第二根点两头
在第二根燃完后(30分钟),点燃第一根的另一头
前两根燃完后(15分钟),点燃第三根的两头
全部燃完后(30分钟)
一共就是1小时15分钟.

9.数据库:

Student(S#,Sname,Sage,Ssex)学生表,

Course(C#,Cname,T#)课程表,

SC(S#,C#,score)成绩表,

Teacher(T#,Tname)教师表。

问题

1.查询“001”课程比“002”课程成绩高的所有学生的学号;

    select a.S# 
    from 
        (select s#,score from SC where C#='001')a,
        (select s#,score,from SC where C#='002') b

     where 
        a.score>b.score 
        and 
        a.s#=b.s#;

2、查询平均成绩大于60分的同学的学号和平均成绩;

    select S#,avg(score)

    from sc

    group by S# 
    having avg(score) >60;

3、查询所有同学的学号、姓名、选课数、总成绩;

 select Student.S#,Student.Sname,count(SC.C#),sum(score)

 from Student 
 left Outer join SC 
    on 
    Student.S#=SC.S#

 group by Student.S#,Sname

4、查询各科成绩最高和最低的分:以如下形式显示:课程ID,最高分,最低分

    SELECT L.C# As 课程ID,L.score AS 最高分,R.score AS 最低分

    FROM SC L ,SC AS R

    WHERE L.C# = R.C# and

        L.score = (SELECT MAX(IL.score)

                      FROM SC AS IL,Student AS IM

                      WHERE L.C# = IL.C# and IM.S#=IL.S#

                      GROUP BY IL.C#)

        AND

        R.Score = (SELECT MIN(IR.score)

                      FROM SC AS IR

                      WHERE R.C# = IR.C#

                  GROUP BY IR.C#

                    );