三分快乐,七纷幸福 发布的文章

今天面试遇到一个奇葩问题,让写出int类型的长度范围,数字那么大,瞬间懵逼,特此来总结一下,方便记忆
我们知道int类型占4个字节,1字节是bit,计算机存储单位是位,但是在2进制中,0001 = 1 = 2^1-1, 0011 = 3 = 2^2-1 ...,以此类推,计算结果=2^n次方-1,所以最大值 0111 1111 1111 1111 1111 1111 1111 1111 = 2^(32-1)-1 (这里再减去1是因为最高位32位标志位,不参与运算),最小值为-2^(32-1)-1,然后说一下中间值0,根据符号位的不同,有+0和-0的区别
+0: 00000000 00000000 00000000 00000000
-0: 10000000 00000000 00000000 00000000
由于0只能使用一个,本着不浪费的原则,用+0表示0,那-0就可以在最小的基础上再表示一个数值,所以对于有符号型,最小值可以是-(2^(32-1)-1)+1,所以int类型有符号型表示的范围就-2^到2^(32-1)-1

对应其他几种数据类型
tinyint 占1字节
smallint 占2字节
mediumint 占3字节
bigint 占8字节

参考:https://blog.csdn.net/weixin_43401380/article/details/121199473

生成桌面快捷方式程序如下

  header("Content-type: text/html; charset=gbk");
  $title = !empty($_GET['title'])?$_GET['title']:'';//获取传值
  $url = !empty($_GET['url'])?$_GET['url']:'';//获取传值

  $title = test_input($title);
  $url = test_input($url);

  $Shortcut = "[InternetShortcut]
  URL=".$url."
  IDList=
  [{000214A0-0000-0000-C000-000000000046}]
  Prop3=19,2
  ";
  header("Content-type: application/octet-stream");
  header("Content-Disposition: attachment; filename=".$title.".url;");
  echo $Shortcut;

备注:页面编码必须为gbk或gb2312

今天接到一个需求,需要获取一个根据用户的总成绩及地区进行一个排名,参与人数约为20万,原计划直接查库操作,后来考虑到需要将所有数据查出再做排名处理,有可能会查询效率问题,最后决定用redis的有序集合来解决这一问题,大概逻辑如下:
一、返回所有参与用户地市的排名,按照分数从高到低排序

$redis = Redis::connection();
$redisKey = 'user-ranking-list-'.$city.':';//定义当前地市排名
$total = $redis->zcard($redisKey)
$result = $redis->zrangebyscore($redisKey, 0, $total);

二、验证用户是否存在,不存在则直接插入并返回排名,存在即返回当前排名

if($redis->zrevrank($redisKey, $mobile) == null){
    $redis->zadd($redisKey, $score, $mobile);
}
$sort = $redis->zrevrank($redisKey,$mobile)+1;//排名+1

更多有序集合介绍可以参考:https://www.runoob.com/redis/redis-sorted-sets.html