发现一段变态的代码技术
看:
<h1><a class="__yjs_email__" href="/cdn-cgi/l/email-protection" data-yjsemail="1a4d73742dfda9a1fda185fea7a5fd8eb2fd8eaff29e8bfd9392ffa4b4fea5bbffbc98fea78f5aff92b1fea0a0">[email protected]</a><script data-yjshash='f9e31' type="text/javascript">/* <![CDATA[ */!function(t,e,r,n,c,a,p){try{t=document.currentScript||function(){for(t=document.getElementsByTagName('script'),e=t.length;e--;)if(t[e].getAttribute('data-yjshash'))return t[e]}();if(t&&(c=t.previousSibling)){p=t.parentNode;if(a=c.getAttribute('data-yjsemail')){for(e='',r='0x'+a.substr(0,2)|0,n=2;a.length-n;n+=2)e+='%'+('0'+('0x'+a.substr(n,2)^r).toString(16)).slice(-2);p.replaceChild(document.createTextNode(decodeURIComponent(e)),c)}p.removeChild(t)}}catch(u){}}()/* ]]> */</script></h1>
编程语言,其实不需要那么复杂技术
自古以来,国人都注重根本,有钱人,海外归来寻根,建祠堂。所以,根是万物之本,学习也是一样,外表的花里胡哨,见好就收。学习要学基础,学底层。
为什么重量级别的项目都是用 C 语言来写的?因为语言级别的东西真的不需要那么的复杂,复杂的结果就是:哪怕你用尽全身力气,写出覆盖 100% 的测试代码,有很多隐蔽性的逻辑错误甚至是数据错位你是测试不出来的,这些罪魁祸首就是编程语言本身太过于复杂导致,搞出那么多的花样做什么?作死的节奏啊。
面对招聘的奇葩要求,大部分程序员也就浪费在 上层 编程语言的新特性上了,呜呼哀哉!
为什么不用 C 语言来开发应用级别的代码?不是不可以,是很多开发人员的积累不够导致的恶性循环,积累足够的大牛根本不需要用 C 语言之外的其他语言来做。
PHP 0=='UNSET'? 刷新你的三观技术
这是一个老生常谈的问题,朋友和我聊天聊到这样一个问题,作为一个面试官,你也许一定要用这个去做一个对候选人参考。
朋友在面试新晋程序员的时候,发现十多个候选人竟然没有一个人做对了,也是醉了,可见,技术来源于实践,没有实践的认识不敏感,不牢靠,最后朋友还是录用了一个小姑娘,说团队男人太多,来点温柔的福利比较好,我呵呵,管理是门大学问,团队建设要小心为妙。
lindeMacBook-Pro:l lin$ php -v PHP 7.1.7 (cli) (built: Jul 15 2017 18:08:09) ( NTS ) Copyright (c) 1997-2017 The PHP Group Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies lindeMacBook-Pro:l lin$ php -r "var_dump(0==='UNSET');" bool(false) lindeMacBook-Pro:l lin$ php -r "var_dump(0=='UNSET');" bool(true) pi@raspberrypi:l $ php -v PHP 7.3.19-1~deb10u1 (cli) (built: Jul 5 2020 06:46:45) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.3.19, Copyright (c) 1998-2018 Zend Technologies with Zend OPcache v7.3.19-1~deb10u1, Copyright (c) 1999-2018, by Zend Technologies pi@raspberrypi:l $ php -r "var_dump(0==='UNSET');" bool(false) pi@raspberrypi:l $ php -r "var_dump(0=='UNSET');" bool(true) lindeMacBook-Pro:l lin$ php -r "var_dump(0=='UNSET');" bool(true) lindeMacBook-Pro:l lin$ php -r "var_dump('UNSET');" string(5) "UNSET" lindeMacBook-Pro:l lin$ php -r "var_dump('unset');" string(5) "unset" lindeMacBook-Pro:l lin$ php -r "var_dump('unset'==0);" bool(true)
MySQL update where in 子查询导致锁表技术
说实话,我第一次碰都这样的报错,因为我在 update 语句的条件里面使用了子查询,我以为执行会很快,因为子查询我试过,就一两秒的事情,数据也没多少个,90 来条数据,修改的条件是主键 ID,整个 SQL 执行下来我以为也就两秒,谁知道,执行了第一次,发现卡住了,于是 Ctrl+c 终止了,以为是网络问题,于是又重试了一次,还是不对了,于是远程删除了进程。
到此,我以为进程也清理了,应该没事了,结果到了凌晨,报错了,查询数据库,原来是锁住了。
给大家看看我的报错堆栈,不算深,给大家看看而已,这个不是最深的。去掉了一些路径:
[ 2021-01-25T01:44:58+08:00 ] /index/script/job, LmlException: HY000 1205 Lock wait timeout exceeded; try restarting transaction in MysqlPdoEnhance.php:109 Stack trace: #0 MysqlPdoEnhance.php(153): MysqlPdoEnhance->query('UPDATE _s...', Array) #1 Model.php(39): MysqlPdoEnhance->update('_s...', Array, 'id=123584', Array) #2 spider.php(908): Model->update(Array, 'id=123584') #3 job.php(26): Job->{closure}(20) #4 job.php(28): {closure}() #5 [internal function]: {closure}() #6 job.php(293): Generator->next() #7 job.php(302): Job->start() #8 LmlBase.php(53): include('lmlphp...') #9 LmlBase.php(39): LmlBase->fetch('lmlphp...') #10 Index.php(22): LmlBase->display('', '/job.php') #11 [internal function]: Index->script() #12 lml.min.php(1): ReflectionMethod->invoke(Object(Index)) #13 index.php(134): LmlApp->run(true) #14 {main}
树莓派实现实时监控报警器技术
声音报警其实比起什么短信邮件报警要好很多,比如你在公司工作,一台服务器出了问题,直接声音报警更及时可靠啊。所以就有了这篇文章。
我们来说说具体实现吧。
我开始了解到树莓派有很多的开发配件,看到一些发声设备,什么有源发声器和无源发声器等等。
但是,我后来发现树莓派是有 3.5mm analog 耳机孔的,为了更加简单,我想,能不能直接使用小喇叭,让耳机孔直接驱动其发声呢。发现是可以的,就是声音比较小,于是淘宝一搜索,真的有这样的东西在卖,于是买了一个。
买来之后,发现可以用,使用 vlc 将声音调到最大,发现还是小的可怜,且没有音质可言,感觉很奇葩的产品。于是乎,我使用起了我以前台式机使用的两个喇叭做为报警器,结果发现树莓派自带的 USB 不能供电,一供电就声音噪声特别大,还得另外 USB 供电,后来突然发现树莓派耳机插口处的金属像是烧掉了一样,感觉快烂了,不知道怎么回事呢。