1. 数据库之范式
  2. 数据库之索引
  3. 线程间通信
  4. 反射
  5. 什么是字节码?采用字节码的最大好处是什么?
  6. Java如何实现一次编译到处运行的。

数据库之范式
目前关系型数据库一共有 6 种范式,按照范式级别,从低到高分别是:1NF(第一范式)、2NF(第二范式)、3NF(第三范式)、BCNF(巴斯 - 科德范式)、4NF(第四范式)和 5NF(第五范式,又叫做完美范式)。
数据库的范式设计越高阶,冗余度就越低,同时高阶的范式一定符合低阶范式的要求,比如满足 2NF的一定满足 1NF,满足 3NF 的一定满足 2NF,依次类推。
一般来说数据表的设计应尽量满足 3NF。但也不绝对,有时候为了提高某些查询性能,我们还需要破坏范式规则,也就是反范式设计。

数据库的范式越高阶,划分的表就越多,数据的冗余度就越低。
但是由于划分的表很多,做连表查询的时候性能就会比较低。
我们需要在冗余度和性能之间取平衡。

1NF 指的是数据库表中的任何属性都是原子性的,不可再分。
原子性,不可再分:如:我的业务是统计shihao这个名字的人有多少,就可以把name这一属性拆分成first name和last name

2NF 指的数据表里的非主属性都要和这个数据表的候选键有完全依赖关系。
举个栗子:比如我们设计一张球员比赛表。
球员比赛表:球员编号、姓名、年龄、比赛编号、比赛时间和比赛场地,得分。
这里候选键和主键都为(球员编号,比赛编号),我们可以通过候选键来决定如下的关系:(球员编号,
比赛编号) → (姓名, 年龄, 比赛时间, 比赛场地,得分)
但是这个数据表不满足第二范式,因为数据表中的字段之间还存在着如下的对应关系:
(球员编号) → (姓名,年龄), (比赛编号) → (比赛时间, 比赛场地)
也就是说候选键中的某个字段决定了非主属性。你也可以理解为,对于非主属性来说,并非完全依赖候选键。

这样会产生怎样的问题呢?

  1. 数据冗余:如果一个球员可以参加 m 场比赛,那么球员的姓名和年龄就重复了 m-1 次。一个比赛
    也可能会有 n 个球员参加,比赛的时间和地点就重复了 n-1 次。
  2. 插入异常:如果我们想要添加一场新的比赛,但是这时还没有确定参加的球员都有谁,那么就没法
    插入。
  3. 删除异常:如果我要删除某个球员编号,如果没有单独保存比赛表的话,就会同时把比赛信息删除
    掉。
  4. 更新异常:如果我们调整了某个比赛的时间,那么数据表中所有这个比赛的时间都需要进行调整,否则就会出现一场比赛时间不同的情况。

为了避免出现上述的情况,我们可以把球员比赛表设计为下面的三张表。
球员表包含球员编号、姓名和年龄等属性;
比赛表包含比赛编号、比赛时间和比赛场地等属性;
球员比赛关系表包含球员编号、比赛编号和得分等属性。

1NF 告诉我们字段属性需要是原子性的,而 2NF 告诉我们一张表就是一个独立的对象,也就是说一张表只表达一个意思。

3NF 在满足 2NF 的同时,对任何非主属性都不传递依赖于候选键。
也就是说不能存在非主属性 A 依赖于非主属性 B,非主属性 B 依赖于候选键的情况。

你能看到球员编号决定了球队名称,同时球队名称决定了球队主教练,非主属性球队主教练就会传递依赖于球员编号,因此不符合 3NF 的要求。

如果要达到 3NF 的要求,需要把数据表拆成下面这样:球员表的属性包括球员编号、姓名和球队名称;球队表的属性包括球队名称、球队主教练。


数据库之索引
聚集索引就是按照每张表的主键构建一棵 B+ 树,同时叶子节点中存放的是整张表的行记录数据。通常将叶子结点也称为数据页。
由于实际的数据页只能按照一棵B+树进行排序,因此每张表只能拥有一个聚集索引
由于定义了数据的逻辑顺序,聚集索引能够特别快地访问针对范围值的查询
聚集索引的另一好处是,它对于主键的排序查找和范围查找速度非常快

辅助索引(Secondary Index,也称为非聚集索引),叶子节点并不包含行记录的全部数据。叶子节点除了包含键值以外,每个叶子节点中的索引行中还包含了一个书签(bookmark)。该书签用来告诉InnoDB存储引擎哪里可以找到与索引相对应的行数据。书签就是相应行数据的聚集索引键(主键)。

聚簇索引和辅助索引

最左前缀原则:在创建多列索引时,要根据业务需求,where子句中使用最频繁的一列放在最左边。
select * from citizen where name = xxx and age =xxx;
select * from citizen where name = xxx;
select * from citizen where age = xxx;

以下两个SQL语句就是最左前缀法则的应用;

select * from citizen where name like ‘ab%’;
索引:idx_name_age type:range
select * from citizen where name like ‘%ab’;
索引:primary索引id type:all

联合索引:联合索引是指对表的多个列进行索引。

覆盖索引:SQL只需要通过索引就可以返回查询所需要的数据,而不必通过二级索引查到主键之后再去查询数据,就是避免回表操作。

select * from t_user where name="张三"
# 即普通索引查询方式,则需要先搜索name索引树(非聚簇索引),得到id的值为3,再到id索引树(聚簇索引)搜索一次。这个过程称为回表
A: select id from user_table where name= '张三'
B: select password from user_table where name= '张三'

语句A: 因为 name索引树 的叶子结点上保存有 name和id的值 ,所以通过 name索引树 查找到id后,因此可以直接提供查询结果,不需要回表,也就是说,在这个查询里面,索引name 已经 “覆盖了” 我们的查询需求,我们称为 覆盖索引
语句B: name索引树 上 找到 name=‘张三’ 对应的主键id, 通过回表在主键索引树上找到满足条件的数据

因此我们可以得知,当sql语句的所求查询字段(select列)和查询条件字段(where子句)全都包含在一个索引中(联合索引),可以直接使用索引查询而不需要回表。这就是覆盖索引。


线程间通信


反射
比如说现在我们持有了一个对象
A a = new A();
对于该对象,在不看A类代码前提下,我们根本不知道如何访问使用a对象
原因在于,我们不知道a对象中,有哪些成员(类中定义的)

我们自己定义的类,jvm天生是不认识的,但是jvm有办法认识这些类对应的数据类型
-> 通过加载并解析类对应的字节码文件

在jvm类加载的过程中,会对每一个类生成一个Class对象,一个Class对象中就包含了
一个类定义的完整信息,所以我们可以在程序运行的过程中,通过访问某个类对应的Class对象
通过访问Class对象,获取到相应的类型信息

说白了,反射,就是用来获取Class对象:
构造方法 -> 创建对象
成员变量 -> 在该类型任意对象上访问该成员变量(即使是private成员变量)
成员方法 -> 在该类型的任意对象,调用该成员方法(即使是private成员方法)

反射的优点之一是可以获取类的私有属性和行为

2. 如何获取Class对象?
通过对象
通过类的字面值常量
通过静态方法

public class Demo1 {public static void main(String[] args) throws ClassNotFoundException {//1.通过对象  Object类中的方法  getClass()Demo1 demo = new Demo1();System.out.println(demo.getClass());//2.通过类的字面值常量Class class1 = Demo1.class;System.out.println(class1);//3.Class.forName(String className)方法Class class2 = Class.forName("com.cskaoyan.mytest.Demo1");System.out.println(class2);}
}

什么是字节码?采用字节码的最大好处是什么?


一次编译,到处运行。


快速排序
树的最大深度
二叉搜索树

京东数科(实习一面)相关推荐

  1. 京东数科java咋样_校招|京东数科 Java 实习 一面

    作者:杀虫大师 来源:牛客网 京东数科Java实习一面 视频面试,35分钟 1. 自我介绍 2. 项目介绍 3. 如何设计订单系统 4. 如何设计秒杀系统,超售,重复排队,缓存雪崩 5. MyBati ...

  2. 2020.12京东数科运营岗实习面试

    1.周二晚:电话面试 为什么要投运营岗 可实习时间是什么时候 职业规划是什么 简单聊了几句之后,觉得我各方面还行,便安排了第二天北京的面试 2.周三北京面试 第一轮: 我已经记不太清问了啥问题了,or ...

  3. 京东数科一面实习面经

    京东数科面经(2021年1月13日上午11点) 面试官人挺好的,整个过程挺耐心听我讲并且还会和我一起分析,一次很有收获的面试经历. 面试总时长:43分钟 自我介绍 (没有聊项目-可能看技术栈太简单了) ...

  4. 京东数科java一面【过】

    小哥哥也太好了,给我聊了好多好多道理 总时长:57分钟 自我介绍 实习经历[聊了挺多] 集合方面 Collection[list(写时复制)/set/Queue(阻塞队列)] Map[HashTabl ...

  5. 直击JDD | 陈生强:京东数科的底层是数字化操作系统

    点击「京东数科技术说」可快速关注 11月19日,由京东集团主办的JDD-2019京东全球科技探索者大会在京开幕,京东数字科技集团CEO陈生强作了题为"以科技为美,为价值而生"的主旨 ...

  6. 青铜到王者,京东数科这个AI机器人组织有多野?

    文 | 文岚 人物 | 京东数科智能机器人产品部 图 | 段雅婧提供 这样与世无争.共建共享共荣的牧歌式关系,就需要一群心底善良又疯狂的爸爸,每天耳提面命地对自己机器人儿子授以多行好事且莫作恶的教诲. ...

  7. 50万奖金+京东数科offer,JDD-2018全球总决赛冠军诞生

    (JDD 大赛总决赛选手与导师.评委合影) 整理 | 一一 出品 | AI科技大本营 1 月 13 日,JDD-2018 京东数字科技全球探索者大赛全球总决赛落下帷幕.在经过 24 小时极限挑战和 2 ...

  8. 京东数科业务架构全披露,陈生强发布城市操作系统和京东钼媒

    11 月 20 日,在 JDD-2018 京东数字全球探索者大会上,陈生强宣布,京东数字科技(JD Digits)正式成为京东金融的母品牌,这也意味着它的业务架构逐渐明晰,主要下设了京东金融.京东城市 ...

  9. 京东数科首次公开:强一致、高性能分布式事务中间件JDTX

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 作者 | 张亮 来源 | http://1t.click/aJPE 在分布式数据库.云原生数 ...

  10. 华为+京东数科(原京东金融)面经--Java后台开发

    华为: 1.笔试中遇到的问题,如何解决的?(Scanner 如何结束循环读取数据,笔者在面试中因没有理解到Scanner类的hasNext()与hasNextLine()是阻塞方法,导致没有正确退出循 ...

最新文章

  1. PostgreSQL在何处处理 sql查询之十二
  2. microsoft .net framework专题汇总
  3. 深度优先搜索——八皇后问题
  4. .NET库和向后兼容的技巧——第1部分
  5. 最简单的视频编码器:基于libx264(编码YUV为H.264)
  6. Linux中ELF格式文件介绍
  7. spring boot+Quartz+数据库存储
  8. 金融计算机怎么调成链式,cfa计算器链式
  9. 安装python失败的方法_安装python不失败的方法
  10. MySQL数据库实验
  11. Make menuconfig详解(转)
  12. b51显微镜_1112-揭开微观世界的奥秘--显微镜发明的科学历程
  13. Ubuntu 和linux的关系
  14. 马来亚大学研究生多久毕业?这份问卷调查结果拍了拍你
  15. OracleLinux 6.4挂载NTFS盘的方法
  16. 主窗口(08):【类】QMdiSubWindow [官翻]
  17. CellID 基站定位
  18. 安卓日记——手把手教你做知乎日报
  19. Qt实现天气信息显示和温度曲线绘制
  20. sftp登录和ftp登录

热门文章

  1. java计算机毕业设计问卷调查系统源码+数据库+系统+lw文档+mybatis+运行部署
  2. python什么是函数的唯一标识_Python:从modu中唯一标识一个函数
  3. docker内debian安装php7.2 configure: error: Cannot find OpenSSL‘s <evp.h>
  4. windows 7 优化快速设置参考(实测好用)
  5. 深入理解debuginfo
  6. android文字闪动效果
  7. 知乎 API v4 整理
  8. 郭天祥ARM9架构嵌入式linux培训视频教程
  9. 课程设计-智能星座系统
  10. python的pulp包_使用Python/PuLp解决线性规划问题