0%

大概每日一题

首先, 给各位道个歉. 昨天由于沉迷学习忘了更新, 绝对不是忙于抢新题库的一血

那么,

作天的题

题目描述

本关任务:计算正整数num的各位上的数字之积。
例如:
输入:2583  经过(2x5x8x3) 输出:240
输入:102   经过(1x0x2)   输出:0
输入:136   经过(1x3x6)   输出:18

输入

一个数num

输出

运算结果(一个整数)

做题思路1

循环, 每次取一位, 和ans变量相乘.

伪代码:

ans = 1
输入num
k = 1
while(num / k != 0):
    ans *= (num/k)%10 // num去掉后面的位数后取最后一位
    k *= 10
输出ans

这种思路的核心在于, 设置中间变量k. 每次把num除k来去掉尾部多余的位数之后取最后一位累乘.

做题思路2

循环, 每次取num的最后一位, 和ans变量相乘后去掉最后一位

伪代码:

ans = 1
读入num
while num != 0:
    ans *= (num%10) // ans乘以num的最后一位
    num /= 10       // 核心: 去掉num的最后一位

这个思路的核心在于, 每次取最后一位num用于计算后去掉最后一位.
相比第一个思路的好处是 省略了一个中间变量.

1024特别节目

今天是1024程序员节

不知道能为各位做点什么,
给各位画幅画吧

 
  O  
~~~~~
~~~~~

一副海上明月图送给大家

每日一题

公众号新开了个栏目, 叫大概每日一题.

那么问题来了, 为啥叫大概每日一题呢?

鸽子表情包

今天的题

题目描述:

找出具有m行n列二维数组Array的“鞍点”,即该位置上的元素在该行上最大,在该列上最小,其中1<=m,n<=10。

输入:

第一行有两个数m和n,下面有m行,每行有n个数。

输出:

Array[i][j]=x

做题思路

这道题的思路还是比较清晰的: 枚举每一行, 寻找这一行里最大的数在第几列, 寻找那一列最小的数, 看看这一行最大的数是不是这一列最小的数.

伪代码:

输入m,n
循环i从0到m-1
    循环j从0到n-1
        读入data[i][j]

循环i从0到m-1
    max=data[i][0]
    pos=0
    循环j从0到n-1
        如果data[i][j] 大于 max
            更新max与pos
    
    flag = 1
    循环j从0到n-1
        如果data[j][pos]小于max
            flag = 0
    如果flag=1 说明data[i][pos]是鞍点
        输出,退出程序
输出none

注意点

在找数组的最小值的时候有两种实现方式:

int min = 0x70000000;
int pos = -1;
for(int i = 0; i < n;++ i){
    if(min < data[i]){
        min = data[i];
        pos = i;
    }
}

int min = data[0];
int pos = 0;
for(int i = 1; i < n;++ i){
    if(min < data[i]){
        min = data[i];
        pos = i;
    }
}

第一种方式将min设为极大值(或将max设为极小值), 第二种方式奖min设为数组第一项的值.

这两种方式都是正确的, 要注意的就是

  1. 使用第一种方式时设置的极大值一定要很大.
    1. int所能存储的最大值是0x7fffffff, 所以对于以上情况把min设置为0x7ffffff是安全的.
    2. 对于要比较min+data[i]和data[i]的大小的时候, min的初值应设置为int所能存储的最大值的一半, 以保证min+data[i]仍在int范围内. 对于这种情况, 0x3f3f3f3f是一个安全的值.
  2. 使用第二种方式一定要把pos变量初始化为0

在搭建我的个人开发环境的过程中, 对于PHP开发我选择了Docker这样的方案. 这种方案相比valet最大的好处就在于自由: 可以自由定制自己所需的nginx配置, php配置, 在安装php插件时也会方便一些.
但是, 在搭建完毕运行之后, 碰到了许多坑.
我最先搭建的是WHMCS测试站. 搭建完毕之后发现无论打开什么页面, 最短的加载时间也在5s左右. 对于搭建在本地的whmcs来讲, 这自然是十分不正常的, 百度了一下如何解决之后, 我决定开启php-fpm的slowlog来看看是哪里出了问题.
在docker中开启slowlog之后, 超时时间设置为了1s, 但是当页面加载时间为5s时, log文件内仍无任何内容.
Google了一番, 发现php-fpm使用SYS_PTRACE这一个系统调用来统计程序运行的时间, 而默认情况下docker容器内并没有此权限, 只要在docker-compose.yml内加入 privileged: true 即可解决问题.
这就是第一个坑: PHP-fpm在无任何错误提示的时候不能产出slowlog

折腾了半天终于能看到slowlog了, 内容却让我很疑惑:

[30-Jun-2019 15:33:20]  [pool www] pid 10
script_filename = /data/www/whmcs//admin/login.php
[0x00007f063aa211b0] Composer\Autoload\includeFile() /data/www/whmcs/vendor/composer/ClassLoader.php:322
[0x00007f063aa21120] loadClass() unknown:0
[0x00007f063aa210c0] spl_autoload_call() unknown:0
[0x00007ffdbaff9320] ???() /data/www/whmcs/loghandler.php:44

占据主要时间的前三个函数都是composer的函数, 貌似没有任何解决方案. 在Google一番之后, 发现这里的慢主要在于 OS X 下的 Docker 磁盘性能过低, 导致读取php文件速度过慢, 时间变长. 测试了各种解决方案之后, docker-sync 解决了这个问题, 将整个网页的加载时间由5s缩短为300ms.

更新: docker-sync有各种玄学bug, 还是虚拟机为妙.

不同批次的手机安装的出厂H2OS版本不同, 本流程不一定适用于所有手机.

准备工作

  1. 这里下载相关工具包
  2. 系统设置-关于手机 点击7次系统版本号 开启开发者模式
  3. 开发者模式中开启"高级重启"和"OEM解锁"
  4. 长按电源键, 选择重启到引导加载器
  5. 连接电脑, 在电脑上运行 fastboot oem unlock
  6. 在手机上确认

氧OS

绝大部分手机出厂预装的H2os中BootLoader的版本较低, 不支持安装TWRP. 需先安装O2OS.

  1. 这里下载O2OS, 并用adb导入到手机中.
  2. 在手机设置-系统更新-本地升级中, 选择此ZIP包.
  3. 若成功刷入, 即可开始刷入TWRP.
  4. 若刷入不成功, 则预装的H2os版本较高. 使用以下步骤安装O2OS:
    1. 将安装包通过adb导入手机中, 重启进入bootloader, 连接电脑
    2. 在电脑上从这里 下载TWRP的两个文件(img,zip)
    3. 电脑上运行 fastboot boot twrp-3.3.1-3-guacamole.img
    4. 手机会重启进入TWRP. 三清后刷入氧os安装包, 刷入后再进行一次三清
    5. 重启进入系统. 若无限循环进入revocery, 则再次连接电脑, 运行fastboot指令进入TWRP后选择 Advanced - Fix Revocery Bootloop

TWRP

  1. 在电脑上从这里 下载TWRP的两个文件(img,zip)
  2. 将zip文件通过adb导入手机
  3. 手机重启进入 Bootloader 连接电脑
  4. 电脑上运行 fastboot boot twrp-3.3.1-3-guacamole.img
  5. 手机会进入临时的TWRP. 在此临时的TWRP中选择刷入上面导入的 TWRP zip 包

Magisk

  1. 下载 Magisk Manager 以及 magisk zip包
  2. 重启进入 Revocery , 刷入ZIP包即可.

OTA

按照O2OS - TWRP - Magisk的顺序刷入即可.

  1. 下载完整包, 并准备好TWRP安装包, Magisk安装包. 重启进入TWRP.
  2. TWRP内先后刷入ROM与TWRP
  3. TWRP内选择重启到另一个slot
  4. TWRP内安装Magisk
  5. 重启进入系统

这是一篇站在消费者个人角度的陈述.

本人不善言辞, 尽请谅解.

买前

一加7Pro 星雾蓝
高考前就一直在想高考后要换个手机, 高考后仔细敲定, 基于以下原因选择了一加7Pro:

  1. 一加对刷机友好, Root方便.
  2. 屏幕90Hz,2K (买之前看官方宣传只是觉得很厉害,真正到手体验一天后才会发现用起来有多爽)
  3. 配置基本是顶级(855, 8+256, UFS3.0储存)
  4. 摄像头不错(48+16+8 MP Triple Camera), 将来可能配合云台拍Vlog

买中

看到6月10日10:00官网上开卖的消息, 结合前几次10点开卖, 12点还有货, 我就没有特别准时抢. 10:01打开一加官网的时候就显示已经售罄了.
(同时还观测到另一个问题: 使用最新安卓chrome打开一加官网, 官网上的登录滑动验证码总是无法完成, 不知道什么原因.)
约好和R同学同时抢的我微信上问了问R同学,于是就发生了以下的故事:
聊天
确认官网抢不到之后, 我在刷朋友圈的时候偶然发现同学在京东官网上买到了, 立即打开京东官网, 下单. 下单过程之中还发现, 8+256的机器是4499元. 所以如果在官网上买的话, 加一个289多元的碎屏险后是4788多元. 可是在京东上买相同的官方碎屏险只需要4699元, 便宜了几十块钱.

不知道为什么官网价格和京东价格不一样?

(同时,官网无货, 京东官方旗舰店有货这种骚操作我也不能理解)

到手

机器到手之后, 开箱, 解锁, 并没有感受到各路评测所描述的 “惊艳” 的屏幕. (甚至到手的第一感觉只是星雾蓝后盖挺好看).

我的机器到手之后的流程就是 刷氧os - 刷twrp - 刷 magisk. 在此过程中, 踩到了不少坑, 我会将相关内容整理到这里.

全部刷好之后, 三清, 重新初始化. 初始化过程中直接在网络环境较好的地方, Google账户第一时间登录, 就自动把配置下载下来了.

惊喜到我的是, 不仅通讯录之类的信息同步到了新手机上, 就连gboard的配置也一起同步了过来. 最惊奇的是, 就连我手机热点的配置的wifi名称和密码都一起同步了过来. 在国内, 谷歌框架的配置同步和迁移功能真是体验比小米等品牌强得多.

在安装国内软件的过程中, 这次的全新装机我采用了一下原则:

  1. 能在 Google Play 安装尽量在上面安装, 不能的在酷安上安装.
  2. 对于 所有 我没有观察到兼容性问题的应用开启存储重定向.
    这样子, 在这个新手机上我的收获就是极其整洁的SD卡根目录. 在根目录中, 除了系统创建的文件夹以及magisk插件创建的一个文件之外, 没有任何应用创建的文件. 截至撰写本文时, 没有观测到任何兼容性问题. (应用间分享文件可通过Bridge应用解决)

拍照体验

由于还没来得及测试夜景, 在此放出几张在故宫拍摄的照片:

故宫1
故宫2
故宫3

使用体验

在故宫玩了一天(体验一天一加7p)后, 再用回之前的一加3t, 突然特别不适应. 各种操作都显得不"顺滑", 顶部和底部的大黑边看上去也很不爽… 总之, 正如评测们所述, 一旦用惯了一加7p, 你就再也回不去了.

一些坑点:

  1. 默认使用的是虚拟按键, 若要使用全面屏手势需要手动开启
  2. 不同批次的机器预装的氢os版本不同, 刷机方法不同 (我和R同学的两台机器是同时购买的, 同时在同一京东仓库出货, 当R同学使用我刷机成功的方式时差点变砖. )
  3. 前置摄像头伸出需要至少半秒左右
  4. 官网购买流程体验极差.

小弟不才, 在此赋诗一首:
官网下单需警惕,价格坑人不客气.
奈何强东美价廉,京东小哥做兄弟.