<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[R的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/qq_40317890</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qq_40317890]]></copyright><item><title><![CDATA[百度一面总结]]></title><link>https://blog.youkuaiyun.com/qq_40317890/article/details/118943928</link><guid>https://blog.youkuaiyun.com/qq_40317890/article/details/118943928</guid><author>qq_40317890</author><pubDate>Tue, 20 Jul 2021 20:33:49 +0800</pubDate><description><![CDATA[Java基础

1.Hashmap、concurrentHashmap和hashTable的区别（线程安全）



计算机网络

1.HTTP 1.1新特性

2.域名解析过程

3.从http到网页生成的过程（TCP）

4.三次握手 四次挥手（其中的TIME_WAIT状态的时间 是不是只有服务端才能发起FIN）



Java多线程

1.sychronized关键字的原理 锁机制（重量级和轻量级）

2.线程池的拒绝策略



操作系统

1.进程和线程的区别

2.NIO

3.有没有用过协程


]]></description><category></category></item><item><title><![CDATA[投放系统的HTTP接口测试]]></title><link>https://blog.youkuaiyun.com/qq_40317890/article/details/118679392</link><guid>https://blog.youkuaiyun.com/qq_40317890/article/details/118679392</guid><author>qq_40317890</author><pubDate>Mon, 12 Jul 2021 17:25:56 +0800</pubDate><description><![CDATA[也就是对ad-sponsor的Controller部分进行测试

1.启动Eureka

运行EurekaApplication



2.启动网关



3.启动ad-sponsor服务



4.测试

统一的请求





用网关实现一个请求







统一的响应






















...]]></description><category></category></item><item><title><![CDATA[编写广告系统的测试用例]]></title><link>https://blog.youkuaiyun.com/qq_40317890/article/details/118677851</link><guid>https://blog.youkuaiyun.com/qq_40317890/article/details/118677851</guid><author>qq_40317890</author><pubDate>Mon, 12 Jul 2021 16:37:14 +0800</pubDate><description><![CDATA[广告投放系统的测试用例




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.]]></description><category></category></item><item><title><![CDATA[广告系统测试前的准备工作]]></title><link>https://blog.youkuaiyun.com/qq_40317890/article/details/118677172</link><guid>https://blog.youkuaiyun.com/qq_40317890/article/details/118677172</guid><author>qq_40317890</author><pubDate>Mon, 12 Jul 2021 16:18:47 +0800</pubDate><description><![CDATA[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]]></description><category></category></item><item><title><![CDATA[DashBoard模块的实现]]></title><link>https://blog.youkuaiyun.com/qq_40317890/article/details/118676509</link><guid>https://blog.youkuaiyun.com/qq_40317890/article/details/118676509</guid><author>qq_40317890</author><pubDate>Mon, 12 Jul 2021 15:45:38 +0800</pubDate><description><![CDATA[1.新建ad-dashboard模块



2.编写pom.xml文件


&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;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]]></description><category></category></item><item><title><![CDATA[Hytrix Dashboard]]></title><link>https://blog.youkuaiyun.com/qq_40317890/article/details/118676292</link><guid>https://blog.youkuaiyun.com/qq_40317890/article/details/118676292</guid><author>qq_40317890</author><pubDate>Mon, 12 Jul 2021 15:31:07 +0800</pubDate><description><![CDATA[通过AOP去拦截

通过反射调用回退方法


]]></description><category></category></item><item><title><![CDATA[最长回文子串]]></title><link>https://blog.youkuaiyun.com/qq_40317890/article/details/118607926</link><guid>https://blog.youkuaiyun.com/qq_40317890/article/details/118607926</guid><author>qq_40317890</author><pubDate>Fri, 09 Jul 2021 17:29:47 +0800</pubDate><description><![CDATA[暴力方法

直接枚举所有子串，判断这些子串是否是回文串即可

中心扩展法

思想：枚举所有可能的回文子串的中心位置，找出回文子串的begin和len

注意：中心位置可能是一个字符，也有可能是两个相邻的字符


class Solution {
    public String longestPalindrome(String s) {
        if(s == null){
            return null;
        }
        if(s.length() &lt; ]]></description><category></category></item><item><title><![CDATA[使用原生API消费消息]]></title><link>https://blog.youkuaiyun.com/qq_40317890/article/details/118418238</link><guid>https://blog.youkuaiyun.com/qq_40317890/article/details/118418238</guid><author>qq_40317890</author><pubDate>Fri, 02 Jul 2021 17:06:15 +0800</pubDate><description><![CDATA[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..]]></description><category></category></item><item><title><![CDATA[消费者和消费组的概念]]></title><link>https://blog.youkuaiyun.com/qq_40317890/article/details/118418107</link><guid>https://blog.youkuaiyun.com/qq_40317890/article/details/118418107</guid><author>qq_40317890</author><pubDate>Fri, 02 Jul 2021 16:14:10 +0800</pubDate><description><![CDATA[Kafka支持写入一次，支持任意多个应用去读取消息

如果应用需要读取全量的消息，那么就应该为应用设置一个全量的消费者组






]]></description><category></category></item><item><title><![CDATA[自定义分区分配器]]></title><link>https://blog.youkuaiyun.com/qq_40317890/article/details/118417439</link><guid>https://blog.youkuaiyun.com/qq_40317890/article/details/118417439</guid><author>qq_40317890</author><pubDate>Fri, 02 Jul 2021 16:10:08 +0800</pubDate><description><![CDATA[1.新建类CustomPartitioner






package 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...]]></description><category></category></item><item><title><![CDATA[使用原生API发送信息]]></title><link>https://blog.youkuaiyun.com/qq_40317890/article/details/118416748</link><guid>https://blog.youkuaiyun.com/qq_40317890/article/details/118416748</guid><author>qq_40317890</author><pubDate>Fri, 02 Jul 2021 15:49:07 +0800</pubDate><description><![CDATA[1.新建项目kafka-study



pom.xml


&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;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 ]]></description><category></category></item><item><title><![CDATA[Kafka基础知识的介绍]]></title><link>https://blog.youkuaiyun.com/qq_40317890/article/details/118408086</link><guid>https://blog.youkuaiyun.com/qq_40317890/article/details/118408086</guid><author>qq_40317890</author><pubDate>Fri, 02 Jul 2021 15:24:01 +0800</pubDate><description><![CDATA[安装教程： https://blog.youkuaiyun.com/qq_35461948/article/details/117772904
]]></description><category></category></item><item><title><![CDATA[完善广告检索服务]]></title><link>https://blog.youkuaiyun.com/qq_40317890/article/details/118407540</link><guid>https://blog.youkuaiyun.com/qq_40317890/article/details/118407540</guid><author>qq_40317890</author><pubDate>Fri, 02 Jul 2021 10:51:51 +0800</pubDate><description><![CDATA[1.在 Controller 层进行完善

上面我们已经完成了 ISearch 这个接口的实现，传入一个广告请求信息能够返回一个广告响应信息。 接下来我们就去 Controller 层定义对应的接口方法，提供给媒体方请求调用。

在SearchController


package com.imooc.ad.controller;

import com.alibaba.fastjson.JSON;
import com.imooc.ad.annotation.IgnoreResponseAdvice;
]]></description><category></category></item><item><title><![CDATA[填充检索服务响应对象]]></title><link>https://blog.youkuaiyun.com/qq_40317890/article/details/118407166</link><guid>https://blog.youkuaiyun.com/qq_40317890/article/details/118407166</guid><author>qq_40317890</author><pubDate>Fri, 02 Jul 2021 10:42:03 +0800</pubDate><description><![CDATA[SearchImpl

1.对 UnitObject 进行过滤

fecth()函数中添加


List&lt;AdUnitObject&gt; unitObjects =
                    DataTable.of(AdUnitIndex.class).fetch(targetUnitIdSet);

            filterAdUnitAndPlanStatus(unitObjects, CommonStatus.VALID);

新建 filterAdUnitAndP]]></description><category></category></item><item><title><![CDATA[通过推广单元获取关联的创意实现]]></title><link>https://blog.youkuaiyun.com/qq_40317890/article/details/118406821</link><guid>https://blog.youkuaiyun.com/qq_40317890/article/details/118406821</guid><author>qq_40317890</author><pubDate>Fri, 02 Jul 2021 10:29:25 +0800</pubDate><description><![CDATA[由于创意与推广单元存在多对多的关系，我们可以通过 CreativeUnitIndex 和 CreativeUnitObject 这两个对象与服务去获取到推广单元所关联的创意 id，再由 CreativeIndex 通过 id 获取到 CreativeObject。

1.CreativeUnitIndex


public List&lt;Long&gt; selectAds(List&lt;AdUnitObject&gt; unitObjects) {

        if (CollectionUti]]></description><category></category></item><item><title><![CDATA[根据匹配信息实现对推广单元的再筛选]]></title><link>https://blog.youkuaiyun.com/qq_40317890/article/details/118391781</link><guid>https://blog.youkuaiyun.com/qq_40317890/article/details/118391781</guid><author>qq_40317890</author><pubDate>Fri, 02 Jul 2021 10:17:40 +0800</pubDate><description><![CDATA[https://blog.youkuaiyun.com/paynmind/category_10513056.html
]]></description><category></category></item><item><title><![CDATA[根据流量类型实现对推广单元的预筛选]]></title><link>https://blog.youkuaiyun.com/qq_40317890/article/details/118391237</link><guid>https://blog.youkuaiyun.com/qq_40317890/article/details/118391237</guid><author>qq_40317890</author><pubDate>Thu, 01 Jul 2021 17:29:07 +0800</pubDate><description><![CDATA[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]]></description><category></category></item><item><title><![CDATA[检索服务响应对象的定义]]></title><link>https://blog.youkuaiyun.com/qq_40317890/article/details/118388886</link><guid>https://blog.youkuaiyun.com/qq_40317890/article/details/118388886</guid><author>qq_40317890</author><pubDate>Thu, 01 Jul 2021 16:50:59 +0800</pubDate><description><![CDATA[接下来进行检索服务响应对象的定义， 根据传入的广告位信息返回一个创意信息。这里面有两个 url 的 List 集合，对于展示监测 url，当我们的广告返回给媒体方之后，媒体方会对广告数据进行曝光，曝光就是将广告展示出来，展示给用户。一旦展示出来，就需要将信息传输给两个 url，实现监测。监测这个信息是否展示了 url，不然第三方服务不清楚我们的媒体方展示了广告数据；点击监测 url 其实就是用户对广告数据实行了点击，不一定每一个广告都有，对于手机 APP 上的广告展示，会有一个点击，然后可以跳转到我们的连.]]></description><category></category></item><item><title><![CDATA[媒体方请求对象的定义]]></title><link>https://blog.youkuaiyun.com/qq_40317890/article/details/118388254</link><guid>https://blog.youkuaiyun.com/qq_40317890/article/details/118388254</guid><author>qq_40317890</author><pubDate>Thu, 01 Jul 2021 15:59:25 +0800</pubDate><description><![CDATA[媒体方请求对象包含——媒体方标识，请求基本信息和请求匹配信息，其中请求基本信息包含，唯一的请求 id，广告位的信息，终端信息，地域信息和设备信息，请求匹配信息包含关键字限制，地域限制和兴趣限制。考虑到这两种数据类型比较复杂，我们先构建它们的子对象。

1.首先定义包



再定义vo包和其中的请求类SearchRequest



再定义media包存放请求基本信息的子对象

再定义feature包来存放请求匹配信息的子对象



1.构建请求基本信息的子对象

广告位子对象


package com.i]]></description><category></category></item><item><title><![CDATA[广告检索服务功能]]></title><link>https://blog.youkuaiyun.com/qq_40317890/article/details/118388106</link><guid>https://blog.youkuaiyun.com/qq_40317890/article/details/118388106</guid><author>qq_40317890</author><pubDate>Thu, 01 Jul 2021 15:39:05 +0800</pubDate><description><![CDATA[广告检索服务是我们广告检索系统中最重要的服务功能，它能实现根据媒体方的请求信息返回对应的广告数据。我们比较常见的媒体方，比如地铁里面的通道大屏，手机的屏幕里打开的一些 APP，里面会展示一些广告，这些广告载体就被称为媒体方。它们是用来播放这些广告创意的。媒体方会向我们的检索系统发起请求，这个请求实际上是非常复杂的，里面包含非常多详细的信息。首先，按细来分，可以将请求信息分为三个类型：

 媒体方标识 mediaId：需要在我们的平台先定义，所以我们的平台通常有媒体方的标识。媒体方的标识就是告诉我们...]]></description><category></category></item></channel></rss>