自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(262)
  • 收藏
  • 关注

原创 百度一面总结

Java基础1.Hashmap、concurrentHashmap和hashTable的区别(线程安全)计算机网络1.HTTP 1.1新特性2.域名解析过程3.从http到网页生成的过程(TCP)4.三次握手 四次挥手(其中的TIME_WAIT状态的时间 是不是只有服务端才能发起FIN)Java多线程1.sychronized关键字的原理 锁机制(重量级和轻量级)2.线程池的拒绝策略操作系统1.进程和线程的区别2.NIO3.有没有用过协程

2021-07-20 20:33:49 212 1

原创 投放系统的HTTP接口测试

也就是对ad-sponsor的Controller部分进行测试1.启动Eureka运行EurekaApplication2.启动网关3.启动ad-sponsor服务4.测试统一的请求用网关实现一个请求统一的响应...

2021-07-12 17:25:56 305 4

原创 编写广告系统的测试用例

广告投放系统的测试用例package com.imooc.ad.service;import com.imooc.ad.Application;import com.imooc.ad.exception.AdException;import com.imooc.ad.vo.AdPlanGetRequest;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.fa.

2021-07-12 16:37:14 1036

原创 广告系统测试前的准备工作

1.执行sql文件向数据库中插入数据---- init data for table `ad_user`--use imooc_ad_data;INSERT INTO `ad_user` VALUES (15,'qinyi','B2E56F2420D73FEC125D2D51641C5713',1,'2018-11-19 20:29:01','2018-11-19 20:29:01');---- init data for table `ad_creative`--INSERT

2021-07-12 16:18:47 222

原创 DashBoard模块的实现

1.新建ad-dashboard模块2.编写pom.xml文件<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM

2021-07-12 15:45:38 325

原创 Hytrix Dashboard

通过AOP去拦截通过反射调用回退方法

2021-07-12 15:31:07 139

原创 最长回文子串

暴力方法直接枚举所有子串,判断这些子串是否是回文串即可中心扩展法思想:枚举所有可能的回文子串的中心位置,找出回文子串的begin和len注意:中心位置可能是一个字符,也有可能是两个相邻的字符class Solution { public String longestPalindrome(String s) { if(s == null){ return null; } if(s.length() <

2021-07-09 17:29:47 93

原创 使用原生API消费消息

1.创建MyCustomer 类package com.imooc.kafkastudy;import org.apache.kafka.clients.consumer.CommitFailedException;import org.apache.kafka.clients.consumer.ConsumerRecord;import org.apache.kafka.clients.consumer.ConsumerRecords;import org.apache.kafka.c..

2021-07-02 17:06:15 101

原创 消费者和消费组的概念

Kafka支持写入一次,支持任意多个应用去读取消息如果应用需要读取全量的消息,那么就应该为应用设置一个全量的消费者组

2021-07-02 16:14:10 177

原创 自定义分区分配器

1.新建类CustomPartitionerpackage com.imooc.kafkastudy;import org.apache.kafka.clients.producer.Partitioner;import org.apache.kafka.common.Cluster;import org.apache.kafka.common.PartitionInfo;import org.apache.kafka.common.record.InvalidRecordEx...

2021-07-02 16:10:08 145

原创 使用原生API发送信息

1.新建项目kafka-studypom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0

2021-07-02 15:49:07 129

原创 Kafka基础知识的介绍

安装教程: https://blog.youkuaiyun.com/qq_35461948/article/details/117772904

2021-07-02 15:24:01 130

原创 完善广告检索服务

1.在 Controller 层进行完善上面我们已经完成了 ISearch 这个接口的实现,传入一个广告请求信息能够返回一个广告响应信息。 接下来我们就去 Controller 层定义对应的接口方法,提供给媒体方请求调用。在SearchControllerpackage com.imooc.ad.controller;import com.alibaba.fastjson.JSON;import com.imooc.ad.annotation.IgnoreResponseAdvice;

2021-07-02 10:51:51 146

原创 填充检索服务响应对象

SearchImpl1.对 UnitObject 进行过滤fecth()函数中添加List<AdUnitObject> unitObjects = DataTable.of(AdUnitIndex.class).fetch(targetUnitIdSet); filterAdUnitAndPlanStatus(unitObjects, CommonStatus.VALID);新建 filterAdUnitAndP

2021-07-02 10:42:03 135

原创 通过推广单元获取关联的创意实现

由于创意与推广单元存在多对多的关系,我们可以通过 CreativeUnitIndex 和 CreativeUnitObject 这两个对象与服务去获取到推广单元所关联的创意 id,再由 CreativeIndex 通过 id 获取到 CreativeObject。1.CreativeUnitIndexpublic List<Long> selectAds(List<AdUnitObject> unitObjects) { if (CollectionUti

2021-07-02 10:29:25 143

原创 根据匹配信息实现对推广单元的再筛选

https://blog.youkuaiyun.com/paynmind/category_10513056.html

2021-07-02 10:17:40 110

原创 根据流量类型实现对推广单元的预筛选

1.定义流量类型广告位的类型对应的数字分别是1,2,4,8,16,很显然这是一个二进制的编排,这样定义的目的是为了能够根据位运算加快检索速度。package com.imooc.ad.index.adunit;public class AdUnitConstants { public static class POSITION_TYPE { public static final int KAIPING = 1; public static f

2021-07-01 17:29:07 157

原创 检索服务响应对象的定义

接下来进行检索服务响应对象的定义, 根据传入的广告位信息返回一个创意信息。这里面有两个 url 的 List 集合,对于展示监测 url,当我们的广告返回给媒体方之后,媒体方会对广告数据进行曝光,曝光就是将广告展示出来,展示给用户。一旦展示出来,就需要将信息传输给两个 url,实现监测。监测这个信息是否展示了 url,不然第三方服务不清楚我们的媒体方展示了广告数据;点击监测 url 其实就是用户对广告数据实行了点击,不一定每一个广告都有,对于手机 APP 上的广告展示,会有一个点击,然后可以跳转到我们的连.

2021-07-01 16:50:59 126

原创 媒体方请求对象的定义

媒体方请求对象包含——媒体方标识,请求基本信息和请求匹配信息,其中请求基本信息包含,唯一的请求 id,广告位的信息,终端信息,地域信息和设备信息,请求匹配信息包含关键字限制,地域限制和兴趣限制。考虑到这两种数据类型比较复杂,我们先构建它们的子对象。1.首先定义包再定义vo包和其中的请求类SearchRequest再定义media包存放请求基本信息的子对象再定义feature包来存放请求匹配信息的子对象1.构建请求基本信息的子对象广告位子对象package com.i

2021-07-01 15:59:25 287

原创 广告检索服务功能

广告检索服务是我们广告检索系统中最重要的服务功能,它能实现根据媒体方的请求信息返回对应的广告数据。我们比较常见的媒体方,比如地铁里面的通道大屏,手机的屏幕里打开的一些 APP,里面会展示一些广告,这些广告载体就被称为媒体方。它们是用来播放这些广告创意的。媒体方会向我们的检索系统发起请求,这个请求实际上是非常复杂的,里面包含非常多详细的信息。首先,按细来分,可以将请求信息分为三个类型: 媒体方标识 mediaId:需要在我们的平台先定义,所以我们的平台通常有媒体方的标识。媒体方的标识就是告诉我们...

2021-07-01 15:39:05 651

原创 将增量数据投递到Kafka

对于 MySQL Binlog 可以有多种方式实现分发,对于我们的检索系统,更重要的是构建增量索引,比如说给我们的广告分析服务。接下来去实现一种更加常用的方式,将增量数据投递到 Kafka 里面,可以去监听 Kafka 的一个 topic,然后去获取对应的增量数据。其他服务可以去监听这个类,去获取到相应的服务。1.首先定义好一个包2.在application.yml中3.编写类KafkaSenderpackage com.imooc.ad.sender.kafka;import

2021-07-01 15:34:30 409

原创 第二、第三、第三层级增量数据的投递

增量数据的投递其实就是去实现 ISender 这个接口,ISender 接口去接收一个参数,是 MySqlRowData 的类型。构建索引的过程是使用我们之前完成的 AdLevelDataHandler,里面分为好几个层级,对于每一个层级都是将表转化为 table 对象,最终我们在增量数据投递的过程中,去实现增量索引的加载。1.新建包,是为了构建增量索引而实现的index2.编写类IndexSender并填充之前的IncrementListener第二、第三、第四层级增量数据的投递pa

2021-07-01 15:23:05 147

转载 Java中的sort()函数

总结

2021-06-29 11:50:22 450

转载 Java的双端队列Deque

总结

2021-06-29 11:09:59 84

原创 异或运算-

异或运算有以下三个性质。 任何数和 0做异或运算,结果仍然是原来的数,即 a⊕0=a 任何数和其自身做异或运算,结果是 0,即 a⊕a=0 异或运算满足交换律和结合律,即a⊕b⊕a=b⊕a⊕a=b⊕(a⊕a)=b⊕0=b...

2021-06-29 09:19:37 574

原创 增量数据投递前的准备工作

11:44:51,989 [Thread-2] INFO jTPCC : Term-00, 11:44:51,990 [Thread-2] INFO jTPCC : Term-00, 11:44:51,990 [Thread-2] INFO jTPCC : Term-00, Measured tpmC (NewOrders) = 149.3211:44:51,990 [Thread-2] INFO jTPCC : Term-00, Measured tpmTOTAL = 328.52.

2021-06-18 11:19:03 140

原创 启动对Binlog的监听

1.配置application.ymlserver: port: 7001 servlet: context-path: /ad-search #http controller的请求路径,统一的访问前缀spring: application: name: eureka-client-ad-search jpa: #JPA全称Java Persistence API,即Java持久化API,它为Java开发人员提供了一种对象/关系映射工具来管理Java应用中的关系数据

2021-06-02 15:29:45 397

原创 根据Binlog对象构建增量数据

1.新建MySqlRowDatapackage com.imooc.ad.mysql.dto;import com.imooc.ad.mysql.constant.OpType;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import java.util.ArrayList;import java.util.List;import java.util.Map

2021-06-02 15:07:11 198

原创 Binlog监听与解析的实现

package com.imooc.ad.mysql.listener;import com.github.shyiko.mysql.binlog.BinaryLogClient;import com.github.shyiko.mysql.binlog.event.*;import com.imooc.ad.mysql.TemplateHolder;import com.imooc.ad.mysql.dto.BinlogRowData;import com.imooc.ad.mysql....

2021-05-28 16:28:09 359

原创 Binlog监听与解析

BinlogRowDatapackage com.imooc.ad.mysql.dto;import com.github.shyiko.mysql.binlog.event.EventType;import lombok.Data;import java.util.List;import java.util.Map;@Datapublic class BinlogRowData { private TableTemplate table; private

2021-05-28 15:17:56 476

原创 载入模板文件并实现列索引到列名的映射

package com.imooc.ad.mysql;import com.alibaba.fastjson.JSON;import com.imooc.ad.mysql.constant.OpType;import com.imooc.ad.mysql.dto.ParseTemplate;import com.imooc.ad.mysql.dto.TableTemplate;import com.imooc.ad.mysql.dto.Template;import lombok.ext...

2021-05-28 11:26:50 124

原创 实现对模板对象进行解析

package com.imooc.ad.mysql.dto;import com.imooc.ad.mysql.constant.OpType;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;import java.util.*;import java.util.function.Supplier;@Data@NoArgsConstructor@AllAr...

2021-05-28 10:32:42 141

原创 Binlog使用到的模板文件

1.添加模板文件{ "database": "imooc_ad_data", "tableList": [ { "tableName": "ad_plan", "level": 2, "insert": [ {"column": "id"}, {"column": "user_id"}, {"column": "plan_status"}, {"column": "start_dat

2021-05-28 10:09:35 124

原创 使用开源工具监听Binlog的演示

1.添加依赖<!-- binlog 监听与解析: https://github.com/shyiko/mysql-binlog-connector-java --> <dependency> <groupId>com.github.shyiko</groupId> <artifactId>mysql-binlog-connector-java</artifactId>

2021-05-27 16:55:08 689 3

原创 MySQL Binlog

1.什么是BinlogBinlog 是 MySQL Server 维护的一种二进制日志,主要是用来记录对 MySQL 数据更新或潜在发生更新的 SQL 语句,并以"事务"的形式保存在磁盘中(文件)2.Binlog的作用(1)复制:MySQL 的 Master-Slave 协议,让 Slave 可以通过监听 Binlog 实现数据复制,达到数据一致的目的(2)数据恢复:通过 mysql binlog 工具恢复数据(3)增量备份3.Binlog相关的变量4.Binlog日志的三种

2021-05-27 15:26:59 207

原创 全量索引加载的实现

1.加载全量索引时,为什么要将数据库表中的数据导出到文件中,而不是直接从数据库中读取 ? 当多实例部署的时候,如果多实例同时从数据库中读取全量数据,会给数据库造成巨大的压力。关于数据保存在文件中,IO 耗时的问题大可不必担心,计算处理能力肯定不是瓶颈。2.你可以将全量数据导出的功能改写为一个微服务吗 ?需要考虑功能抽象,因为后续可能添加其他的维度扩展表。(可以在 imooc-ad-service 下面实现,微服务的名字可以是 ad-data-dump)pom中引入common和sponsor..

2021-05-27 14:46:08 369

原创 索引操作Handler的定义和说明

1.在mysql.constant包内定义枚举类型OpTypepackage com.imooc.ad.mysql.constant;public enum OpType { ADD, UPDATE, DELETE, OTHER;}2.编写AdLevelDataHandler类,实现写入到文件中的表数据和索引对象之间的转换package com.imooc.ad.handler;import com.imooc.ad.index.IndexAw

2021-05-27 10:35:08 217

原创 表数据导出到文件功能

检索系统要求的数据导出是很有意义的,这样做主要是两方面的原因:1. 检索系统不需要主动的连接到数据库,即可以不需要知道数据表的定义;2. 多实例检索系统在启动的时候如果直接从数据库中读取这些数据,会给数据库造成巨大的压力。所以,这是为了避免扫描数据库。1.在ad-common里面新建包dump2.新建类DConstantpackage com.imooc.ad.dump;public class DConstant { public static fi...

2021-05-26 15:58:51 248

原创 索引服务类缓存的实现

package com.imooc.ad.index;import org.springframework.beans.BeansException;import org.springframework.context.ApplicationContext;import org.springframework.context.ApplicationContextAware;import org.springframework.core.PriorityOrdered;import org.sp.

2021-05-26 10:52:45 152

原创 创意与推广单元关联索引对象定义与服务实现

1.新建包2.新建类CreativeUnitObject和CreativeUnitIndexpackage com.imooc.ad.index.creativeUnit;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;@Data@AllArgsConstructor@NoArgsConstructorpublic class CreativeUnitObj

2021-05-26 10:30:18 136

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除