Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
一条项目中常用的linux命令引发的经典算法题_创想鸟

一条项目中常用的linux命令引发的经典算法题

  小时候家里定了《读者》的月刊,里面记录一个故事:说有有个偏僻的乡村一日突然来了一个美女,她携着万贯家财子女在当地安家落户,成了当地的乡绅。她让她的子女世世代代的保守这个秘密,直到这个秘密不会再对家族带来灾难。她就是陈圆圆。当年吴三桂领清兵入关,冲冠一怒为红颜,改写了中国的历史,自己却能全身而退的那个人。

  周五例行公事的查看一下离线数据推送项目的数据和log。将log用awk分段之后,我想知道实时数据前10个被重复发送的数据ID都被重复发送了几次,从而找到进一步优化的入手点,天知道我对这个项目已经进行了多少次优化了。于是linux命令就是

 cat transmission.log |grep 'IncrementAlbumService.java:146'|awk '{print $6}'|awk -F ',' '{print $1}'| sort |uniq -c| sort -nr |head

  得到的结果令我很自责

一条项目中常用的linux命令引发的经典算法题(数据安全,对于我们项目的ID规则部分不显示)

虽然这和他们的操作有关,我本来就是该检测到数据变更就发送出去,但是对于这么大的重发率。不管从更新服务的接口上,还是离线服务上,能够优化的点还是有的。姑娘我的思路一向与那些出场要用吹风机,人工喷壶制造画面感的男神大佬思路不同。除了这个结果,我还在想另外一个经典算法问题:说是有一个文本文件,大约有一万行,每行一个词,要求统计出其中最频繁出现的前十个词。

  这个算法问题使用上面的linux命令就是sort|uniq -c |sort -nr | head。时间复杂度为下面几项中最大的一个:

  1>先是做一次排序,

    直接插入排序:不断将元素插入到有序表中去,最坏时间复杂度是O(n2)

    shell排序:缩小增量的插入排序,不稳定,有赖于增量因子序列的选取,最坏时间复杂度是O(n2)

    简单选择排序:在要排序的数中选择最小或最大与第一个未排序位置交换,最坏时间复杂度是O(n2)

    二元选择排序:每趟简单选择排序确定两个元素,可减少一半的循环。

    堆排序:树形选择排序,大根堆,小根堆。最坏时间复杂度是O(N*logN)

    冒泡排序:每次相邻的两个数比较,交换,最坏时间复杂度是O(n2)

    快速排序:选择基准元素,每次将待排序元素分割,最坏时间复杂度是O(n2)

    归并排序:将两个有序表合成一个新的有序表,最坏时间复杂度是O(N*logN)

    桶排序:以空间换时间的算法,复杂度接近O(n)  

    基数排序:按照个十百千的位数进行分配收集,时间复杂度是O(dn)

   2>uniq 时间复杂度为O(n)

   3>sort时间服务度同1>

   4>已经排好序了时间复杂度就是O(1)

  采用的算法也和文件的大小有关系,如果文件太大,数据太多,就需要将文件拆分,分别排序后做多路归并。所以这里说了文字数量。

  不用linux命令,经典的解决方法是先用字典树统计词频,再用大根堆。先介绍一下字典树,也叫tire树。因为搜索引擎常用这个来做文本词频统计,分词算法也用这个作为基本数据结构,所以知道一些。它的优点是:最大限度的减少无谓的字符串比较,查询效率高于哈希表。核心思想是以空间换时间,利用公共前缀来降低查询时间的开销。所以一说统计啥啥,首先想到的就是字典树。如果在统计词频时维护一个前十位的最大词频数组之类的,在循环处理中比较,时间复杂度要翻10倍。所以还是先统计,再取top10时间效率上更为合适。

  其实我不咋懂算法,只是会用。我之前一个同事看了我写的一篇文章微信问我:“feed流是很有技术含量的工作吗?” 他这个问题让我想起《仙剑》里李逍遥在餐馆里非要装高富帅,说要点最名贵的菜:“青菜炒牛肉”,众人哄笑,灵儿问李逍遥:“逍遥哥哥,青菜炒牛肉是很名贵的菜吗?”。虽然同事是在真心的问我意见,因为他在京东,正在考虑要不要去陌陌,我却感觉自己像那个没见过世面的李逍遥。feed流这个业务逻辑怎么都能做,有没有技术含量取决于怎么去做。我写过一篇专利,介绍feed流的一种拼装方法,流程没走完,这之前我就先不公开计算方法了。但是努力去想的话,优化点还是很多的。前年我还比较喜欢玩朋友圈的时候,经常会发现自己删除的朋友圈又出现了,或者自己的或者别人的朋友圈突然最近的数据全没了,只有很老的数据,比如一年前两年前的数据,一天之后自动恢复。都是策略的问题。微信朋友圈的问题挺多的。鉴于我们有个人见人爱花见花开的产品mm是微信架构师家属,我就不过多吐槽了。

  虽说今天是周日,可以脑洞大开一下,也得有个主题。前面的例子有个经典的top K问题。因为搜索引擎会经常需要统计最热门的查询串,top K问题是基础。TopK问题用小根堆。维护一个K大小的小根堆,遍历要比较的元素,分别与跟元素做对比,如果小于根元素,说明肯定进不了前K,淘汰掉。如果大于根元素,就淘汰根元素。再调整树为最小堆,继续比较。

  最小堆的是一棵完全二叉树,每个非叶子节点的值都不大于其子节点的值。如果破坏了这个规律,就要从第一个非叶子节点开始向根节点这种自下往上的顺序进行调整。

  下周决定面一下hulu,还没面,应该是面不过。两年前原同事给推荐过亚马逊,结果没让我去面试,安慰自己一下就是估计那时候他们其实是不招人的。从来没去过这种外企面试,不知道是啥套路。如果现在开始准备的话,估计过了十一差不多能过。我想我自己去面试肯定很不占优势。不是完全会不好,会很不稳定。看过我文章朋友大概会觉得我文章写的很乱,很杂。生活中我也确实是这样。知识面很广,很异想天开,无所顾忌,这一方面为我的创造力奠定基础,另一方面不利于我临场发挥。大脑像是一个电脑。我的并行程序很多,内存不够大,数据又多。内存分页导致不断和磁盘swap。面试这种有时效的动作很容易导致超时返回。我有那么多技术发明专利,现在让我想,我一个都想不起来自己发明了啥。刚刚坐公交车,因为人很少,司机师傅问我哪里下车,意思是没有人下车的地方就不停了。我想了很久才想起来。我的大脑更多运行在异步非阻塞模式,其实面试这种事情同步阻塞反而会好一些。然而任何事情都有解决的办法,找不到方法就是能力不够了,没什么不服的。然而面试是要考察综合能力的,比如团队合作,谈吐能力等等。相信我们部门的人都不会对“晓静很聪明“这句话有异议。也相信部门或者工作上有合作的同事都不会觉得我是个很难沟通或者很难相处的人。但是在面试中我却很可能会忘了要怎么说话。但是如果因为这个问题我没通过一个面试的话,我没有怨言。因为面试官就是将来的同事和领导,如果不够合拍的话,将来去了自己的能力也不一定能发挥出来。如果面试不好还觉得自己能力是够的,那很有可能是自己格局不够高,没见过真正优秀的人是什么样子。然而我就是那种铁定要碰壁的事还要做的人。如果一件事我决定放弃了,原因肯定是不值得做。

  喜欢工作,我的目标是60岁时还能有一份有创造性的工作。所以怕国内互联网公司会让我40岁就退休。还有一件最重要的事:我想做自己的搜索引擎中间件,国内的互联网公司以用为主,怕是我很难有精力来做这件事情。当然,去不了hulu,搜索引擎也还是要做的。只是一个怎样分配时间的问题。

  我其实是喜欢去碰壁的,大概是自己还不想那么快长大吧。如果天天表现的很成熟优雅的样子,就需要隐藏一些自己不擅长的,或者有可能出错的事儿。结果每天日子也会很开心,但是可能一辈子也就这样了。历史上有很多著名的人物,原本都是纨绔子弟,后家道中落才逆袭成为伟人的。书里,人生的转折有遇到贵人,和遇到挫折两种。年轻时心态开放,遇到贵人打开思路就可以顿悟了。而随着经历的增多,人会更加有选择的接收周围的信息,这时候大概需要遇到很大的挫折才能重新思考人生。如果能看到更好的未来,我愿独孤一掷,破釜沉舟。大起大落总好过一年如一日,要活就活的精彩~~

以上就是一条项目中常用的linux命令引发的经典算法题的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/189105.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
Java后端框架面试:死记硬背重要还是实际编码能力更关键?
上一篇 2026年9月6日 11:43:40
el-tree组件中如何实现子节点勾选自动勾选父节点的功能?
下一篇 2026年9月6日 11:47:50

相关推荐

  • 如何预防单点故障?VIP高可用搭建解决步骤

    如何预防单点故障?VIP高可用搭建解决步骤如何预防单点故障?VIP高可用搭建解决步骤如何预防单点故障?VIP高可用搭建解决步骤如何预防单点故障?VIP高可用搭建解决步骤

    单点故障是系统稳定性最大威胁,因为其一旦发生将导致服务瞬间瘫痪。解决核心在于消除“唯一”组件,通过构建高可用集群实现冗余备份。具体步骤包括:1. 使用虚拟ip(vip)配合keepalived工具实现自动漂移;2. 配置至少两台服务器组成集群并通过心跳机制监测状态;3. 设置track_script…

    2026年9月23日 用户投稿
    400
  • 为什么硬盘数据恢复不完整?如何提高数据完整性?

    硬盘数据恢复不完整主要因数据覆盖、物理损伤、文件系统损坏、加密问题及恢复软件局限所致;一旦发生数据丢失且伴随异响、无法识别等情况,应立即停止操作并寻求专业服务,因其具备无尘环境、专用设备与技术经验,可最大限度避免二次损伤并提升恢复成功率。 硬盘数据恢复不完整,这事儿说起来挺让人沮丧的,往往是数据在丢…

    2026年9月23日
    600
  • 如何查看Linux磁盘SMART信息 smartctl健康检测

    如何查看Linux磁盘SMART信息 smartctl健康检测如何查看Linux磁盘SMART信息 smartctl健康检测如何查看Linux磁盘SMART信息 smartctl健康检测如何查看Linux磁盘SMART信息 smartctl健康检测

    使用smartctl工具可有效查看linux系统下磁盘的smart信息。首先安装smartmontools包,在debian/ubuntu上用apt命令,在centos/rhel上用yum命令安装;接着检查磁盘smart状态,若未启用则手动开启;然后通过sudo smartctl -h /dev/s…

    2026年9月23日 用户投稿
    1000
  • VSCode极简配置Docker:容器管理、中文终端、镜像调试

    安装docker、remote – containers及语言包等必要插件;2. 编写dockerfile定义开发环境;3. 配置.devcontainer/devcontainer.json指定构建参数与扩展;4. 使用“reopen in container”命令自动构建并连接容器;…

    2026年9月23日
    000
  • 从单片机到ARM Linux驱动——Linux驱动入门篇

    大家好,又见面了,我是你们的朋友全栈君。 嵌入式Linux操作系统具有:开放源码、所需容量小(最小的安装大约需要2MB)、不需著作权费用、成熟与稳定(经历这些年的发展与使用)、良好的支持等特点。因此被广泛应用于移动电话、个人数码等产品中。嵌入式Linux开发主要包括:底层驱动、操作系统内核、应用开发…

    2026年9月23日
    100
  • VSCode如何配置RISC-V开发环境 VSCode嵌入式开发的特殊设置

    解决方案的核心是选择合适的risc++-v gnu toolchain并将其bin目录添加到系统path,确保vscode能调用交叉编译器;2. 安装c/c++扩展和cortex-debug等调试扩展,通过c_cpp_properties.json配置头文件路径、宏定义和编译器路径,实现准确的智能感…

    2026年9月23日
    700
  • VSCode 如何设置文件自动备份 VSCode 文件自动备份功能的设置技巧​

    vscode文件自动备份通过配置files.autosave和files.backupinterval实现;2. files.autosave设为afterdelay、onfocuschange或onwindowchange可启用自动保存,配合files.autosavedelay设置延迟时间(毫秒…

    2026年9月23日
    400
  • SpringBoot 配置 ELK 环境

    SpringBoot 配置 ELK 环境SpringBoot 配置 ELK 环境SpringBoot 配置 ELK 环境SpringBoot 配置 ELK 环境

    为什么要使用elk?简单来说,elk栈(elasticsearch、logstash、kibana)是一个强大的日志分析和管理工具组合,可以帮助我们高效地收集、存储、搜索和可视化日志数据。下面我将简单地介绍一下elk的架构,并详细说明如何在mac和linux系统上配置elk环境。windows系统的…

    2026年9月23日 用户投稿
    400
  • 如何从Linux命令行直接执行MySQL/MariaDB查询

    如何从Linux命令行直接执行MySQL/MariaDB查询如何从Linux命令行直接执行MySQL/MariaDB查询如何从Linux命令行直接执行MySQL/MariaDB查询如何从Linux命令行直接执行MySQL/MariaDB查询

    如果您负责管理数据库服务器,可能需要定期执行查询并仔细检查其结果。虽然您可以在mysql/mariadb shell中执行这些操作,但本文介绍的技巧将使您能够直接在linux命令行中运行mysql/mariadb查询,并将输出保存到文件中,以便日后检查。这在查询返回大量记录时尤为有用。 让我们从一些…

    2026年9月23日 用户投稿
    200
  • 如何在Linux中列出所有用户?

    最直接的方法是读取/etc/passwd文件,使用cat /etc/passwd查看所有用户信息,cut -d: -f1 /etc/passwd提取用户名,getent passwd推荐用于LDAP/NIS环境,awk -F: ‘$3 >= 1000 && $3 &…

    2026年9月23日
    1400
  • 如何linux删除文件夹,linux删除文件夹,教您电脑的linux怎么样删除文件夹

    如何linux删除文件夹,linux删除文件夹,教您电脑的linux怎么样删除文件夹如何linux删除文件夹,linux删除文件夹,教您电脑的linux怎么样删除文件夹如何linux删除文件夹,linux删除文件夹,教您电脑的linux怎么样删除文件夹如何linux删除文件夹,linux删除文件夹,教您电脑的linux怎么样删除文件夹

    大家好,很高兴再次与大家见面,我是你们的朋友全栈君。 许多热爱学习的用户在操作linux软件程序时,经常会遇到需要删除文件夹的情况。然而,当尝试删除一个非空文件夹时,系统会提示无法删除,这对于初学者来说确实是一个挑战。今天,小编将与大家分享在linux中删除文件夹的具体操作方法。 首先,有人可能会问…

    2026年9月23日 用户投稿
    800
  • 浅谈文件系统中的核心数据结构

    浅谈文件系统中的核心数据结构浅谈文件系统中的核心数据结构浅谈文件系统中的核心数据结构浅谈文件系统中的核心数据结构

    在宏观层面上,文件系统在内核中的运作流程可以概括为从虚拟文件系统(vfs)到实际磁盘文件系统的一系列步骤:vfs -> 磁盘缓存 -> 实际磁盘文件系统 -> 通用块设备层 -> io调度层 -> 块设备驱动层 -> 磁盘。具体的操作流程如图所示: 理解文件系统中…

    2026年9月23日 用户投稿
    1000
  • Hackone 环境搭建

    Hackone 环境搭建Hackone 环境搭建Hackone 环境搭建Hackone 环境搭建

    在hackone环境搭建过程中,网络环境的设置至关重要。我们将通过vmware和一系列工具和配置来实现这一目标。以下是详细的步骤和说明: 首先,我们从Vmware开始,创建一个新的虚拟机,并选择适当的操作系统镜像。在这个案例中,我们选择了openwrt-x86-64-generic-squashfs…

    2026年9月23日 用户投稿
    000
  • Linux命令整理(四)

    一、查找与软硬连接 1、find命令 1)find [查找范围] -name X 查找文件名X的文件 2)find [查找范围] -uid X 查找UID为X的文件 3)find [查找范围] -gid X 查找GID为X的文件 4)find [查找范围] -user X 查找由用户X创建的文件 5…

    2026年9月23日
    100
  • 如何验证MySQL是否安装成功?

    如何验证MySQL是否安装成功?如何验证MySQL是否安装成功?如何验证MySQL是否安装成功?如何验证MySQL是否安装成功?

    验证mysql是否安装成功需检查三点:服务状态、客户端连接和版本信息。首先在linux用systemctl status mysql或service mysql status,windows则查看服务状态确认运行;其次执行mysql -u root -p尝试登录并输入密码进入mysql>提示符…

    2026年9月23日 用户投稿
    000
  • VSCode调试FPGA的AXI接口(结合Vivado,总线分析技巧)

    调试FPGA的AXI接口,尤其结合VSCode和Vivado,并不是说VSCode能直接像调试软件那样去“单步”硬件。这其实是一种协同作战的模式:VSCode主要负责你的软件层(无论是裸机程序、RTOS应用还是Linux驱动),它驱动着AXI总线上的行为;而Vivado则通过其内置的硬件调试工具(如…

    2026年9月23日
    300
  • Linux命令行介绍

    Linux命令行介绍Linux命令行介绍Linux命令行介绍Linux命令行介绍

    一、命令行的介绍 命令行界面(英语:command-line interface,缩写:cli)是在图形用户界面得到普及之前使用最为广泛的用户界面,它通常不支持鼠标,用户通过键盘输入指令,计算机接收到指令后,予以执行。也有人称之为字符用户界面cui。通常认为,命令行界面(cli)没有图形用户界面gu…

    2026年9月23日 用户投稿
    400
  • 双系统系列:WSL2-适用于 Linux 的 Windows 子系统(安装)

    双系统系列:WSL2-适用于 Linux 的 Windows 子系统(安装)双系统系列:WSL2-适用于 Linux 的 Windows 子系统(安装)双系统系列:WSL2-适用于 Linux 的 Windows 子系统(安装)双系统系列:WSL2-适用于 Linux 的 Windows 子系统(安装)

    在之前的文章中,我们已经介绍了vmware和pve虚拟机,它们各有优缺点。vmware易于上手,可以在个人电脑上直接使用,但会消耗大量的系统资源;而pve需要单独购买一台小主机,但其性能和可操作性远胜于vmware。 今天我要向大家介绍的是微软提供的一个小工具——WSL(Windows Subsys…

    2026年9月23日 用户投稿
    200
  • Navicat连接MySQL的完整步骤

    Navicat连接MySQL的完整步骤Navicat连接MySQL的完整步骤Navicat连接MySQL的完整步骤Navicat连接MySQL的完整步骤

    navicat连接mysql的关键在于正确配置连接信息并排除常见问题。步骤包括:①下载安装navicat;②启动后创建mysql连接;③填写主机名、端口、用户名和密码等信息;④测试连接并保存;⑤双击连接进入数据库。常见问题及解决:①mysql服务未启动需手动启动;②端口被占用可检查并释放;③防火墙阻…

    2026年9月23日 用户投稿
    100
  • 为什么某些外设需要安装特定驱动才能全功能使用?

    外设需专用驱动因通用驱动仅支持基础功能,无法解析厂商私有协议,导致高级特性如自定义按键、RGB灯效、DPI调节等无法使用,且性能优化不足,影响体验。 某些外设需要安装特定驱动才能全功能使用,核心原因在于操作系统自带的通用驱动只能提供最基础的“即插即用”功能,而外设制造商为了充分发挥其硬件的独特性能、…

    2026年9月23日
    100

发表回复

登录后才能评论
关注微信