spring源码学习
前置说明我在写一些我认为很繁琐的东西或者需要扩展的东西,我总是想能不能用一种很巧妙的东西,去代替他去优雅的解决它(我总是在说优雅,这个是我的毛病见谅)。
最近,新开个项目,需要写定时器,问题是,我们是两台服务器,所以需要redis实现分布式锁,来确认这个定时任务只能被一个服务器所运行。其实是这个很好实现,以前是怎么去实现的,一个aop就行了。但是,又想,我想加个ip控制,这个也简单啊,继续aop就行了啊。正常来说,aop就行。但是并不优雅、并且太过于无侵入,aop我们都知道,无侵入是改变代码喽(这是bean实例化后进行的增强操作,这里先不说了),aop个人感觉这个东西用不好是大问题,于是想到,把我需要的定时器特性抽象出来,由定时任务来继承他,并且写入业务逻辑,就能很好的辨认出我这个定时继承了哪些特性,当然不仅仅如此,还可以写入一些插件功能,例如:授权ip访问。我们还可以很好的实现【运行成功回调】【异常回调】来确定这个定时器运行的情况,等等。
为什么扯这么多东西呢,和我们的主题有什么关系呢?原因是:
我的确【很勉强】实现上面的功能,能用是能用,但是我并不满意,太low了,写的头都大了,于 ...
Centos7开放及查看端口
转载网上的,挺有用的,命令太多不好记,放在博客上。
1、开放端口开放5672端口
1firewall-cmd --zone=public --add-port=5672/tcp --permanent
关闭5672端口
1firewall-cmd --zone=public --remove-port=5672/tcp --permanent
配置立即生效
1firewall-cmd --reload
2、查看防火墙所有开放的端口1firewall-cmd --zone=public --list-ports
3、关闭防火墙如果要开放的端口太多,嫌麻烦,可以关闭防火墙,安全性自行评估
1systemctl stop firewalld.service
4、查看防火墙状态1firewall-cmd --state
5、查看监听的端口1netstat -lnpt
PS:centos7默认没有 netstat 命令,需要安装 net-tools 工具,yum install -y net-tools
6、检查端口被哪个进程占用1netstat -lnpt |grep 5672 ...
Cloudflare 支持的端口
Cloudflare能干什么,百度CDN!!!
Cloudflare 支持的 HTTP 端口:
80808088802052208220862095Cloudflare 支持的 HTTPS 端口:
44320532083208720968443
Linux搭建项目
下载镜像CentOS 7镜像下载
官网下载链接:http://isoredirect.centos.org/centos/7/isos/x86_64/
step1: 进入下载页,选择阿里云站点进行下载
Actual Country 国内资源 Nearby Countries 周边国家资源
阿里云站点:http://mirrors.aliyun.com/centos/7/isos/x86_64/
每个链接都包括了镜像文件的地址、类型及版本号等信息
选择当前国家资源区站点下载,获取资源速度比较快
step1: 进入阿里云站点,选择 CentOS-7-x86_64-DVD-1804.iso下载
各个版本的ISO镜像文件说明:
CentOS-7-x86_64-DVD-1708.iso 标准安装版(推荐)
CentOS-7-x86_64-Everything-1708.iso 完整版,集成所有软件(以用来补充系统的软件或者填充本地镜像)
CentOS-7-x86_64-LiveGNOME-1708.iso GNOME桌面版
CentOS-7-x86_64-LiveKDE-1708.iso KDE ...
leetcode刷题
1512. 好数对的数目给你一个整数数组 nums 。
如果一组数字 (i,j) 满足 nums[i] == nums[j] 且 i < j ,就可以认为这是一组 好数对 。
返回好数对的数目。
题目提示:121 <= nums.length <= 1001 <= nums[i] <= 100
实例1:123输入:nums = [1,2,3,1,1,3]输出:4解释:有 4 组好数对,分别是 (0,3), (0,4), (3,4), (2,5) ,下标从 0 开始
自己思路:主要条件i< j并且nums[i] == nums[j],于是我们只需要循环拿出所有的值,和后面比较下就ok了。这样的思路是没有问题的,但是过于麻烦。
12345678910111213class Solution { public int numIdenticalPairs(int[] nums) { int count=0; for(int i=0;i< nums.length;i++){ ...
记一次业务多线程遇到的问题
业务需求每个小时从不同的表统计不同的数据,来对数据进行校核,时间规定15天以内的。
业务问题统计的种类很多,需要从不同的表过滤,case when条件数据,各个表里的数据大概每天几百万,后面需要统计15天的数据。如果传统的循环按照时间,一天一天的统计,非常的慢,这个时候我们的索引什么都做了,非关系数据库暂时不能上,所有只能单纯的sql查询。这个时候需要用到多线程。
业务解决service层查询需要处理时间,以时间循环,多线程查询。等于一个多线程查询一次时间,最后插入结果就行了。大概
12345for(date:dates){ new Thread(()->{ 业务逻辑 }).start}
导致问题多线程执行mapper查询数据库,查询不了,直接结束方法,有经验的都知道报异常了,这个时间去看异常信息,但是异常信息也没有打印出来。
解决问题关键点是,我是直接调用service层方法,来做业务处理,开启多线程,然后mapper调用方法做处理,这个逻辑也没问题,但是突然报关闭连接,并且异常信息也不打印出来,只能debug才能看到异常信息。
...
大数据的学习
大数据学习理解前言为什么学习大数据,第一方面是对编程这方面感兴趣,我希望通过我的逻辑,去实现代码,来创造出价值,然后供我恰饭。世界上最美好的事情是,做自己爱做的事情,并且能够赚到钱,然后可以恰饭,仅此而已。
Hadoop入门学习Hadoop的思想之源来自于Google的三篇论文:
GFS —> HDFS
Map-Reduce —> MR
BigTable —> HBase。
Hadoop三大发行版本Hadoop三个发行版本:Apache、Cloudera、Hortonworks
Apache版本最原始(最基础)的版本,对于入门学习最好。
CLoidear在大型互联网企业中用的较多。
Hortonworks文档最好。
Hadoop的优势(4高)高可靠性:Hadoop底层维护多个数据副本,默认为3个,所以即使Hadoop某个计算元素或者存储出现故障,也不会导致数据丢失。
高扩展性:在集群间分配任务数据,可方便扩展数以千计的节点。
高效性:在MapReduce,Hadoop的并行工作的,以加速任务处理。
高容错性:能够自动将失败的任务重新分配。 ...
docker安装mysql
下载mysql可以先搜索mysql,看安装什么版本的,这里直接安装5.7.23版本的。
1docker pull mysql:5.7.23
安装mysql直接执行docker命令安装即可,\ 的意思是拼接下面的命令,是命令更加的清晰明朗。
$PWD表示当前目录下,建议直接设置个路径。
123456docker run -it -d \-p 3306:3306 \--name my_mysql \-v $PWD/conf/my.cnf:/etc/mysql/my.cnf \-v $PWD/logs:/var/log -v $PWD/data:/var/lib/mysql \-e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.23
-it:交互
-p:映射端口号,前面是主机的端口,后面是docker容器端口。
–name:给这个docker容器起个名字
-v:映射文件的。相当于挂载,把docker里的文件映射到主机,因为docker是一个容器,没有办法直接访问。
-e:设置环境变量
增加密码并开启任意ip登录进入容器
1docker exec -it 容器i ...
frp内网穿透
frp的作用一句话牛皮,frp内网穿透的东西,简单的配置,马上就可以爱上介款程序。
开始配置
配置服务端
何为服务端,就是拥有一个服务器(外网),输入命令uname -a看程序架构,这里只说明centos系统。然后去github下载软件包,一定要选择自己系统的机构。
下载完解压,因为我们是服务端,所以指定连接frp的端口,和web的端口即可。注意!!!frps是服务端,frpc是客户端,就是内网,需要穿透的客户端。
123[common]bind_port = 7000vhost_http_port = 8888
bind_port:frp端口
vhost_http_port:web端口,这个注意点,就是你访问web(外网)的端口
执行启动命令:
1./frps -c ./frps.ini
可设置简单的脚本
1nohup ./frps -c ./frps/ini &
配置客户端
一样的操作,去GitHub下载程序。解压后,配置frpc.ini这个配置
12345678[common]server_addr = frp_ipserver_port = 7000[web]ty ...
spring boot基础知识记录
启动一个Spring boot项目(jar)
一个jar包怎么启动呢? 首先我们要明天什么样的项目可以jar启动,那就是springboot项目,为什么他可以启动呢,因为它内置tmocat。
正常来说java -jar就可以启动了,但是,我们可以设置虚拟机参数,这样更好的启动我们的项目。
具体代码,>后面是日志名字,可以任意设置1nohup java -jar -server -Xms256m -Xmx256m JAR路径 > 日志名称.log &