所有由zhufenghua发布的文章

程序员最好不要习惯于使用一台电脑

你可能以为电脑永远不会坏,或者认为即使会坏,也没这么快。

但是连续两次的突发事故,彻底改变了我的想法。

一旦它损坏了,就会带来不可预测的损失。

一个公司的数据如果丢了,破产是有可能的,对一个个人来说,数据丢了,这个人也彻底废了。

第一次电脑损坏,导致了一年的低迷期,

刚过半年,又发生事故损坏了。

这一次,学精了,果断配置两台电脑,手机都配上两台,服务器备份什么的,必须。只有亲身经历过,才能懂的感受。

要毁掉一个程序员很简单:就是把它的电脑搞坏。

PHP shuffle() 函数

把数组中的元素按随机顺序重新排序:

语法:

shuffle( & array)

shuffle() 函数把数组中的元素按随机顺序重新排列。

该函数为数组中的元素分配新的键名。已有键名将被删除。

如果要保留 key ,可以手动写一个函数:

function shuffle_assoc($my_array)

{

    $keys = array_keys($my_array);

 

    shuffle($keys);

 

    foreach($keys as $key) {

        $new[$key] = $my_array[$key];

    }

 

    $my_array = $new;

 

    return $my_array;

}

 

$colors = array("color1"=>"Red", "color2"=>"Green", "color3"=>"Yellow");

echo '<pre>';

print_r(shuffle_assoc($colors));

数据库字段设计之有效期、过期模式

聊一聊常见的“过期”业务。

有一篇文章,我们可以设定它什么时候过期。

  • 永不过期
  • 指定过期时间

此时,只需要一个字段 ,比如指定 valid :假设为0时,则永不过期,否则为具体的过期时间。

筛选没过期的:valid=0 || valid > $now

筛选过期的:valid!=0 && $valid<$now

有一张优惠券,我们可以设定它的过期模式:

  • 指定时间过期(发布时就指定)
  • 购买后n天过期
  • 永不过期

此时,需要两个字段,expire_type 记录过期类型,expire_value ,永不过期时value无效,指定时间时value是具体时间,购买后n天过期则value就是n。

头痛医脚怎么理解?

中医认为人的身体有经络。

经络不同,则产生疾病,头和脚之间实际是有很多经络的(或者说经络是全身贯通的)。

但是今天突然感觉这个说法太模糊。

简单点来说,我认为:距离头越近的部位,越敏感!!!

虽然经络有些不通,但是脚的感觉很不敏感,能感觉到的通常只有头痛。

前面解释了,经络不同时为什么是头痛。

第二个,为什么医脚?怎么理解?

人的身体是靠脚来支撑的,脚上的肌肉更加发达,越接近脚的部位,越发达。

从脚入手,更容易治。(你可能要问了,掉头发,医脚有用吗?有!)

网站统计在线人数–websocket 与 session

http 是无状态的,无法感知用户在线状态

登录增加在线人数、推出减少在线人数,这是非常不准确的做法(比如用户直接关闭浏览器,而不是点击退出系统,此时就无法正确的统计)

第一个办法:session 的个数

比如监听 session 创建,每创建一个session则增加一个在线人数,每销毁一个session就减少一个在线人数。在java里实现很简单。

package com.demo.listener;


import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class PeopleListener implements HttpSessionListener {
    /**
     * 监听session创建
     * @param se
     */
    @Override
    public void sessionCreated(HttpSessionEvent se) {
        ServletContext context = se.getSession().getServletContext();
        Integer num = (Integer) context.getAttribute("online_num");
        if(num == null)
            num = 0;
        ++num;
        context.setAttribute("online_num",num);
        System.out.println("新增一位用户...");
    }

    /**
     * 监听session销毁
     * @param se
     */
    @Override
    public void sessionDestroyed(HttpSessionEvent se) {
        ServletContext context = se.getSession().getServletContext();
        Integer num = (Integer) context.getAttribute("online_num");
        if(num == null)
            num = 0;
        else
            --num;
        context.setAttribute("online_num",num);
        System.out.println("减少一位用户...");
    }
}

对于 php 等没有 application 的语言,是无法获取session的个数的,此时可以通过把 session 存入数据库实现,比如在 session 创建时,记录(session_id())到数据库中,并记录添加的时间,每次点击都记录最新活动时间,并把5分钟外的session全部删掉,那么当前表中的记录数,就是当前在线人数。(尽管不那么精确,但是很接近了)

websocket方案

WebSocket技术实现了什么

在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

在 WebSocket API 中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。

则每次创建 websocket,则增加一个在线人数,websocket断开则减少一个在线人数。

服务器可以检测到 websocket 的活动,并进行广播,当前在线记录数考虑记录在 application 中,php等语言可以记录在数据库或redis。

说感谢的话,一定要加原因,说到点上

最直接、成本最低且收效很高的回馈,就是说话

如果只是说谢谢你,辛苦你了,等等词语,虽然你可能是真心的,但对方却感觉不怎么样。

在说感谢的话,一定要加原因:

  • 麻烦你了,xxxx,因为xxx,真是太抱歉了
  • 谢谢你,如果不是你,xxxx就xxx,真是太感谢了

教大家两个公式:感谢+事件+感受,感谢+事件+效果。

“领导,谢谢您的肯定,我没想到您观察的这么仔细,我很感动。”这是说感受。

“领导啊,谢谢您。听您这么一说,我豁然开朗,以后就按您说的办。”豁然开朗,说的是感受。

“领导,感谢您对我工作的严要求,让我提升很快,这都是您的功劳。”提升快,是说效果。

“领导,以前我不会写材料,是您手把手教我,现在他们都夸我材料写得好,是您这个师傅教得好,我敬您。”他们夸我,说的也是效果。

“领导,上次那个事,多亏了您开导我,拉了我一把,您是我的及时雨。”

别人帮了你,要第一时间回馈,表达感谢。

一可以让对方心里舒服,觉得没白忙活;二能趁热打铁,促进关系升温;三为下次做铺垫、打基础,这次你表现好,对方才愿意帮你第二次。

我见过一些人,求人办事时,非常积极,一天好几个电话,恨不得每天黏在你身上。

事情一办完,马上冷下来,来往明显减少。当初说的付出什么代价都可以,事成之后,各种拖延,甚至躲着不见,典型的用人朝前不用人朝后。

这样的人很势利,目的性强,短期内确实能获利,但是走不远。

话说到位,心意到位,领导受用了,比送多少礼都有用。