在phpstorm中三分钟搭建laravel框架源码阅读环境

laravel框架作为php语言排名第一的框架,源码也是非常值得研究的

作者在phpstorm里搭建了一套源码阅读环境,研究搭建这套环境花了些时间,作者对这个搭建步骤进行优化总结,使用下面的步骤就可以快速完成搭建了

下载源代码

github源码地址:https://github.com/laravel/framework

使用git下载源码

git clone https://github.com/laravel/framework.git

效果如下

下载依赖

laravel框架使用composer管理依赖,进入到framework目录,使用composer install命令下载依赖就可以了,命令如下

cd framework
composer install

查看执行效果:

Read more   2018/5/13 posted in  LARAVEL 源码分析

上线流程

dev

准备迭代分支,需要联调时合并到dev分支进行联调

dev 为了开发效率可以随意一些,但是为了改表/配置等在test, stage, production环境可以复用,可以走系统,比如配置系统nacos/apollo,sql审核平台yearling

开发完成后,跑冒烟测试,这个环境非常重要,直接决定提测的质量

test

代码合并到test分支

给测试、产品验收

stage

production

2018/4/28 posted in  项目管理

整理现行规范中没有明确的规范

sonarqube 检测3A以上

可以使用docker搭建sonarqube检测服务器: https://github.com/SonarSource/docker-sonarqube

java

遵守阿里巴巴的p3c规范:https://github.com/alibaba/p3c

php

遵守psr规范: https://psr.phphub.org/

c#

无官方,暂行:https://gist.github.com/zhuqling/a2700703d088b8746f0c

数据库

  1. 字段长度尽量使用2的次幂,做计算机字节长度对齐,比如 varchar(16)

redis

  1. 通用的redis key不用加项目前缀
  2. 多个单词或者值之间使用:进行分割,符合阿里云Redis开发规范,同时在rdm等客户端中可以显示层级
2018/4/13 posted in  规范

58到家MySQL军规升级版

一、基础规范

  • 表存储引擎必须使用InnoDB

  • 表字符集默认使用utf8,必要时候使用utf8mb4

解读:

(1)通用,无乱码风险,汉字3字节,英文1字节

(2)utf8mb4是utf8的超集,有存储4字节例如表情符号时,使用它

Read more   2018/4/13 posted in  规范

华为JAVA编程规范

规范一:【避免在程序中使用魔鬼数字,必须用有意义的常量来标识。】

是否是魔鬼数字要基于容易阅读和便于全局替换的原则。

比如:0、1作为某种专业领域物理量枚举数值时必须定义常量,严禁出现类似NUMBER_ZERO的“魔鬼常量”。

规范二:【明确方法的功能,一个方法仅完成一个功能。】

Read more   2018/4/13 posted in  规范

完整阿里云 Redis 开发规范

本文主要介绍在使用阿里云Redis的开发规范,从下面几个方面进行说明。

  • 键值设计
  • 命令使用
  • 客户端使用
  • 相关工具

通过本文的介绍可以减少使用Redis过程带来的问题。

一、键值设计

1、key名设计

可读性和可管理性

Read more   2018/4/13 posted in  规范 Redis

名词概念

java o类 定义

这个每个公司的规范都不同大家貌似都不喜欢非常多的 O 类。

我的想法,最起码要 PO 数据持久化对象,需要避免从 Service 暴露出去。禁止在上面加存储无关的属性。

也就说,一般 PO 是 Service 到 DAO ,和 DAO 返回给 Service 。

————

既然 PO 不从 Service 暴露出去,那么就要解决 Service 出参和入参问题。一般是 DTO 入参,DTO 出餐。看过一些公司,新增了 BO 作为出餐,和 DTO 分开。

——

在然后就是 Controller 的出入参,就是按照你说的 VO 。因为 Controller 的入参可能重用度低,也可以直接用 @RequestParam 注解

2018/3/27 posted in  JAVA

VIM寄存器:从新手到高手

Vim的寄存器是只有你先知道它是什么后才会想到使用的特性,一旦你学会使用寄存器后,它就会成为你的Vim工作流程中不可缺少的一部分,但是学习如何使用寄存器比较困难,换句话说,有很多使用vim多年的人也不知道如何合理的使用寄存器,接下来跟着我学习如何使用寄存器,你就不会成为他们中的一员!

如果你不知道我在说什么

你可以认为寄存器就是很多块内存空间,vim使用这些空间保存一些文本,每个空间都有一个唯一的标识,而后,可以通过标识访问对应的内存空间中的文本。

把文本复制到剪切板中并不困难,有时感到困难的是剪切板无法同时保存多个文本,所以,vim的寄存器的作用就体现出来了,寄存器就是可以保存多个文本的剪切板!

Read more   2018/1/10 posted in  VIM

jetbrains、idea系列编辑器安装与调优

关闭光标闪动

Editor -> General -> Appearance -> Caret blinking 关闭

clion调试Makefile项目

比如memcached 1.2.0: https://github.com/memcached/memcached/releases/tag/1.2.0

cmake_minimum_required(VERSION 3.12)
project(memcached)

set(CMAKE_CXX_STANDARD 11)
set(BUILD_DIR ${PROJECT_SOURCE_DIR})  #设置编译目录,也就是Makefile文件所在目录
message(${BUILD_DIR}) #打印目录路径
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
add_custom_target(memcached COMMAND make -C ${BUILD_DIR}) #最关键的就是这句, 设置外部编译文件而不是使用CMakeLists.txt

aux_source_directory(. source_list)
add_executable(source_inteligence  ${source_list})

下面这两行

aux_source_directory(. source_list)
add_executable(source_inteligence  ${source_list})

添加一个source_inteligence可执行结果是为了让编辑器可以正确的提示代码

find usage

find usage查找符号使用的位置在调试源码时非常有用

对应的快捷键是command + f7

2017/8/11 posted in  编辑器

vmware fusion静态ip配置

新建静态ip网卡

注意:使用静态ip需要把DHCP去掉

获取新网卡ip段

添加新网卡到虚拟机

并使用新加的这个网卡

配置虚拟机静态ip

/etc/sysconfig/network-scripts
新增配置文件,比如ifcfg-ens37,内容如下

TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens37
DEVICE=ens37
ONBOOT=yes
IPADDR=192.168.26.23
NETMASK=255.255.255.0
GATEWAY=192.168.26.2
DNS1=192.168.26.2

重启就可以使用192.168.26.23这个静态ip了

一些注意的点

  1. 注意虚拟机的ip段需要和网卡保持一致
2017/8/9 posted in  mac

面试题-字符串的处理 近义词正反双向替换

试题

$words = array(
'我'=>'你',

'不错'=>'很好',

'cc'=>'XXX',

);

$str = '你和我今天很好,XXX,是不是不错';

替换后结果 我和你今天不错,cc,是不是很好

(近义词可能是任意词语,给定的数组的键替换成值,值替换成键)

解决方案

参考代码:

<?php

$words = array(
    '我'=>'你',
    '不错'=>'很好',
    'cc'=>'XXX',
);
$str = '你和我今天很好,XXX,是不是不错';

$words = array_merge($words, array_flip($words));
$regex = "/" . implode('|', array_map(function($word) {
    $word = "(" . str_replace(['"'], [''], json_encode($word)) . ")";
    $word = preg_replace("/\\\u(.{4})/", "\x{\$1}", $word);
    return $word;
}, array_keys($words))) . "/u";

echo preg_replace_callback($regex, function($matches) use ($words) {
    $keyword = end($matches);
    return $words[$keyword];
}, $str);
2017/8/9 posted in  面试题 PHP

centos7设置第二个ip

cd /etc/sysconfig/network-scripts/

vi ifcfg-ens33:0

NAME=ens33:0
DEVICE=ens33:0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.2.2
NETMASK=255.255.255.0
2017/7/22 posted in  OPS