lyhisphper / blog Goto Github PK
View Code? Open in Web Editor NEW技术杂谈
技术杂谈
# 删除相关进程
ps aux | grep 'php artisan swoole:ws' | grep -v grep | awk '{print $2}' | xargs kill -9
kill $(cat runtime/hyperf.pid)
定时查看日志
tail -f 50 -n -s 2 runtime/logs/hyperf.log
# ssh 登录
ssh -l root 192.168.0.165
// 后台运行代码
nohup php artisan queue:work --daemon --tries=5 > /dev/null 2>&1 &
private $jwtKey = 'aass123456';
private $iss = 'server';// 签发者
private $sub = 'user';// 面向用户
private $aud = 'client';// 接受方
private $exp = 0;// 过期时间
private $nbf = 0;// 定义什么时间之前,不可用
private $iat = 0;// 签发时间
private $jti = '';//唯一身份表示,主要用来作为一次性token
private $alg = ['HS256'];
private $expByDay = 1; // 过期时间
git config --global user.name “用户名”
git config --global user.email “邮箱”
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub
git clone [email protected]:8022/www/gitrepo/sample.git
示例:http://lyh:[email protected]:8099/zxphp/10dsm.git
git fetch --all && git reset --hard origin/master && git pull
or
git checkout
添加忽略文件
#删除本地缓存
git rm -r --cached . && git add . && git commit -m "update .gitignore"
// 忽略文件版本控制
git update-index --assume-unchanged .idea/*.xml
// 恢复忽略文件版本控制
git update-index --no-assume-unchanged application/config.php
git add .
git status
git commit -m ""
git push
git show
git add . && git commit -m 'debug' && git push
// 1. 初始化本地仓库
git init
// 2. 将代码添加仓库
git add .
// 3. 将代码提交到本地仓库
git commit -m "Initial commit"
// 4. 添加远程仓库
git remote add origin http://your_remote_git_server/sample.git
// 5. 同步远端仓库到本地
git pull --rebase origin master // --rebase 非常重要,否则pull失败
//6. 推送代码到远端仓库
git push origin master
echo "# haha" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin [email protected]:lyhisphper/haha.git
git push -u origin master
git remote add origin [email protected]:lyhisphper/haha.git
git push -u origin master
# 在当前目录新建一个Git代码库
$ git init
# 新建一个目录,将其初始化为Git代码库
$ git init [project-name]
# 下载一个项目和它的整个代码历史
$ git clone [url] [local_path]
二.配置
# 显示当前的Git配置
$ git config --list
# 编辑Git配置文件
$ git config -e [--global]
# 设置提交代码时的用户信息
$ git config [--global] user.name "[name]"
$ git config [--global] user.email "[email address]"
三.增加/删除文件
# 添加指定文件到暂存区
$ git add [file1] [file2] ...
# 添加指定目录到暂存区,包括子目录
$ git add [dir]
# 添加当前目录的所有文件到暂存区
$ git add .
# 添加每个变化前,都会要求确认
# 对于同一个文件的多处变化,可以实现分次提交
$ git add -p
# 删除工作区文件,并且将这次删除放入暂存区
$ git rm [file1] [file2] ...
# 停止追踪指定文件,但该文件会保留在工作区
$ git rm --cached [file]
# 改名文件,并且将这个改名放入暂存区
$ git mv [file-original] [file-renamed]
四.代码提交
# 提交暂存区到仓库区
$ git commit -m [message]
# 提交暂存区的指定文件到仓库区
$ git commit [file1] [file2] ... -m [message]
# 提交工作区自上次commit之后的变化,直接到仓库区
$ git commit -a
# 提交时显示所有diff信息
$ git commit -v
# 使用一次新的commit,替代上一次提交
# 如果代码没有任何新变化,则用来改写上一次commit的提交信息
$ git commit --amend -m [message]
# 重做上一次commit,并包括指定文件的新变化
$ git commit --amend [file1] [file2] ...
五.分支
# 列出所有本地分支
$ git branch
# 列出所有远程分支
$ git branch -r
# 列出所有本地分支和远程分支
$ git branch -a
# 新建一个分支,但依然停留在当前分支
$ git branch [branch-name]
# 新建一个分支,并切换到该分支
$ git checkout -b [branch]
# 新建一个分支,指向指定commit
$ git branch [branch] [commit]
# 新建一个分支,与指定的远程分支建立追踪关系
$ git branch --track [branch] [remote-branch]
# 切换到指定分支,并更新工作区
$ git checkout [branch-name]
# 切换到上一个分支
$ git checkout -
# 建立追踪关系,在现有分支与指定的远程分支之间
$ git branch --set-upstream [branch] [remote-branch]
# 合并指定分支到当前分支
$ git merge [branch]
# 选择一个commit,合并进当前分支
$ git cherry-pick [commit]
# 删除分支
$ git branch -d [branch-name]
# 删除远程分支
$ git push origin --delete [branch-name]
$ git branch -dr [remote/branch]
六.标签
-- 给开发分支做一个标记,如标记一个版本号
# 列出所有tag
$ git tag
# 新建一个tag在当前commit
$ git tag [tag]
# 新建一个tag在指定commit
$ git tag [tag] [commit]
# 删除本地tag
$ git tag -d [tag]
# 删除远程tag
$ git push origin :refs/tags/[tagName]
# 查看tag信息
$ git show [tag]
# 提交指定tag
$ git push [remote] [tag]
# 提交所有tag
$ git push [remote] --tags
# 新建一个分支,指向某个tag
$ git checkout -b [branch] [tag]
七.查看信息
# 显示有变更的文件
$ git status
# 显示当前分支的版本历史
$ git log
# 显示commit历史,以及每次commit发生变更的文件
$ git log --stat
# 搜索提交历史,根据关键词
$ git log -S [keyword]
# 显示某个commit之后的所有变动,每个commit占据一行
$ git log [tag] HEAD --pretty=format:%s
# 显示某个commit之后的所有变动,其"提交说明"必须符合搜索条件
$ git log [tag] HEAD --grep feature
# 显示某个文件的版本历史,包括文件改名
$ git log --follow [file]
$ git whatchanged [file]
# 显示指定文件相关的每一次diff
$ git log -p [file]
# 显示过去5次提交
$ git log -5 --pretty --oneline
# 显示所有提交过的用户,按提交次数排序
$ git shortlog -sn
# 显示指定文件是什么人在什么时间修改过
$ git blame [file]
# 显示暂存区和工作区的差异
$ git diff
# 显示暂存区和上一个commit的差异
$ git diff --cached [file]
# 显示工作区与当前分支最新commit之间的差异
$ git diff HEAD
# 显示两次提交之间的差异
$ git diff [first-branch]...[second-branch]
# 显示今天你写了多少行代码
$ git diff --shortstat "@{0 day ago}"
# 显示某次提交的元数据和内容变化
$ git show [commit]
# 显示某次提交发生变化的文件
$ git show --name-only [commit]
# 显示某次提交时,某个文件的内容
$ git show [commit]:[filename]
# 显示当前分支的最近几次提交
$ git reflog
八. 远程同步
# 下载远程仓库的所有变动
$ git fetch [remote]
# 显示所有远程仓库
$ git remote -v
# 显示某个远程仓库的信息
$ git remote show [remote]
# 增加一个新的远程仓库,并命名
$ git remote add [shortname] [url]
# 取回远程仓库的变化,并与本地分支合并
$ git pull [remote] [branch]
# 上传本地指定分支到远程仓库
$ git push [remote] [branch]
# 上传代码
$ git -v --progress "origin" master:master
# 强行推送当前分支到远程仓库,即使有冲突
$ git push [remote] --force
# 推送所有分支到远程仓库
$ git push [remote] --all
九.撤销
# 恢复暂存区的指定文件到工作区
$ git checkout [file]
# 恢复某个commit的指定文件到暂存区和工作区
$ git checkout [commit] [file]
# 恢复暂存区的所有文件到工作区
$ git checkout .
# 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变
$ git reset [file]
# 重置暂存区与工作区,与上一次commit保持一致
$ git reset --hard
# 重置当前分支的指针为指定commit,同时重置暂存区,但工作区不变
$ git reset [commit]
# 重置当前分支的HEAD为指定commit,同时重置暂存区和工作区,与指定commit一致
$ git reset --hard [commit]
# 重置当前HEAD为指定commit,但保持暂存区和工作区不变
$ git reset --keep [commit]
# 新建一个commit,用来撤销指定commit
# 后者的所有变化都将被前者抵消,并且应用到当前分支
$ git revert [commit]
# 暂时将未提交的变化移除,稍后再移入
$ git stash
$ git stash pop
从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复
stash的简单用法:
git stash: 会把所有未提交的修改(包括暂存的和非暂存的)保存到Git栈中。便于后续恢复到当前工作目录
git stash save 'message' message记录版本号
git stash pop: 从Git栈中读取最近一次保存的内容,恢复工作区的相关内容。由于可能存在多个Stash的内容,所以用栈来管理,pop会从最近的一个stash中读取内容并恢复。
git stash list: 显示Git栈内的所有备份,可以利用这个列表来决定从那个地方恢复。
git stash clear: 清空Git栈。此时使用git等图形化工具会发现,原来stash的哪些节点都消失了。
代码恢复了,就开始工作了。代码写完了,又是提交三部曲(快捷命令)。
git stash drop stash@{} 也可以移除stash
git stash show stash名字 查看指定stash的diff
git stash show -p/--patch 查看所有的diff
git stash bransh 分支名称 从stash创建分支
快速去创建安装docker环境的工具
用于定义和运行多容器 Docker 的应用程序工具
集群管理工具,其主要作用是把若干台 Docker 主机抽象为一个整体,并且通过一个入口统一管理这些 Docker 主机上的各种 Docker 资源
server {
listen 80;
server_name localhost;
root /app/public;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
index index.php index.html index.htm;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
error_page 404 /index.php;
location ~ \.php$ {
fastcgi_pass php-fpm:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
选择 Window -> Preferences -> General -> Workspace -> Text file encoding,在 Text file encoding 中点击 Other,选择 UTF-8
Jsp:Window -> Preferences -> Web -> JSP Files
Help -> Install New SoftWare->搜索"http://download.eclipse.org/releases/neon (neon是Eclipse版本名)"->勾选
配置Tomcat
JST Server Adapters Extensions
JST Server Adapters
动态项目插件
Eclipse Java Development Tools
Eclipse Java EE Developer Tools
Eclipse Java Web Developer Tools
window -> preferences->搜索 “Runtime Environments”->add(如果没有找到tomcat选项请参考上一步)
Windows->Preferences->Java–>Editor–>点击Content Asist
修改"Auto activation triggers for Java"的“.”为"
.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
yum -y update
yum install -y openssh-server
# 非交互式修改用户密码
RUN echo "root:login123" | chpasswd
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
sed -i "s/#baseurl=/baseurl=g" /etc/yum.repos.d/epel.repo
yum -y install php72w php72w-cli php72w-common php72w-devel php72w-embedded php72w-fpm php72w-gd php72w-mbstring php72w-mysqlnd php72w-opcache php72w-pdo php72w-xml
yum install -y nginx
touch conf.d/default.conf
描述 命令
移除所有容器 docker rm `docker ps -a -q`
移除所有镜像 docker rmi `docker images -q`
查看容器端口的映射情况。 docker logs -f bf08b7f2cd89
查看 WEB 应用程序日志 docker port bf08b7f2cd89
查看WEB应用程序容器的进程 docker top wizardly_chandrasekhar
检查 WEB 应用程序 docker inspect wizardly_chandrasekhar
停止 WEB 应用容器 docker stop wizardly_chandrasekhar
启动WEB 应用容器 docker start wizardly_chandrasekhar
移除WEB应用容器 docker rm wizardly_chandrasekhar
查找镜像 docker search httpd
查看创建的镜像 docker images
删除所有运行的容器 docker stop $(docker ps -q) & docker rm $(docker ps -aq)
运行nginx docker run -it -p 0.0.0.0:8080:80 -v /www/nginx/nginx/:/usr/share/nginx/ -v /www/nginx/etc/:/etc/nginx/ --privileged=true --name nginx20181229001 -d nginx
容器里面拷文件到宿主机 docker cp testtomcat:/usr/local/tomcat/webapps/test/js/test.js /opt
从宿主机拷文件到容器里面 docker cp /opt/test.js testtomcat:/usr/local/tomcat/webapps/test/js
复制容器nginx文件到宿主机 docker cp nginx20181229001:/etc/nginx/ /www/nginx/etc/
拉取镜像 docker pull php:5.6-fpm
cd docker/mycentos7/
docker build -t mycentos:latest . // 镜像
docker run -it -d -p 8080:80 -p 8022:22 -p 63306:3306 -p 6479:6379 -p 2021:21 --privileged=true --name mycentosw mycentos:latest /usr/sbin/init // 运行容器
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
-- CREATE VIEW <视图名> AS <SELECT语句>
DROP VIEW IF EXISTS v_company_admin;
CREATE VIEW v_company_admin as SELECT c.id,c.name,c.type,a.username,a.company_id,c.cash FROM ga_company as c LEFT JOIN ga_admin as a on a.company_id = c.id where a.company_id >0;
SELECT * FROM v_company_admin;
DESCRIBE company;
DROP VIEW IF EXISTS v_baccarat_desk_user_bet_desk;
CREATE VIEW v_baccarat_desk_user_bet_desk as
SELECT bo.id,bob.amount,bob.result_amount,bob.rebate_total,bob.rebate_money,bd.game_id,bo.createtime,bo.settlement,u.username
FROM ga_baccarat_order as bo
LEFT JOIN `ga_user` as u on bo.user_id=u.id
LEFT JOIN `ga_baccarat_desk` as bd on bd.id=bo.desk_id
LEFT JOIN `ga_baccarat_order_bet` as bob on bob.order_id=bo.id;
SELECT * FROM v_baccarat_desk_user_bet_desk;
项目对象模型
项目管理工具
一组标准集合
<!-- 热部署-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->
</dependency>
<!-- mybatis -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<!-- mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.21</version>
</dependency>
<!-- jpa-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!-- springboot test 测试 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<!-- redis -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
应用
@EnableCaching // 开启缓存
@SpringBootApplication
控制器
@RestController(@ResponseBody+@Controller)
@RequestMapping
@Autowired 自动连接实体类
@ControllerAdvice // 辅助控制器
@ExceptionHandler //处理相关控制器中抛出的异常
实体类
@Entity // 实体类
@Table(name = "category_") // 表名
@JsonIgnoreProperties({ "handler","hibernateLazyInitializer" })
实体类属性
@Id // 主键
@GeneratedValue(strategy = GenerationType.IDENTITY) //自增长
@Column // 字段
Mybatis
@Mapper // MyBaits Mapper 接口
@Select(sql) // sql语句
测试类
@RunWidth(SpringRunner.class)
@SpringBootTest(classes=Application.class)
@Test()
@Before()
@RequestParam("file") MultipartFile file // 接收上传文件
spring.mvc.view.prefix=/WEB-INF/jsp/ // 页面路径
spring.mvc.view.suffix=.jsp // 静态页面后缀
server.port=8888 // 端口好
server.context-path=/test // 上下文路径
// Spring Boot 2.1.2已经把server.context-path弃掉了
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/how2java?characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=admin
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.jpa.properties.hibernate.hbm2ddl.auto=update
// spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.http.multipart.maxFileSize=100Mb
spring.http.multipart.maxRequestSize=100Mb
###########################redis#########################
#Redis数据库索引(默认为0)
spring.redis.database=0
#Redis服务器地址
spring.redis.host=127.0.0.1
#Redis服务器连接端口
spring.redis.port=6379
#Redis服务器连接密码(默认为空)
spring.redis.password=
#连接池最大连接数(使用负值表示没有限制)
spring.redis.pool.max-active=10
#连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.pool.max-wait=-1
#连接池中的最大空闲连接
spring.redis.pool.max-idle=8
#连接池中的最小空闲连接
spring.redis.pool.min-idle=0
#连接超时时间(毫秒)
spring.redis.timeout=0
spring.jpa.show-sql=true
spring:
mvc:
view:
prefix:/WEB-INF/jsp
suffix:.jsp
server:
port:8888
ontext-path:/text
@RequestMapping(value = "/upload", method = RequestMethod.POST)
public String upload(HttpServletRequest req, @RequestParam("file") MultipartFile file,Model m) {
try {
String fileName = System.currentTimeMillis()+file.getOriginalFilename();
String destFileName=req.getServletContext().getRealPath("")+"uploaded"+File.separator+fileName;
File destFile = new File(destFileName);
destFile.getParentFile().mkdirs();
file.transferTo(destFile);
m.addAttribute("fileName",fileName);
} catch (FileNotFoundException e) {
e.printStackTrace();
return "上传失败," + e.getMessage();
} catch (IOException e) {
e.printStackTrace();
return "上传失败," + e.getMessage();
}
return "showImg";
}
Carbon::now(); //当前时间 2017-11-09 9:23:20
// 直接使用字符串
echo Carbon::now('Europe/London'); //2016-10-14 20:21:20
// 或者
echo Carbon::now(new DateTimeZone('Europe/London'))
echo Carbon::now(); // 2016-10-14 15:18:34
echo Carbon::today(); // 2016-10-14 00:00:00
echo Carbon::tomorrow('Europe/London'); // 2016-10-14 00:00:00
echo Carbon::yesterday(); // 2016-10-14 00:00:00
日期类型转为字符串
echo Carbon::now()->toDateString(); //2016-10-14
echo Carbon::now()->toDateTimeString(); //2016-10-14 20:22:50
日期解析
echo Carbon::parse('2016-10-15')->toDateTimeString(); //2016-10-15 00:00:00
echo Carbon::parse('2016-10-15')->toDateTimeString(); //2016-10-15 00:00:00
echo Carbon::parse('2016-10-15 00:10:25')->toDateTimeString(); //2016-10-15 00:10:25
echo Carbon::parse('today')->toDateTimeString(); //2016-10-15 00:00:00
echo Carbon::parse('yesterday')->toDateTimeString(); //2016-10-14 00:00:00
echo Carbon::parse('tomorrow')->toDateTimeString(); //2016-10-16 00:00:00
echo Carbon::parse('2 days ago')->toDateTimeString(); //2016-10-13 20:49:53
echo Carbon::parse('+3 days')->toDateTimeString(); //2016-10-18 20:49:53
echo Carbon::parse('+2 weeks')->toDateTimeString(); //2016-10-29 20:49:53
echo Carbon::parse('+4 months')->toDateTimeString(); //2017-02-15 20:49:53
echo Carbon::parse('-1 year')->toDateTimeString(); //2015-10-15 20:49:53
echo Carbon::parse('next wednesday')->toDateTimeString(); //2016-10-19 00:00:00
echo Carbon::parse('last friday')->toDateTimeString(); //2016-10-14 00:00:00
构造日期
$year = '2015';
$month = '04';
$day = '12';
echo Carbon::createFromDate($year, $month, $day); //2015-04-12 20:55:59
$hour = '02';
$minute = '15':
$second = '30';
echo Carbon::create($year, $month, $day, $hour, $minute, $second); //2015-04-12 02:15:30
echo Carbon::createFromDate(null, 12, 25); // 年默认为当前年份
日期操作
echo Carbon::now()->addDays(25); //2016-11-09 14:00:01
echo Carbon::now()->addWeeks(3); //2016-11-05 14:00:01
echo Carbon::now()->addHours(25); //2016-10-16 15:00:01
echo Carbon::now()->subHours(2); //2016-10-15 12:00:01
echo Carbon::now()->addHours(2)->addMinutes(12); //2016-10-15 16:12:01
echo Carbon::now()->modify('+15 days'); //2016-10-30 14:00:01
echo Carbon::now()->modify('-2 days'); //2016-10-13 14:00:01
日期比较
min –返回最小日期。
max – 返回最大日期。
eq – 判断两个日期是否相等。
gt – 判断第一个日期是否比第二个日期大。
lt – 判断第一个日期是否比第二个日期小。
gte – 判断第一个日期是否大于等于第二个日期。
lte – 判断第一个日期是否小于等于第二个日期。
echo Carbon::now()->tzName; // America/Toronto
$first = Carbon::create(2012, 9, 5, 23, 26, 11);
$second = Carbon::create(2012, 9, 5, 20, 26, 11, 'America/Vancouver');
echo $first->toDateTimeString(); // 2012-09-05 23:26:11
echo $first->tzName; // America/Toronto
echo $second->toDateTimeString(); // 2012-09-05 20:26:11
echo $second->tzName; // America/Vancouver
var_dump($first->eq($second)); // bool(true)
var_dump($first->ne($second)); // bool(false)
var_dump($first->gt($second)); // bool(false)
var_dump($first->gte($second)); // bool(true)
var_dump($first->lt($second)); // bool(false)
var_dump($first->lte($second)); // bool(true)
$first->setDateTime(2012, 1, 1, 0, 0, 0);
$second->setDateTime(2012, 1, 1, 0, 0, 0); // Remember tz is 'America/Vancouver'
var_dump($first->eq($second)); // bool(false)
var_dump($first->ne($second)); // bool(true)
var_dump($first->gt($second)); // bool(false)
var_dump($first->gte($second)); // bool(false)
var_dump($first->lt($second)); // bool(true)
var_dump($first->lte($second)); // bool(true)
要判断一个日期是否介于两个日期之间,可以使用 between() 方法,第三个可选参数指定比较是否可以相等,默认为 true:
$dt = Carbon::now();
$dt->isWeekday();
$dt->isWeekend();
$dt->isYesterday();
$dt->isToday();
$dt->isTomorrow();
$dt->isFuture();
$dt->isPast();
$dt->isLeapYear();
$dt->isSameDay(Carbon::now());
$born = Carbon::createFromDate(1987, 4, 23);
$noCake = Carbon::createFromDate(2014, 9, 26);
$yesCake = Carbon::createFromDate(2014, 4, 23);
$overTheHill = Carbon::now()->subYears(50);
var_dump($born->isBirthday($noCake)); // bool(false)
var_dump($born->isBirthday($yesCake)); // bool(true)
var_dump($overTheHill->isBirthday()); // bool(true) -> default compare it to today!
diffForHumans
“一个月前”比“30 天前”更便于阅读,很多日期库都提供了这个常见的功能,日期被解析后,有下面四种可能性:
当比较的时间超过当前默认时间
1天前
5月前
当用将来的时间与当前默认时间比较
1小时距现在
5月距现在
当比较的值超过另一个值
1小时前
5月前
当比较的值在另一个值之后
1小时后
5月后
你可以把第二个参数设置为 true 来删除“前”、“距现在”等修饰语:diffForHumans(Carbon $other, true)。
echo Carbon::now()->subDays(5)->diffForHumans(); // 5天前
echo Carbon::now()->diffForHumans(Carbon::now()->subYear()); // 1年后
$dt = Carbon::createFromDate(2011, 8, 1);
echo $dt->diffForHumans($dt->copy()->addMonth()); // 1月前
echo $dt->diffForHumans($dt->copy()->subMonth()); // 11月后
echo Carbon::now()->addSeconds(5)->diffForHumans(); // 5秒距现在
echo Carbon::now()->subDays(24)->diffForHumans(); // 3周前
echo Carbon::now()->subDays(24)->diffForHumans(null, true); // 3周
本地化
可以在 app/Providers/AppServiceProvider.php 的 boot() 方法中添加下面的代码来设置全局本地化:
public function boot()
{
\Carbon\Carbon::setLocale('zh');
}
设置好之后,在输出时间的地方调用:
$article->created_at->diffForHumans();
//上个月第一天
Carbon::now()->subMonth()->firstOfMonth()
//上个月最后一天
Carbon::now()->subMonth()->lastOfMonth()
//这个月第一天
Carbon::now()->firstOfMonth()
//上个月第一天
Carbon::now()->subMonth()->firstOfMonth()->timestamp
//上个月最后一天
Carbon::now()->subMonth()->lastOfMonth()->timestamp
//这个月第一天
Carbon::now()->firstOfMonth()->timestamp
#include <cstdlib>
using namespace std;
int main()
{
system("pause");
}
extern p;// extern用在变量或函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。
// 定义常量
#define LENGTH 10
const int LENGTH = 10;
class Box
{
public:
double length; // 长度
double breadth; // 宽度
double height; // 高度
// 成员函数声明
double getVolume(void);
};
// 成员函数定义
double Box::getVolume(void)
{
return length * breadth * height;
}
class Line
{
};
Line::Line(void)
{
cout << "Object is being created" << endl;
}
Line::~Line(void)
{
cout << "Object is being deleted" << endl;
}
Line::Line(const Line &obj)
{
cout << "调用拷贝构造函数并为指针 ptr 分配内存" << endl;
ptr = new int;
*ptr = *obj.ptr; // 拷贝值
}
inline int Max(int x, int y)
{
return (x > y)? x : y;
}
tasks.json
{
"version": "2.0.0",
"tasks": [
{
"label": "build hello world",
"type": "shell",
"command": "gcc",
"args": [
"-g",
"-o",
"a",
"bubblesort.c"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
c_cpp_properties.json
# yum info git
# adduser git
# passwd git
mkdr -p /www/git/www
git init --bare
git clone [email protected]:/www/git/test/
drop table if EXISTS ga_game_way;
CREATE TABLE `ga_game_way` (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'ID',
PRIMARY KEY (`id`) USING BTREE, -- 主键
UNIQUE INDEX `uq_username`(`username`) USING BTREE, -- 唯一索引
INDEX `index_pid`(`pid`) USING BTREE, -- 普通索引
CONSTRAINT fk_bt_game_id
FOREIGN KEY (game_id)
REFERENCES ga_game_sys(id)
ON DELETE cascade
ON UPDATE cascade
-- 外键索引
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='表注释';
/*
no action , set null , set default ,cascade
no action (默认)表示 不做任何操作,不能删除数据,提示错误
set null 表示在外键表中将相应字段设置为null
set default 表示设置为默认值(restrict)
cascade 表示级联操作,就是说,如果主键表中被参考字段更新,外键表中也更新,主键表中的记录被删除,外键表中改行也相应删除
*/
新建索引
-- 唯一索引
alter table ga_user add UNIQUE uq_username(username)
-- 普通索引
alter table ga_user add INDEX index_pid(pid)
-- 外键
ALTER TABLE ga_pay_channel_way ADD CONSTRAINT fk_pcw_company_id FOREIGN KEY(company_id) REFERENCES ga_company(id);
删除索引
alter table ga_user drop
ALTER TABLE `car`.`car_product` DROP INDEX `cu_id`
启用、禁用外键约束
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0; -- 禁用外键约束
SET FOREIGN_KEY_CHECKS = 1; -- 启用外键约束
-- 查看碎片
SHOW TABLE STATUS LIKE 'ga_admin';
-- 优化表:
OPTIMIZE TABLE ga_admin;
查询进程
## 截断表
truncate table 表名
mysql -h127.0.0.1 -uroot -P 53306 -p
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newpassword';
Mat img = imread(filename,IMREAD_GRAYSCALE);
imwrite(filename,img);
Scalar intensity = img.at<uchar>(y, x); //单通道灰度图像(类型8UC1)和像素坐标x和y的示例
// BGR颜色排序的3通道图像(由imread返回的默认格式)
Vec3b intensity = img.at < Vec3b >(y,x);
uchar blue = intensity.val [0];
uchar green = intensity.val [1];
uchar red = intensity.val [2];
img.at < UCHAR >(Y,X)= 128; //改变像素强度
创建两个矩阵而不复制数据的示例
std::vector<Point3f> points;
// .. fill the array
Mat pointsMat = Mat(points).reshape(1);
// 复制数据
Mat img = imread(“image.jpg”);
Mat img1 = img.clone();
// 选择图像区域
Rect r(10, 10, 100, 100);
Mat smallImg = img(r);
// 如果矩阵为空,则此方法分配数据。如果它不是空且具有正确的大小和类型,该方法什么都不做。然而,如果大小或类型与输入参数不同,则数据被释放(并丢失)并分配新的数据。
Sobel(grey, sobelx, CV_32F, 1, 0);
// 从颜色到灰度的转换:
Mat img = imread("image.jpg"); // loading a 8UC3 image
Mat grey;
cvtColor(img, grey, COLOR_BGR2GRAY); // 转换图像
src.convertTo(dst,CV_32F); // 将图像类型从8UC1更改为32FC1:
minMaxLoc(sobelx, &minVal, &maxVal); //find minimum and maximum intensities
// 可视化图像
Mat img = imread(“image.jpg”);
namedWindow(“image”,WINDOW_AUTOSIZE);
imshow(“image”,img);
waitKey();
<?php
namespace App\Http\Middleware;
use Closure;
class EnableCrossRequestMiddleware
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$response = $next($request);
$origin = $request->server('HTTP_ORIGIN') ? $request->server('HTTP_ORIGIN') : '';
$allow_origin = [
'http://192.168.0.165:9527',
];
if (in_array($origin, $allow_origin)) {
$response->header('Access-Control-Allow-Origin', $origin); // 不可少
$response->header('Access-Control-Allow-Headers', 'Origin, Content-Type, Cookie, X-CSRF-TOKEN, Accept, Authorization, X-XSRF-TOKEN');
$response->header('Access-Control-Expose-Headers', 'Authorization, authenticated');
$response->header('Access-Control-Allow-Methods', 'GET, POST, PATCH, PUT, OPTIONS');
$response->header('Access-Control-Allow-Credentials', 'true');
}
return $response;
}
}
...
location / { # 必须在这个目录下
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS,PUT,DELETE';
add_header Access-Control-Allow-Headers 'DNT,Keep-Alive,User-Agent,Cache-Control,Content-Type,Authorization';
add_header Access-Control-Allow-Credentials true;
try_files $uri $uri/ /index.php?$query_string;
}
...
1. 哪些微服务是如何彼此调用的? sleuth 服务链路追踪
2. 如何在微服务间共享配置信息?配置服务 Config Server
3. 如何让配置信息在多个微服务之间自动刷新? RabbitMQ 总线 Bus
4. 如果数据微服务集群都不能使用了, 视图微服务如何去处理? 断路器 Hystrix
5. 视图微服务的断路器什么时候开启了?什么时候关闭了? 断路器监控 Hystrix Dashboard
6. 如果视图微服务本身是个集群,那么如何进行对他们进行聚合监控? 断路器聚合监控 Turbine Hystrix Dashboard
7. 如何不暴露微服务名称,并提供服务? Zuul 网关
Dingo API 为开发者准备的,可以帮你轻松、快速构建属于你的API。我们的目标是尽可能灵活,但是也不能覆盖所有的情况、解决所有的问题
请注意:v2.0+的Dingo API 只支持5.6+版本的laravel/lumen
安装这个包你需要
添加到你的compose.json文件并执行 compose update ,安装最新版本
"require": {
"dingo/api": "^2.4.0"
}
此时,这个包仍处于开发阶段,因此没有一个稳定的版本,您需要将最低的稳定版本开发
安装完成后,你就可以在你的项目内使用了。
如果你愿意,你可以创建一个配置文件改变配置,,使用一下命令发布配置文件
php artisan vendor:publish --provider="Dingo\Api\Provider\LaravelServiceProvider"
<?php
namespace App\Service;
use Illuminate\Support\Facades\Storage;
class BaseService
{
public function __construct()
{
}
public static function __callStatic($method, $parameters)
{
return (new static)->$method(...$parameters);
}
}
create user 'java'@'%' identified with mysql_native_password by 'Secret@888';
alter user 'java'@'%' identified with mysql_native_password by "Java@888";
drop user 'test01'@'%';
create database ja_test;
grant all on ja_test."*" to "java"@"%";
rules: {
email: [{
required: true,//是否必填
message: '请输入邮箱地址',//错误提示信息
trigger: 'blur'//检验方式(blur为鼠标点击其他地方,)
},
{
type: 'email',//要检验的类型(number,email,date等)
message: '请输入正确的邮箱地址',
trigger: ['blur', 'change'](change为检验的字符变化的时候)
}
],
phone: [{
required: true,
pattern: /^1[34578]\d{9}$/,//可以写正则表达式呦呦呦
message: '目前只支持**大陆的手机号码',
trigger: 'blur'
}],
winform
wpf
electron
cef
// 创建模型
django-admin.py startapp TestModel
tail -f 50 -n -s 2 runtime/logs/hyperf.log
kill $(cat runtime/hyperf.pid)
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.