12月20
首先从以下几点来介绍:
1.为什么要使用synchronized
在并发编程中存在线程安全问题,主要原因有:1.存在共享数据 2.多线程共同操作共享数据。关键字synchronized可以保证在同一时刻,只有一个线程可以执行某个方法或某个代码块,同时synchronized可以保证一个线程的变化可见(可见性),即可以代替volatile。
2.实现原理
synchronized可以保证方法或者代码块在运行时,同一时刻只有一个方法可以进入到临界区,同时它还可以保证共享变量的内存可见性
3.synchronized的三种应用方式
Java中每一个对象都可以作为锁,这是synchronized实现同步的基础:
普通同步方法(实例方法),锁是当前实例对象 ,进入同步代码前要获得当前实例的锁
静态同步方法,锁是当前类的class对象 ,进入同步代码前要获得当前类对象的锁
同步方法块,锁是括号里面的对象,对给定对象加锁,进入同步代码库前要获得给定对象的锁。
4.synchronized的作用
Synchronized是Java中解决并发问题的一种最常用最简单的方法 ,他可以确保线程互斥的访问同步代码
1.为什么要使用synchronized
在并发编程中存在线程安全问题,主要原因有:1.存在共享数据 2.多线程共同操作共享数据。关键字synchronized可以保证在同一时刻,只有一个线程可以执行某个方法或某个代码块,同时synchronized可以保证一个线程的变化可见(可见性),即可以代替volatile。
2.实现原理
synchronized可以保证方法或者代码块在运行时,同一时刻只有一个方法可以进入到临界区,同时它还可以保证共享变量的内存可见性
3.synchronized的三种应用方式
Java中每一个对象都可以作为锁,这是synchronized实现同步的基础:
普通同步方法(实例方法),锁是当前实例对象 ,进入同步代码前要获得当前实例的锁
静态同步方法,锁是当前类的class对象 ,进入同步代码前要获得当前类对象的锁
同步方法块,锁是括号里面的对象,对给定对象加锁,进入同步代码库前要获得给定对象的锁。
4.synchronized的作用
Synchronized是Java中解决并发问题的一种最常用最简单的方法 ,他可以确保线程互斥的访问同步代码
12月19
在tomcat启动时报invalid LOC header (bad signature)错误,这个问题真是搞死人啊,原来是一个jar的问题,删除让maven重新下载就好了,搞了我半天。
Caused by: java.lang.IllegalArgumentException: java.util.zip.ZipException: invalid LOC header (bad signature)
at org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.initInternal(AbstractSingleArchiveResourceSet.java:142)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
... 12 more
Caused by: java.util.zip.ZipException: invalid LOC header (bad signature)
at java.util.zip.ZipFile.read(Native Method)
at java.util.zip.ZipFile.access$1400(ZipFile.java:60)
at java.util.zip.ZipFile$ZipFileInputStream.read(ZipFile.java:734)
at java.util.zip.ZipFile$ZipFileInflaterInputStream.fill(ZipFile.java:434)
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:158)
at sun.misc.IOUtils.readFully(IOUtils.java:65)
at java.util.jar.JarFile.getBytes(JarFile.java:425)
at java.util.jar.JarFile.getManifestFromReference(JarFile.java:193)
at java.util.jar.JarFile.getManifest(JarFile.java:180)
at org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.initInternal(AbstractSingleArchiveResourceSet.java:140)
... 13 more
下面是用于定位哪个jar文件没正常被加载的
Caused by: java.lang.IllegalArgumentException: java.util.zip.ZipException: invalid LOC header (bad signature)
at org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.initInternal(AbstractSingleArchiveResourceSet.java:142)
at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)
... 12 more
Caused by: java.util.zip.ZipException: invalid LOC header (bad signature)
at java.util.zip.ZipFile.read(Native Method)
at java.util.zip.ZipFile.access$1400(ZipFile.java:60)
at java.util.zip.ZipFile$ZipFileInputStream.read(ZipFile.java:734)
at java.util.zip.ZipFile$ZipFileInflaterInputStream.fill(ZipFile.java:434)
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:158)
at sun.misc.IOUtils.readFully(IOUtils.java:65)
at java.util.jar.JarFile.getBytes(JarFile.java:425)
at java.util.jar.JarFile.getManifestFromReference(JarFile.java:193)
at java.util.jar.JarFile.getManifest(JarFile.java:180)
at org.apache.catalina.webresources.AbstractSingleArchiveResourceSet.initInternal(AbstractSingleArchiveResourceSet.java:140)
... 13 more
下面是用于定位哪个jar文件没正常被加载的
10月26
先来认识一下微信屏蔽的原理。按原理逐个攻破,整理如下:微信屏蔽的原理
一、微信系统的两个检测手段:第一是系统的自动检测;第二是微信工作人员的人工检测。
二、 人工的检测很好理解,有用户投诉举报,在多少时间内积累多少次的举报量 ,就有工作人员介入,开始人工检测。—–大站做防护解决。
三、自动检测系统是用户访问域名后跟踪域名内部非法违规的关键字——–跳转代码解决
淘宝客微信域名防封技术,如何防屏蔽?
系统或人工拉黑处理,同时记录域名以及路径——更换域名解决。
具体解决方法:
一、老站和知名站点的域名其实是跳板原理,建站时间久和行业内相对知名的域名最不容易被微信封杀,
当跳转代码注入到上述网站再利用安防等我网址做跳转,指向落地页,被微信封杀的可能性微乎其微;
也有同行用融合软件解决,这个问题我可以和大家单独讨论。
二、微信域名检测接口
微信域名检测接口,推荐使用一家的,快速而且稳定。
三、换域名和屏蔽微信右上角举报按钮把A域名,作为分享域名; 把B域名,作为落地域名(也就是用户访问看到的域名); 只有从A域名跳转到B域名,B域名显示的才是我们想展示给用户的内容,如果直接复制B的网址,打开的只是一个错误页面或者不违规的内容,也就是说如果TA点击右上角举报,举报的和访问的虽然是同一个网址,可是显示的内容却不同。
从而最大限度的防止域名被封杀。通过技术,屏蔽微信右上角的举报按钮,直接让用户无法举报,直接屏蔽了微信的举报功能,效果很不错。微信技术在不断升级更新,以后有机会把防屏蔽机制和经验总结给大家交流。
一、微信系统的两个检测手段:第一是系统的自动检测;第二是微信工作人员的人工检测。
二、 人工的检测很好理解,有用户投诉举报,在多少时间内积累多少次的举报量 ,就有工作人员介入,开始人工检测。—–大站做防护解决。
三、自动检测系统是用户访问域名后跟踪域名内部非法违规的关键字——–跳转代码解决
淘宝客微信域名防封技术,如何防屏蔽?
系统或人工拉黑处理,同时记录域名以及路径——更换域名解决。
具体解决方法:
一、老站和知名站点的域名其实是跳板原理,建站时间久和行业内相对知名的域名最不容易被微信封杀,
当跳转代码注入到上述网站再利用安防等我网址做跳转,指向落地页,被微信封杀的可能性微乎其微;
也有同行用融合软件解决,这个问题我可以和大家单独讨论。
二、微信域名检测接口
微信域名检测接口,推荐使用一家的,快速而且稳定。
三、换域名和屏蔽微信右上角举报按钮把A域名,作为分享域名; 把B域名,作为落地域名(也就是用户访问看到的域名); 只有从A域名跳转到B域名,B域名显示的才是我们想展示给用户的内容,如果直接复制B的网址,打开的只是一个错误页面或者不违规的内容,也就是说如果TA点击右上角举报,举报的和访问的虽然是同一个网址,可是显示的内容却不同。
从而最大限度的防止域名被封杀。通过技术,屏蔽微信右上角的举报按钮,直接让用户无法举报,直接屏蔽了微信的举报功能,效果很不错。微信技术在不断升级更新,以后有机会把防屏蔽机制和经验总结给大家交流。
10月25
10月25
1、通过联盟下载的excel订单,可以看出每一个订单的唯一标识符有两个
(1). 订单号
(2). pid推广位
2、订单号在用户那里无法自动获取,区分订单方式
(1). 让用户提交订单号(体验效果不好)
(2). 给用户绑定一个pid(推荐)
3、目前联盟可以创建pid,上万个(具体多少没有统计)
(1). 提前创建好pid 1万个插入数据库(可以借助软件),当用户注册的时候,随机分配一个pid进行绑定
(2). 然后通过转链API接口,生成当前用户pid的推广链接,当用户购买以后,就会产生对应的pid订单,
(3). 将联盟订单时时同步倒是数据库(可以借助软件30秒同步一次,1分钟同步一次)
(4). 根据用户当前pid,查询对应订单
4、用到的技术
(1). 转链高佣金API(官方API,高级权限)
(2). 订单同步软件(或者官方API,高级权限)
https://open.taobao.com/api.htm?docId=33892&docType=2
5:pid创建软件(目前没有API,模拟请求创建)

(1). 订单号
(2). pid推广位
2、订单号在用户那里无法自动获取,区分订单方式
(1). 让用户提交订单号(体验效果不好)
(2). 给用户绑定一个pid(推荐)
3、目前联盟可以创建pid,上万个(具体多少没有统计)
(1). 提前创建好pid 1万个插入数据库(可以借助软件),当用户注册的时候,随机分配一个pid进行绑定
(2). 然后通过转链API接口,生成当前用户pid的推广链接,当用户购买以后,就会产生对应的pid订单,
(3). 将联盟订单时时同步倒是数据库(可以借助软件30秒同步一次,1分钟同步一次)
(4). 根据用户当前pid,查询对应订单
4、用到的技术
(1). 转链高佣金API(官方API,高级权限)
(2). 订单同步软件(或者官方API,高级权限)
https://open.taobao.com/api.htm?docId=33892&docType=2
5:pid创建软件(目前没有API,模拟请求创建)
10月25
淘宝客现在对多数人来说已经耳熟能详了,属于CPS(Cost Per Sale),一种网络广告收费标准,以实际销售产品数量来换算广告刊登金额。其他收费标准还有常见的CPC(Cost Per Click 按点击次数收费),和按周期展示收费,周期过后下架等。以前接触这方面也比较少,这里就不详细介绍了,下面开始进入如何从懵圈到把接口对接到APP通过应用的流量实现佣金收入。
注册账号
首先在没有对接api前需要去注册一个阿里几个平台的账号,也可以直接用个人/企业 淘宝账号直接登录。
1.淘宝联盟: https://pub.alimama.com/
2.淘宝开放平台: http://open.taobao.com/
申请推广位
登录进淘宝联盟,点击“活动推广”,然后选择“推广管理”,这里看你要做的是什么,是web就选择网站管理,app就选择APP管理。不过不管是网站还是APP都是要有雏形已经上线,网站需要内容足够丰富且有备案,APP需要在某应用市场上架,最后就是新建推广填写表单提交审核即可。广填写表单提交审核即可。

注册账号
首先在没有对接api前需要去注册一个阿里几个平台的账号,也可以直接用个人/企业 淘宝账号直接登录。
1.淘宝联盟: https://pub.alimama.com/
2.淘宝开放平台: http://open.taobao.com/
申请推广位
登录进淘宝联盟,点击“活动推广”,然后选择“推广管理”,这里看你要做的是什么,是web就选择网站管理,app就选择APP管理。不过不管是网站还是APP都是要有雏形已经上线,网站需要内容足够丰富且有备案,APP需要在某应用市场上架,最后就是新建推广填写表单提交审核即可。广填写表单提交审核即可。
10月21
10月21
10月17
百度了几百篇文章都没有真正的将独立打包的过程写清楚。我写在这里只是为了自己以后可以查看。
1.需要在相应的项目的目录src目录下增加一下目录和文件
a.src/main/asse
2.修改pom.xml
在project配置里增加
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4.1</version>
<configuration>
<descriptor>src/main/assembly/assembly.xml</descriptor>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
1.需要在相应的项目的目录src目录下增加一下目录和文件
a.src/main/asse
2.修改pom.xml
在project配置里增加
<build>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.4.1</version>
<configuration>
<descriptor>src/main/assembly/assembly.xml</descriptor>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
10月17
redis作为大家经常使用到的内存级缓存服务器,我们需要保证该服务的高可用性。 这里我介绍最简单的配置方式,使用主从方式集群,并使用sentinel程序来管理主从服务器的切换。下面我们就动手来实现吧.
配置 redis.conf
配置主服务器 master
master中我们除了修改需要使用的端口和绑定的ip地址为,其他的基本保留不变就可以了,当然你也可以按自己的喜欢配置其他参数
配置从服务器 slave
从服务器相对主服务器的配置修改成自己要的端口和绑定的ip外,还需要增加一个slaveof参数 用于指定该服务器的主服务器的ip和端口
配置sentinel服务
我们需要增加sentinel.conf文件配置监控服务的端口,ip地址
port 26379
sentinel myid 4c59c281412c7198c18781846505609a7e70c7dd
sentinel monitor master 127.0.0.1 7001 1
sentinel down-after-milliseconds master 5000
sentinel failover-timeout master 15000
port 指定sentinel服务的端口
myid用于指定该服务的id
montor 主服务器别名 主服务器的ip 端口 切换主从的从服务器投票数
down-after-milliseconds 主服务器别名 指定主服务器检测时间毫秒数
failover-timeout 主服务器别名 切换时间数
配置 redis.conf
配置主服务器 master
master中我们除了修改需要使用的端口和绑定的ip地址为,其他的基本保留不变就可以了,当然你也可以按自己的喜欢配置其他参数
配置从服务器 slave
从服务器相对主服务器的配置修改成自己要的端口和绑定的ip外,还需要增加一个slaveof参数 用于指定该服务器的主服务器的ip和端口
配置sentinel服务
我们需要增加sentinel.conf文件配置监控服务的端口,ip地址
port 26379
sentinel myid 4c59c281412c7198c18781846505609a7e70c7dd
sentinel monitor master 127.0.0.1 7001 1
sentinel down-after-milliseconds master 5000
sentinel failover-timeout master 15000
port 指定sentinel服务的端口
myid用于指定该服务的id
montor 主服务器别名 主服务器的ip 端口 切换主从的从服务器投票数
down-after-milliseconds 主服务器别名 指定主服务器检测时间毫秒数
failover-timeout 主服务器别名 切换时间数








