无名晓's Space活出花样,记录精彩

Time
Comments评论

二者如何取舍
非线程安全是指多线程操作同一个对象可能会出现问题。而线程安全则是多线程操作同一个对象不会有问题。
线程安全必须要使用很多synchronized关键字来同步控制,所以必然会导致性能的降低。
所以在使用的时候,如果是多个线程操作同一个对象,那么使用线程安全的Vector;否则,就使用效率更高的ArrayList。

非线程安全!=不安全
有人在使用过程中有一个不正确的观点:我的程序是多线程的,不能使用ArrayList要使用Vector,这样才安全。
非线程安全并不是多线程环境下就不能使用。注意我上面有说到:多线程操作同一个对象。注意是同一个对象。比如最上面那个模拟,就是在主线程中new的一个ArrayList然后多个线程操作同一个ArrayList对象。
如果是每个线程中new一个ArrayList,而这个ArrayList只在这一个线程中使用,那么肯定是没问题的。

线程安全的实现
线程安全是通过线程同步控制来实现的,也就是synchronized关键字。


原文地址链接:https://www.jianshu.com/p/d46f06dd884d

Time
Comments评论

众所周知, 在现在前后端分离的大趋势下, 数据交互也变得复杂了起来。今天在写项目的时候用到了一个前端组件, 而且这个组件的数据传递方式就是传统的fetch。

问题所在: 前端的fetch请求写法正确, 但是PHP后端死活接收不到参数。在这耽搁了大概十多分钟后我受不了了,百度了半天才发现一个有用的方法,我这里转载进来,记录一下这个坑。
原文地址:点我访问


前端Fetch写法:

let data = {
    method: 'POST',
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
    },
    body : 'id=value'
};

后端PHP写法:

<?php
$requestData = $_POST['id'];
var_dump($requestData); // string(5) "value";
?>

以上为总结, 防止下次踩坑!

Time
Comments评论

最近写项目的时候会发现一个很奇怪的问题, 明明启动了Session,并且PHP设置的 Cookie_sessionid 也没有到期, 但是过了一定的时间, 之前设置的Session数据却不翼而飞, 造成错误。于是我搜索了一番发现, 只需要修改 php.ini 中的一个关键设置即可。下面是我在项目中实施的热修复:

<?php
// Your codes;
if(session_status() !== PHP_SESSION_ACTIVE) { // 如果session没有启动;
    ini_set('session.gc_maxlifetime', '10800'); // 10800秒, 也就是 60 * 3 * 60 (3小时);
    session_start();
}
?>

上面的 session.gc_maxlifetime 就是修改Session的 最大生命时间, 到期后将会被PHP的GC机制自动回收。
PHP的配置文件默认设置的过期时间为 1440 秒, 也就是 24分钟
注意: 修改Session配置文件的时候必须要 在Session启动前 修改, 否则会造成错误异常抛出!

Time
Comments评论

好久没发新文章啦。今天打算看看 Nginxaccess.log 都有哪些小可爱,结果发现里面乱的有点难受。然后我就找到了这个好玩意:log_format

根据官网文档介绍,使用 log_format 可以自定义日志记录的格式。 官网文档戳这里
下面整理了一些常用的变量定义:

$remote_addr 客户端的远程地址
$remote_user   客户端的远程用户名 (大部分情况下好像抓不到这个值)
$time_local 访问的时间与时区
$request HTTP请求头部
$status HTTP状态码, 例如:200/301/404
$body_bytes_sent 服务器发送给客户端的响应body字节数
$http_referer HTTP访问来源 (如果是直接访问网站的话这个值为空, 如果是从A站到B站的话, 这个值为A站的URL)
$http_user_agent 客户端的UA (用户浏览器信息)
$http_x_forwarded_for 客户端的代理地址 (如果代理服务器开启了禁止原始IP记录的话, 这里将没有值)

Time
TypeHTML
Comments评论

我是一个前端小白,今天写CSS的时候突然意识到原来还有这类区别:
.example .subone;
.example.subone;
.example > .subone
这三类是有区别的. 其实不难推出:

  • 第一种情况下,只有在第一层div拥有.example元素,并且在他的子集div中含有任意的.subone元素,就会匹配。
  • 第二种情况下,当一个div中同时含有.example和.subone元素时,就会匹配。
  • 第三种情况下,当第一层div拥有.example元素,并且距离他的相邻子集div(第二层)含有.subone元素,就会匹配。

搞懂了!