京东数科(实习一面)

  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);}
}

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


一次编译,到处运行。
在这里插入图片描述


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/62515.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

360数科发布2020全年财报:全年收入上涨47.1%,科技为运营效率提供第一动力

3月16日,360数科发布2020年第4季度及全年未经审计的财务报告。2020财年,360数科实现收入135.64亿元,较2019年92.2亿元增长47.1%;非美国会计准则(Non-GAAP)下净利润为37.97亿元,较2019年27.52亿元…

不追逐标准化产品,360数科的一站式风控体系有何不同?

新冠肺炎疫情无疑加速了金融行业数字化转型,竞争者不断涌入,逐渐形成由BATJ、传统银行旗下金融科技子公司、以及专注于金融机构的数字化服务公司构成的竞争格局。然而,风控始终是金融行业的核心。作为定位于中国零售金融领域科技服务商的360数…

没有场景,不做单点技术输出,360数科如何做金融科技的最佳实践?

作者 | Just 出品 | AI科技大本营(ID:rgznai100) 从互联网金融公司转变为金融科技公司,品牌升级后的360数科强化了“科技”的外衣。 在近期的首个360数科技术开放日,360数科CEO吴海生表示,他们已经做好金融科技的最佳…

融象数科Java开发实习记录(一)

遇到的问题和解决方法 maven安装依赖卡死 重启等方法无效。 解决办法 修改maven Importing的jvm参数, 默认为700多, 直接修改成 -Xms1024m -Xmx2048m后端启动后,访问前端出现数据库字段无法识别错误 数据库和前后端代码无错,重新安装依赖无效&#…

联通数科一面+二面+面谈 经验分享 base济南

联通数科一面二面面谈 10.8 投递简历(大数据开发岗位 base西安 有成都岗? 我怎么没看到) 10.10-12 笔试 11.05 一面 有五六个面试官 问了问题的有两个 介绍了下项目,问了些每个组件的基础知识,都是大数据的基本八股…

京东数科Java一面面经

1.哪些情况不要创建索引 哪些情况不要创建索引 1)表记录太少 300万数据时MySQL性能就开始下降了,这时就可以开始开始优化了 2)经常增删改的表 提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。 因为更新表…

联通数科面试准备

Spring中Bean的生命周期 Spring Bean的生命周期全过程分为5个阶段,创建前准备阶段、创建实例阶段、依赖注入阶段和容器缓存阶段以及销毁实例阶段。 阶段1:创建前准备阶段这个阶段主要是在开始Bean加载之前,从Spring上下文中去获取相关的配置…

360数科华丽财报下的增长困局

配图来自Canva 8月24日,360数科发布了2020年第二季度财报,这也是自8月7日360金融升级为360数科之后的第一份财报。 财报数据显示,360数科本季度财报营收、利润均实现了大幅度上涨,综合科技服务收入增长尤其明显,成为…

京东数科统一接入网关JDDLB性能优化之QAT加速卡

京东数科JDDLB作为京东数科最重要的公网流量入口,承接了很多重要业务的公网流量。目前,已成功接替商业设备F5所承载的流量,并在数次618、双十一大促中体现出优越的功能、性能优势。 本文作为京东数科七层负载 | HTTPS硬件加速 (Freescale加速…

ITest:京东数科接口自动化测试实践

导读:你是否为每天“点点点”的工作而感到索然无味?你是否苦于没有合适的工具而对复杂的测试任务望而却步?频繁变动的接口,重复的功能测试,你,疲惫么?京东数科平台开发团队基于日常接口测试经验…

Thinkphp5 使用Paypal 支付

1,首先前往官网https://www.paypal.com 创建一个账户,我创建的是一个企业账户 2,前往paypal开发者平台https://developer.paypal.com/ 进行创建应用(使用谷歌自带的翻译,把网页翻译过来....) 3&#xff0c…

OpenCart中PayPal Payments Standard(Paypal 标准支付方式)设置

当你安装Install (Paypal 标准支付方式)PayPal Payments Standard这个支付方式后&#xff0c;编辑Edit它&#xff0c;需要填写许多参数。 本教程<< OpenCart中PayPal Payments Standard(Paypal 标准支付方式)设置 >>由 OpenCart中国网站 制作&#xff0c;转…

paypal国际支付的对接,使用tp5开发paypal

前言 paypal是一种国际支付&#xff0c;并且是一个免费的产品&#xff0c;用户支付并不需要扣除用户消费的手续费&#xff0c;只在商家端扣除的&#xff0c;是一个不错的国际支付 2.下载 直接到github下载php-sdk包&#xff0c;我下载完直接在extend中使用 使用 <?p…

Stripe国际支付平台接入

Stripe 是一家科技公司&#xff0c;致力于为互联网经济打造基础设施。所有公司&#xff0c;无论规模大小&#xff0c;从初创公司到上市企业&#xff0c;都可以用我们的软件来收款和管理他们的线上业务。 引用stripe 公司介绍的一段话&#xff1a;“我们的使命是&#xff1a;增…

TP5集成PayPal支付

项目需要使用到PayPal支付,在网上找了一圈大多写的太过简陋不易看懂,在这里详细记录集成过程方便后期使用. 第一步:下载PayPal-PHP-SDK集成到项目中 最新SDK下载地址: https://github.com/paypal/PayPal-PHP-SDK/releases 官方英文文档:点击打开链接 下载sdk解压,我们需要使用…

Android PayPal支付

最近集成完PayPal支付&#xff0c;记录一下集成注意事项。 一、PayPal版本选择 由于官方不再支持旧版的"PayPal-Android-SDK"&#xff0c;所以决定直接集成"Native Checkout SDK"。 二、集成环境 我是在Macos上开发&#xff0c;之前一直用的Android St…

如何在网站集成Payssion的国外支付方式?

如果你的用户来自海外&#xff0c;那你可能已经接入paypal ,信用卡&#xff0c;西联来收款。 今天我们再介绍另一种收款方式&#xff0c;既能极大的提高你网站的转化率&#xff0c;且在很多国家使用率高于paypal和信用卡。 这就是海外本地支付方式&#xff08;如中国的本地支…

仿牌独立站如何通过PayPal.Me亲友付进行收款

14 5月 先来看一段PP官方对于paypal me的介绍: PayPal.Me是什么 PayPal.Me是一种与您的企业账户相联的个性化链接。您仅需为自己或您的企业创建独特的自定义链接&#xff0c;分享出去即可轻松收款。这意味着&#xff0c;您无需再进行繁琐的银行转账&#xff0c;可轻松享受Pa…

stripe国际支付(对接支付宝、微信)

前言&#xff1a;stripe国际支付现在网上资料很少&#xff0c;且不支持中国&#xff0c;所以如果要用需要去支持的国家注册商户&#xff0c;官网的java demo是用的spark框架&#xff0c;我这里用的spring&#xff0c;验签需要手动验签&#xff0c;且不能用官网的方法 正文&…

再度盈利,搜狐稳了?

2016年在宣布要用3年时间回归互联网舞台中心之后&#xff0c;很长一段时间内张朝阳积极活跃在各种社交媒体上&#xff0c;完全是一派“积极出山”的姿态。而后畅游从美股退市&#xff0c;搜狗“卖身”腾讯&#xff0c;一系列的收缩动作又似乎是在逐渐远离喧嚣。 而在最近三年&a…