分类 学习记录 下的文章

公司年会要准备年终总结,还要做 PPT。不会写文章外加沉默寡言的我想想就头疼。
所以决定先在这里列一个大概的大纲,毕竟博客也荒废太久了。顺带测试一下 MWeb 这款app,因为它可以直接发布 markdown 原文(实测选择“发布为markdown” typecho没渲染成html) 到 typecho 博客(其实这才是发文章的主要原因)。


工作总结

主要是做了两个项目

  • 智联互充小程序
  • 办公系统

智联互充小程序

智联互充小程序的 uni-app 版本的重构。

  • 微信端包体积过大,无法发布。其他端首次加载缓慢。
    1. 通过分包加载,将小程序页面分为主包、公共页面、用户页面、管理员页面。主包仅包含开屏图片以及公共依赖。
    2. 将活动页面做成独立分包,通过活动链接进入小程序只加载独立分包。
    3. 引入工程化插件,打包前将图片压缩。
  • 实现路由拦截,统一处理页面跳转以及鉴权。

内部办公系统(ERP、CRM)

vue2 开发的部署在内网的一个公司内部办公自动化系统。

  • 编写 CURD 组件,将繁琐的列表增删改查抽象成一个组件。通过后端下发配置文件来动态生成列表和编辑页面,实现筛选、分页、权限验证、查看新增编辑删除。
  • 各种流程单页面不像列表页面大同小异,他们异化很大。但是仔细观察发现内部几乎都是类似的元素排列组合。所以我通过继承 CRUD 组件配合自定义配置导入不同组件的方式来实现流程单的编写。
  • 请求缓存,很多页面都会需要类似的数据。比如物料分类、部门列表。如果单独定义缓存,工作量很大不说,内存管理、依赖管理、数据污染都不好做。思来想去决定缓存请求,在编写业务逻辑的时候不需要关心其他业务组件有没有依赖他们。目前算法很简单只是通过 url 和参数计算哈希来确定唯一性默认只缓存 get 请求并且写死两秒失效(可以在调用重新设置)。后续有精力可以加入淘汰算法和垃圾清理来提高缓存效率。


学习总结

  • 完整学习了 uni-app 以及微信小程序、支付宝小程序的开发,包括支付对接、分包优化、路由拦截、第三方登录等。并且实战项目没出大问题。
  • vue2、vuex、vue-router等 vue 全家桶算是都基本熟练了。计划明年强化学习 vue3 以及 React 系列。并且开始阅读源码。
  • 在开发中不再是调包侠,遇到问题能在源码上思考问题。在问题的思考上能更有深度。
  • 参与 GitHub 社区以及微信开发者社区的讨论。在几个小项目 pr 成功成为贡献者。

早上一个uni-app cli项目npm install报错,定位到node-sass

一开始以为是node-gyp的错,因为报错信息有一句Try to update node-gyp,但是仔细一看是一个叫win32-x64-88_binding.node的包404了。

然后去https://github.com/sass/node-sass/releases/tag/v5.0.0看发现支持node15的版本还在Pre-release状态。

npm i node-sass@5.0.0 //失败 不存在这个版本

弃坑 改用dart-sass

npm rm node-sass -D
npm i sass -D

项目根目录新建vue.config.js,修改loader。

module.exports = {
    css: {
        loaderOptions: {
            sass: {
                implementation: require("sass") // This line must in sass option
            }
        }
    }
};

之后就一切正常了。
完结撒花.jpg

最近发现自己对这块很不了解,然后找到一篇不错的文章。

文中总结了一个表格便于速查,直接 copy。

更多内容请 阅读原文
转载请注明出处:http://www.bewindoweb.com/224.html | 三颗豆子
分享许可方式:知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议
许可协议  许可 限制条件  其他 
 None 不允许任何操作  -  -
 GNU GPLv3

个人使用

商业使用

专利授权

复制分发

修改

必须开源
保留版权信息
声明变更
不允许更换协议
作者免责
 MIT License 个人使用
商业使用
复制分发
修改
保留版权信息 作者免责
 Apache License 2.0

个人使用

商业使用

专利授权

复制分发

修改

保留版权信息
声明变更
不允许使用商标  
作者免责
 BSD 2-Clause 个人使用
商业使用
复制分发
修改
保留版权信息 作者免责
 BSD 3-Clause 个人使用
商业使用
复制分发
修改
保留版权信息
作者信息不允许用于推销
作者免责
 Eclipse Public License 2.0 个人使用

商业使用

专利授权

复制分发

修改

必须开源
保留版权信息
不允许更换协议
作者免责
 GNU AGPLv3 个人使用

商业使用

专利授权

复制分发

修改

必须开源
保留版权信息
声明变更
不允许更换协议
网络服务需公开完整源码
作者免责
 GNU GPLv2 个人使用

商业使用

复制分发

修改

必须开源
保留版权信息
声明变更
不允许更换协议
作者免责
 GNU LGPLv2.1 个人使用

商业使用

复制分发

修改

必须开源
保留版权信息
声明变更
不允许更换协议(衍生库)
作者免责
 GNU LGPLv3 个人使用

商业使用

专利授权

复制分发

修改

必须开源
保留版权信息
声明变更
不允许更换协议(衍生库)  
作者免责
 Mozilla Public License 2.0 个人使用

商业使用

专利授权

复制分发

修改

必须开源
保留版权信息
声明变更
不允许更换协议(文件)
作者免责
 The Unlicense 个人使用

商业使用

复制分发

修改

 - 作者免责

Linux查看文件指定行数内容

1、tail date.log 输出文件末尾的内容,默认10行

tail -20  date.log        输出最后20行的内容

tail -n -20  date.log    输出倒数第20行到文件末尾的内容

tail -n +20  date.log   输出第20行到文件末尾的内容

tail -f date.log            实时监控文件内容增加,默认10行。

2、head date.log 输出文件开头的内容,默认10行

head -15  date.log     输出开头15行的内容

head -n +15 date.log 输出开头到第15行的内容

head -n -15 date.log  输出开头到倒数第15行的内容

3、sed -n "开始行,结束行p" 文件名

sed -n '70,75p' date.log             输出第70行到第75行的内容

sed -n '6p;260,400p; ' 文件名    输出第6行 和 260到400行

sed -n 5p 文件名                       输出第5行

tail 和 head 加上 -n参数后 都代表输出到指定行数,tail 是指定行数到结尾,head是开头到指定行数

+数字 代表整数第几行, -数字代表倒数第几行

原文链接 https://www.cnblogs.com/zeke-python-road/p/9455048.html

最近重新安装了MySQL,遇到一些问题,发现几篇文章,觉得有用就转过来了。

MySQL5.7开启远程访问及Ubuntu18.04防火墙3306端口

在虚拟机中安装了Ubuntu18.04,MySQL5.7。系统默认的root等只能在本地访问,host被限制为localhost,为了进行Java程序测试,本地eclipse访问虚拟机的数据库,避免用户管理混乱,特意新建一数据库和用户。

新建数据库ttmsg,用户ub64,开启ub64用户远程访问的过程。

--新建数据库ttmsg
 
mysql> CREATE DATABASE ttmsg;
Query OK, 1 row affected (0.00 sec)
 
--新建用户ub64,和登陆密码,设置访问限制为%,允许远程访问。
mysql> CREATE USER 'ub64'@'%' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.01 sec)
 
--给新建的用户ub64访问数据库ttmsg的所有权限
mysql> grant all privileges on ttmsg.* to 'ub64'@'%' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)
 
--刷新权限列表,这样就可以用ub64用户登陆了
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
 
--新建数据表,开始测试。
mysql> CREATE TABLE Student(
    ->    ID   INT NOT NULL AUTO_INCREMENT,
    ->    NAME VARCHAR(20) NOT NULL,
    ->    AGE  INT NOT NULL,
    ->    PRIMARY KEY (ID)
    -> );
Query OK, 0 rows affected (0.01 sec)
 
mysql> show tables;
+-----------------+
| Tables_in_ttmsg |
+-----------------+
| Student         |
+-----------------+
1 row in set (0.00 sec)

在eclipse中调试java程序,尝试往Student表中插入数据,报错了。

------Records Creation--------
Exception in thread "main" org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
 
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
    at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:612)
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:862)
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:917)
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:927)
    at com.tutorialspoint.StudentJDBCTemplate.create(StudentJDBCTemplate.java:14)
    at com.tutorialspoint.MainApp.main(MainApp.java:13)
Caused by: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

好吧,检查报错说远程JDBC创建失败,没连上。检查一下MySQL是不是没有开通对外的3306端口过滤,导致外部地址无法访问呢,通过netstat命令,检查3306端口,果然只有一个127.0.0.1:3306的监听端口。

ub64@ub64-1804-1:~$ netstat -ntpl
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:23              0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.1:6010          0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:27017           0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      -
tcp6       0      0 :::22                   :::*                    LISTEN      -
tcp6       0      0 ::1:6010                :::*                    LISTEN      -

怀疑是否配置mysqld.cnf文件,检查bind-address的设置值问题。

vim /etc/mysql/mysql.conf.d/mysqld.cnf

#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address            = 127.0.0.1

好吧,把bind-address修改成0.0.0.0,无限制,重启mysql服务。重新检查netstat,3306端口的访问已经有所有来源地址的监听了。

bind-address            = 0.0.0.0
 
ub64@ub64-1804-1:~$ service mysql restart
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to restart 'mysql.service'.
Authenticating as: ub64-1804-1 (ub64)
Password:
==== AUTHENTICATION COMPLETE ===
ub64@ub64-1804-1:~$ netstat -ntpl
(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:23              0.0.0.0:*               LISTEN      -
tcp        0      0 127.0.0.1:6010          0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:27017           0.0.0.0:*               LISTEN      -
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      -
tcp6       0      0 :::22                   :::*                    LISTEN      -
tcp6       0      0 ::1:6010                :::*                    LISTEN      -

继续程序代码测试,重新跑数据库访问程序。额(⊙﹏⊙),又出错了,还是一样的报错信息,还是没有建立连接。

------Records Creation--------
Exception in thread "main" org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
 
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
    at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:81)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:612)
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:862)
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:917)
    at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:927)
    at com.tutorialspoint.StudentJDBCTemplate.create(StudentJDBCTemplate.java:14)
    at com.tutorialspoint.MainApp.main(MainApp.java:13)
Caused by: com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

好吧,那应该就是系统防火墙没有开了,我也没有设置过。检查防火墙通过规则,果然grep一下没有见到3306的端口记录。

ub64@ub64-1804-1:~$ sudo iptables -L -n
Chain INPUT (policy DROP)
target     prot opt source               destination
ufw-before-logging-input  all  --  0.0.0.0/0            0.0.0.0/0
ufw-before-input  all  --  0.0.0.0/0            0.0.0.0/0
ufw-after-input  all  --  0.0.0.0/0            0.0.0.0/0
ufw-after-logging-input  all  --  0.0.0.0/0            0.0.0.0/0
......
 
ub64@ub64-1804-1:~$ sudo iptables -L -n | grep 3306
ub64@ub64-1804-1:~$ 

那就好办了,iptables新增一条3306的端口允许通过规则,在重新检查一下iptables,这下有了。

ub64@ub64-1804-1:~$ sudo iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
 
ub64@ub64-1804-1:~$ sudo iptables -L -n | grep 3306
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:3306
ub64@ub64-1804-1:~$ 

重新测试程序,程序访问成功。果然,开启mysql的访问,不仅要设置user表用户的访问控制权限,还要设置mysqld.cnf的bind-address,同时系统防火墙规则也要配置好3306的端口通过权限。这3个地方的控制缺一不可。

//程序日志
------Records Creation--------
Created Record Name = Zara Age = 11
Created Record Name = Nuha Age = 2
Created Record Name = Ayan Age = 15
 
mysql> select * from Student ;
+----+------+-----+
| ID | NAME | AGE |
+----+------+-----+
|  1 | Zara |  11 |
|  2 | Nuha |   2 |
|  3 | Ayan |  15 |
+----+------+-----+
3 rows in set (0.00 sec)

另外,在程序访问数据库进行操作的日志中出现了WARN告警如下:

Sun Oct 07 21:21:50 GMT+08:00 2018 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.

上网搜了一下,以下参考来自我是康小小的CSDN博客


原来是Mysql数据库的SSL连接问题,提示警告不建议使用没有带服务器身份验证的SSL连接,是在MYSQL5.5.45+, 5.6.26+
and 5.7.6+版本中才有的这个问题。解决办法在警告中已经说明了:

1.在数据库连接的url中添加useSSL=false;

jdbc:mysql://localhost:3306/test?useSSL=false
或者在使用Java进行JDBC连接的时候,可以在Properties对象中设置useSSL的值为false。 

2.url中添加useSSL=true,并且提供服务器的验证证书。

参考来源地址:https://blog.csdn.net/u010429286/article/details/77750177


作者:秋野001
来源:CSDN
原文:https://blog.csdn.net/ZENMELAOSHIYOUREN/article/details/82961610