Giter Club home page Giter Club logo

blog's People

Contributors

lyhisphper avatar phperbylyh avatar

Stargazers

 avatar

Watchers

 avatar  avatar

blog's Issues

Linux 常用命令

# 删除相关进程
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 &

Jwt

    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; // 过期时间

centos 添加nginx环境变量

  1. 修改 /etc/profile 文件,在末尾添加 nginx 路径
    image

  2. 执行 “# source /etc/profile” , 使 环境变量生效

# source /etc/profile
  1. 完成
    image

Git常用命令

创建rsa公钥、秘钥

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放弃修改,强制覆盖本地代码

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

已有代码添加Git管理
// 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 Machine

快速去创建安装docker环境的工具

Docker Compose

用于定义和运行多容器 Docker 的应用程序工具

Docker Swarm

集群管理工具,其主要作用是把若干台 Docker 主机抽象为一个整体,并且通过一个入口统一管理这些 Docker 主机上的各种 Docker 资源

docker-composer nginx config

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;
    }
}

Eclipse 安装初始配置

修改字符集

选择 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

添加 Tomcat Server

window -> preferences->搜索 “Runtime Environments”->add(如果没有找到tomcat选项请参考上一步)

  1. image
  2. image
  3. Apply and Close
  4. window->show view->Other->Server->Servers
    image
  5. 在浏览器输入地址"http://localhost:8080/"
    image

代码自动补全

Windows->Preferences->Java–>Editor–>点击Content Asist
修改"Auto activation triggers for Java"的“.”为"
.abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"

Docker 常用命令

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;
        #}
    }

Mysql 高级操作

-- 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;

Spring Boot

  • Spring Tool Suite
  • maven 风格
项目对象模型
项目管理工具
一组标准集合

  • 配置好的SSM/SSH
  • pom.xml == composer.json
         <!-- 热部署-->
        <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-boot-devtools)
  • application.properties、application.yml
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
  • 多配置切换(多配置文件,根据打包不同的配置文件适应不同的运行环境)
  • JPA(Java Persistence Api) Java 持久层规范
  • 上传文件Demo
 @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";
    }   
  • Restful : 同一个url不同的method(post,get,put,delete)实现不同的操作
  • thymeleaf:类似jsp,区别:纯html

Elipse 反向生成Hibernate实体类

添加数据库连接

Window->show view->Data Management->Data Source Eexplorer
image

添加Hibiernate Configurations

Window->show view->Hibernate->Hibernate Configurations
image
image

生成实体类

Run new_configuration->Hibernate Code Generation Configurations
image
image
image

Carbon 示例

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

C++

  • 程序设计语言:顾名思义,设计程序的语言,此程序为可执行程序,与web应用程序有着本质的区别
  • g++ ,为gcc的特殊版本,默认编译c++
  • gcc 主要编辑c语言,c++为c的超集,亦可编译c++
  • 运行结束不关闭cmd
#include <cstdlib>
using namespace std;
int main()
{
    system("pause");
}

函数

extern p;// extern用在变量或函数的声明前,用来说明“此变量/函数是在别处定义的,要在此处引用”。

// 定义常量
#define LENGTH 10 
const int  LENGTH = 10;
  • 指针(&):变量内存中的地址:&var; 指针变量声明:int *ip = &var;(存储指针变量)
  • 引用:变量附属在内存位置中的第二个标签 (int& r = i;)
  • 数据结构: struct
  • 成员函数:
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; // 拷贝值
}
  • 友元函数:类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员
  • 内联函数:在类定义中的定义的函数都是内联函数,即使没有使用 inline 说明符。
inline int Max(int x, int y)
{
   return (x > y)? x : y;
}

Vscode

tasks.json

  • 编写命令,然后使用快捷命令“ctrl+shift+b”快速执行
{
  "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

  • 设置环境变量

搭建git服务器

Server

安装git

# yum info git

image

创建git账号

#  adduser git
#  passwd git

创建git仓库

mkdr -p /www/git/www
git init --bare

client

拉取代码

 git clone [email protected]:/www/git/test/

测试

MySql常用语句

新建数据表


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;

查询进程

show processlist;


## 截断表

truncate table 表名


mysql -h127.0.0.1 -uroot -P 53306 -p
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newpassword';


OpenCv

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();

nginx laravel 跨域

laravel 添加全局中间件

<?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;
    }
}

nginx 配置跨域

...
    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;
    }

...

Spring Boot

  • Spring Cloud: 工具,改造单体结构到集群+分布式的工具
  • 微服务:微服务之间通过注册中心定位并访问
1. 哪些微服务是如何彼此调用的? sleuth 服务链路追踪
2. 如何在微服务间共享配置信息?配置服务 Config Server
3. 如何让配置信息在多个微服务之间自动刷新? RabbitMQ 总线 Bus
4. 如果数据微服务集群都不能使用了, 视图微服务如何去处理? 断路器 Hystrix
5. 视图微服务的断路器什么时候开启了?什么时候关闭了? 断路器监控 Hystrix Dashboard
6. 如果视图微服务本身是个集群,那么如何进行对他们进行聚合监控? 断路器聚合监控 Turbine Hystrix Dashboard
7. 如何不暴露微服务名称,并提供服务? Zuul 网关

dingo/api_zh_en

Dingo API 为开发者准备的,可以帮你轻松、快速构建属于你的API。我们的目标是尽可能灵活,但是也不能覆盖所有的情况、解决所有的问题

安装

要求:

请注意:v2.0+的Dingo API 只支持5.6+版本的laravel/lumen

laravel 6

安装这个包你需要

  • PHP ^7.1(laravel 5.6+)
  • PHP ^7.2(larvel 6+)

添加到你的compose.json文件并执行 compose update ,安装最新版本

"require": {
    "dingo/api": "^2.4.0"
}

此时,这个包仍处于开发阶段,因此没有一个稳定的版本,您需要将最低的稳定版本开发

安装完成后,你就可以在你的项目内使用了。

laravel

如果你愿意,你可以创建一个配置文件改变配置,,使用一下命令发布配置文件

php artisan vendor:publish --provider="Dingo\Api\Provider\LaravelServiceProvider"

PHP 常用函数

常规方式调用静态函数

<?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);
    }
}

Mysql 8.0 管理

创建用户

 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"@"%";

转载自mysql8创建用户、删除用户、授权、取消授权

element 前端表单验证规则

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'
    }],

.Net

.NET 框架

.NET Framework
.NET Core

.NET UI 框架

winform
wpf
electron
cef

Linux 常用命令

tail -f 50 -n -s 2 runtime/logs/hyperf.log
kill $(cat runtime/hyperf.pid)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.