tonglin0325的个人主页

广告系统——第三方广告平台

罗列了一下第三方广告平台产品,按照广告的流程,分成4类:

DSP(广告需求方平台,广告主在上面进行投放)

ADX(广告交易平台,负责广告交易和竞价)

SSP(媒体供应方平台,媒体可以在上面售卖网站app的曝光来获得盈利)

DMP(为广告投放投放提供人群画像进行广告的受众定向,并进行人群标签画像的管理)

1.国内

1.BAT

2.字节快手

3.手机厂商

4.其他渠道

1.微博(DSP投放)

1
2
https://tui.weibo.com/home

微博的广告产品有超级粉丝通粉丝头条WAX(程序化广告交易平台)

360-搜索推广

360-移动推广

360-展示广告

知乎效果营销

爱奇艺-奇麟营销

B站-必选广告

sigmob

喜马拉雅-声量

快看-后羿智投

网易-有道智选

小红书-聚光平台

网易-易效 (网易新闻)

美柚-女人通

ASA-苹果搜索广告

参考:神策渠道配置详情

2.国外

1.Google系 AdMob(DSP投放+SSP变现)

官网:https://admob.google.com/home/

主要是Google面向移动端的广告平台,不仅是一个移动广告联盟,而且还是一个获利平台,可帮助移动开发者利用广告创收、获取富有实用价值的分析洞见以及发展应用业务。作为一个广告联盟,AdMob 可协助您在全球范围内投放广告,从而让您利用自己的移动应用变现。作为一个变现平台,AdMob 可以协助与多个广告联盟合作的开发者最大限度地提升通过所有第三方广告联盟合作伙伴获得的广告收入。

2.Google系 GAM(Google Ad Manager)(DSP投放)

官网:https://admanager.google.com/home/

是一款广告管理平台,适合拥有大量直销业务的大型发布商使用。Ad Manager 可提供精细控制,并支持多个广告交易平台和广告联盟,包括 AdSense、Ad Exchange、第三方广告联盟和第三方广告交易平台等。

google ad manager旨在帮助媒体公司和发布商管理和优化他们的广告库存。它提供广告投放、定价、报告和监控功能,以及与广告交易相关的工具。

3.Google系 AdSense(SSP变现)

官网:https://www.google.com/adsense

AdSense 是一个面向网站所有者的广告网络,它允许网站发布商在他们的网站上展示广告,并通过用户对这些广告的点击或查看来获得收入。AdSense使用自动化技术根据网站内容和访问者兴趣匹配广告,从而提供更相关的广告体验。

比如我们可以利用AdSense给博客添加广告,参考:

全文 >>

Ubuntu16.04安装presto

presto有2个社区,一个是PrestoDB(由Facebook员工维护,版本号是0.xxx),一个是PrestoSQL(由一些离开Facebook的Presto主力开发者维护,版本号是xxx,PrestoSQL 从版本 351 开始将其名称变更为 Trino)

社区版本 官网 安装包下载地址 版本号 安装文档
PrestoDB https://prestodb.io/ https://repo1.maven.org/maven2/com/facebook/presto/ 0.xxx(比如0.245) https://prestodb.io/docs/current/installation/deployment.html#installing-presto
PrestoSQL(Trino) https://trino.io/ https://repo1.maven.org/maven2/io/prestosql/ xxx(比如330) https://trino.io/docs/current/installation/deployment.html

PrestoSQL安装步骤

安装prestoSQL330

1.下载和安装

330是presto最后一个支持java8的版本,高于330的版本需要java11的支持,且java8的版本最低要8u161,否则会报下面错误:ERROR: Presto requires Java 11+ (found 1.8.0_121) 以及 ERROR: Presto requires Java 8u161+ (found 1.8.0_121)

1
2
3
wget https://repo1.maven.org/maven2/io/prestosql/presto-server/330/presto-server-330.tar.gz
tar -zxvf presto-server-330.tar.gz

创建presto用户

1
2
3
4
5
6
sudo groupadd presto
sudo useradd presto -g presto -r --no-log-init -d /var/lib/presto
sudo mkdir /var/lib/presto
sudo mv ~/software/presto-server-330 /opt/cloudera/parcels
sudo ln -s /opt/cloudera/parcels/presto-server-330 /opt/cloudera/parcels/presto

2.配置文件

在presto的安装目录下创建etc目录,以及若干配置文件

1
2
3
4
5
lintong@master:/opt/cloudera/parcels/presto$ ls
catalog config.properties jvm.config log.properties node.properties
lintong@master:/opt/cloudera/parcels/presto$ ls ./catalog/
jmx.properties

具体配置文件内容请参考上面表格中列出的presto安装文档

3.启动和停止

1
2
3
4
5
6
7
8
9
sudo -iu presto
$ cd /opt/cloudera/parcels/presto
$ ./bin/launcher status
Not running
$ ./bin/launcher start
Started as 14252
$ ./bin/launcher stop
Stopped 1425

4.集成CDH的hive

由于CDH的hive开启了kerberos,且集成了LDAP,所以需要进行额外的配置,参考:如何在CDH集群中部署Presto 以及 presto安装和集成kerberos的hive

同步presto用户和组的信息到ldap中,参考:Ubuntu16.04安装openldap和phpldapadmin

全文 >>

在minikube下创建kafka集群

在minikube下安装的kafka集群分成4个步骤

1.在mac上安装minikube

这里安装的minikube是基于virtualbox的,也就是minikube是运行在virtualbox启动的一个虚拟机中

参考:Mac下安装minikube

2.给zk和kafka创建local persistence volumn

参考:Helm 安装Kafka

zk和kafka的数据需要落盘,所以需要依赖pv,这里创建的是k8s的local pv,注意如果volumeBindingMode选择WaitForFirstConsumer的话,只有在pod创建的时候,pvc才会绑定到pv上,没有pod就话pvc就一直是pending状态

StorageClass的yaml,local-storage.yaml

1
2
3
4
5
6
7
8
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: local-storage
provisioner: kubernetes.io/no-provisioner
volumeBindingMode: Immediate
reclaimPolicy: Retain

创建一个叫local-storage的StorageClass

1
2
kubectl apply -f ./local-storage.yaml

进入virtualbox的虚拟器中创建如下的linux目录,minikube的虚拟器账号密码是docker tcuser

全文 >>

K8S学习笔记——创建pv

在K8S上使用存储的时候,需要创建Persistence Volumes(持久化卷)用于持久化数据,否则当pod重启后,数据将会丢失,可以参考官方文档:

1
2
https://kubernetes.io/zh-cn/docs/concepts/storage/persistent-volumes/

常用的持久卷类型有local(

全文 >>

JavaScript学习笔记——基本知识

1.JavaScript的放置和注释

1.输出工具

A.alert();

B.document.write();

C.prompt(“”,””);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>输出函数测试</title>
</head>

<body>
<script>
<!-- 弹出对话框显示 -->
alert("<h1>测试</h1>");

<!-- 页面显示 -->
document.write("<h1>测试教程</h1>");

<!-- 弹出输入对话框,一个提示参数,一个输入参数 -->
var value=prompt("please enter your name","")
<!-- 显示输入的参数 -->
alert(value);
</script>
</body>
</html>

测试教程

2.JavaScript如何在html页面当中进行放置

A.  放在中间,也可以放在中间,有两个属性,一个是type,另外一个是language

div中加样式:写class,,然后在中写

1
2
3
4
5
6
7
8
9
<style>
.one{
width:100px;
height:100px;
background:red;
font-size:12px;
color:blue;
}
</style>

JavaScript可以在html页面当中的任何位置来进行调用,但是他们还是一个整体,是相互联系,相互影响。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>javascript放置</title>
<script type="text/javascript" language="javascript" >
var a="这是测试"
</script>
<style>
.one{
width:100px;
height:100px;
background:red;
font-size:12px;
color:blue;
}
</style>
</head>

<body>

<script type="text/javascript" language="javascript">
a="这是测试demo"
document.write(a);
</script>


测试demo!


<script type="text/javascript" language="javascript">
alert(a);
</script>
</body>
</html>

B.可以在超链接或是重定向的位置调用javascript代码

格式:”javascript:alert(‘我是超链接’)”
重定向格式:action=”javascript:alert(‘我是表单’)”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>place2</title>
<style>
.one{
width:100px;
height:100px;
background:red;
font-size:12px;
color:blue;
}
</style>
</head>

<body>

   测试demo!


<!-- 点击链接,弹出对话框 -->
[链接](javascript:alert('我是超链接'))

<!-- from表单,提交表单后弹出对话框 -->
<form action="javascript:alert('我是表单')" method="post">
<input type="text" name="names">
<!-- type是submit,点击按钮后直接提交表单 -->
<input type="submit" value="提交">
</form>
</body>
</html>

C.在事件后面进行调用
1>.格式:onclick=”alert(‘我是事件’)”
2>.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>place3</title>
<style>
.one{
width:100px;
height:100px;
background:red;
font-size:12px;
color:blue;
}

.two{
width:200px;
height:300px;
background:blue;
font-size:12px;
color:red;
}
</style>

<!-- for属性表示为了那个ID,一般不用 -->
<script for="two" event="onclick">
alert("我是DIV2");
</script>
</head>

<body>
<!-- 点击这个div弹出对话框 -->

   测试demo!



   测试demo!


</body>
</html>

3.调用外部javascript文件

格式:   在中加入

1
<script src="2.txt"></script>

    js文件

1
2
var a="test";
alert(a);

注意:在调用页面