最近面试遇到一个算法题,简单写一点。

news/2024/4/28 16:40:12/文章来源:https://blog.csdn.net/a369405354/article/details/80496786

第⼀题(必答)

请针对有重复数字的数组设计⼀个快排算法,⽐如:[34, 34, 89, 1, 1, 20, 12],排序后结果为 [89,34,34,20,12,1,1]

第⼆题(必答) 请利⽤Redis 实现⼀个通⽤分布式锁,并说明您设计⽅案的优点以及还有哪些需要改进的地⽅;

第三题(⾮必答) 编程题:有⼀堆糖果,其数量为n,现将糖果分成不同数量的堆数(每堆数量均为整数,最少为 1),请算出糖果堆对应数量的最⼤乘积是多少,并给出对应的分配⽅案; 举例:糖果数量为8,可以得到的乘积最⼤为18,对应的分配⽅案为【2,3,3】;

第四题(⾮必答) 假设需要设计⼀个承担百万级pv(⽤户总数1千万,每⽇⽤户⾏为⽇志数据预计1亿条)的电商⽹ 站登录系统,你的服务器技术架构是怎么样的?⽤户信息的存储⽅案⼜会如何设计?如果由你来进⾏ 系统整体技术负责,你会如何去把控整体开发进度和协调各⽅⾯资源?

对于 题目1,2,4这里就不详细说了。重点写一下3题的思路(实际上是找规律的题)

第一道题,我写了冒泡,和快速排序来实现

第二道题,事实上就是考验锁的问题,这里给大家点建议,mysql/redis锁都复习一下。

第三道题,

上图,各位看官先,找一下规律(先不要看后面的结论)

 

 

 结论:

由第三道题的分析图可得如下结论(分析图在面试题第三道题画图文件中)
 * 1,数字小于5,直接返回即可(目前不知道这条是否有瑕疵,若有,各位自行修正)
 * 2,数字3是重点
 * 3,保证不能有值为 1 的堆(重要)

下面是我的解题思路:
 * 1,声明一个空数组
 * 2,求出 floor(N/3)有多少个元素, 然后放入数组值为3的floor(N/3)个数
 * 3,判断 N/3 的余数,若为1 则将数组中最小值加上1(此处也可以忽略 可以随便找个元素值加  1), 若为 2则放入数组
 * 4,计算数组中元素的乘积 即可得出想要的值

上代码:

<?php
/*** 由第三道题的分析图可得如下结论(分析图在面试题第三道题画图文件中)* 1,数字小于5,直接返回即可。* 2,数字3是重点* 3,保证不能有值为 1 的堆(重要)** 解题思路,* 1,声明一个空数组* 2,求出 floor(N/3)有多少个元素, 然后放入数组值为3的floor(N/3)个数* 3,判断 N/3 的余数,若为1 则将数组中最小值加上1(此处也可以忽略 可以随便找个元素值加1), 若为 2则放入数组* 4,计算数组中元素的乘积 即可得出想要的值
*/class ThreeQuestion {public $candyArr = [];public $message = ['numErr' => "糖果数量不能小于或等于0",'biggestNum' => "最大乘积为"];public function calculationCandyTheBiggestProduct($candyNum){if($candyNum <= 0 ){return $this->message['numErr'];}if($candyNum < 5){return $this->message['biggestNum'].$candyNum;}else{$threeTimes = floor($candyNum / 3);$remainder = $candyNum % 3;//将值为3 放入$this->candyArr 数组,放入个数为$threeTimesfor($i = 1; $i <= $threeTimes; $i++){array_push($this->candyArr,3);}if($remainder == 1){$m = min($this->candyArr); //获取最小值$k = array_search($m,$this->candyArr); //通过最小的值来获取对应的键名$this->candyArr[$k]+= 1; //最小值加上$remainder}elseif($remainder == 2){array_push($this->candyArr,$remainder);}$product = 0 ;if(!empty($this->candyArr)){$product = array_product($this->candyArr);//计算$this->candyArr数组中元素的乘积}return $this->message['biggestNum'].$product;}}}$obj = new ThreeQuestion();
echo $obj->calculationCandyTheBiggestProduct('25'); //最大乘积为36
/** 10 = 36* 25 = 8748* 36 = 531441*/

第四道题:自己发挥吧,服务器搭建如下

域名----》CND----》防火墙----》负载均衡----》服务器ECS(负载) + 数据库mysql (主从) + 缓存redis(集群) + 缓存ES

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_239640.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

B+树 [数据结构与算法][Java]

B树 B树是B树的一种变形 我们通过一颗四阶B树来理解认识一下B树:(如下:) 我们其实从图上就可以看出B树和B树是有很多不同之处的 比如我们的B树中将叶子结点层的所有结点使用一个链表串联了起来B树中对于非叶子结点都是只是存储的索引(指针), 并没有存储关键字, 所以我们最终查…

Linux系统基础——BIOS和Bootloader

BIOS和Bootloader 特此说明: 刘超的趣谈linux操作系统是比较重要的参考资料&#xff0c;本文大部分内容和所有图片来源于这个专栏。 1 了解背景 1.1 目的 操作系统不是在板子上电就直接运行的&#xff0c;上电到系统启动的中间过程要搞明白&#xff0c;比如了解linux系统启动…

火山引擎 DataTester 上线“流程画布”功能,支持组合型 A/B 实验分析

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 在精细化运营的时代&#xff0c;运营活动同样需要有精细化的策略&#xff0c;例如在年末大促活动中&#xff0c;设计 APP 弹窗提醒、满减、会员领券时&#xff0c;我…

TikTok 加速团结独立站,跨境电商的又一次红利期?

TikTok近年来在国际上非常流行。2021年8月&#xff0c;TikTok的全球下载量首次超过Facebook&#xff0c;成为全球最大的下载量。TikTok的诞生打破了海外社交媒体的垄断&#xff0c;TikTok营销成为许多跨境卖家的重点之一。 封号事件发生后&#xff0c;许多跨境卖家开始向独立站…

Python函数总结

在Python中&#xff0c;函数是一个带有名字的代码块&#xff0c;可以被反复调用。函数可以帮助你组织和重用代码&#xff0c;使你的程序更整洁&#xff0c;更易于维护。本文将会深入探索Python的秘密 目录 定义函数 自定义函数 内置函数 函数式方程 高阶函数 函数标注 …

读研2年,我选择从中科院退学转行做码农

从入学天坑材料专业到退学 先自我介绍一下&#xff1a;我天坑材料专业&#xff0c;本科某211&#xff0c;保研到中科院&#xff0c;但是我真是菜的抠脚&#xff0c;还懒&#xff0c;也不喜欢科研&#xff0c;论文达不到毕业要求&#xff0c;纠结之下研三退学转码农了。 读了2…

JVM【垃圾回收相关概念和垃圾回收器】

垃圾回收相关概念 System.gc()的理解 在默认情况下&#xff0c;通过**system.gc&#xff08;&#xff09;**者Runtime.getRuntime().gc() 的调用&#xff0c;会显式触发FullGC&#xff0c;同时对老年代和新生代进行回收&#xff0c;尝试释放被丢弃对象占用的内存。 然而syste…

做跨境电商,如何从同类产品中脱颖而出?

随便打开一个跨境电商平台&#xff0c;你会发现自己售卖的产品有那么多类似的选择&#xff0c;如何确保你的产品能被客户选择&#xff1f;怎样在一系列产品中脱颖而出&#xff1f; 不少卖家提到了&#xff0c;搞差异化竞争&#xff0c;这是跨境电商卖家常挂在嘴边的一个词&…

k8s使用glusterfs(静态供给、动态供给)、glusterfs的安装与使用

目录前言主机准备配置主机名、关闭防火墙、关闭selinux挂载磁盘安装glusterfs服务端glusterfs的端口分布式集群的结构组成glusterfs集群创建存储卷启动卷k8s使用glusterfs作为后端存储&#xff08;静态供给glusterfs存储&#xff09;恢复初始化环境安装Heketi 服务&#xff08;…

fpga实操训练(signal tap调试)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 编写软件的同学都知道&#xff0c;如果需要调试软件的话&#xff0c;除了要学会打印信息日志之外&#xff0c;另外一个很重要的方面&#xff0c;就…

maven的插件(命令)install介绍

maven的插件&#xff08;命令&#xff09;install介绍背景关于构建时使用的maven命令installmaven其他插件/命令的使用背景 今天在引入SpringCloudAlibaba时&#xff0c;pom.xml中的dependency报错了 到本地仓库去验证 验证无误&#xff0c;找原因 现象&#xff1a; 在maven…

数据挖掘期末-图注意力模型

PyGAT图注意力模型 ​  PyGAT实现的分类器&#xff1a; https://www.aliyundrive.com/s/vfK8ndntpyc 还在发烧&#xff0c;不是特别清醒&#xff0c;就简单写了写。用GAT进行关系预测&#xff0c;GAT可能是只做中间层&#xff0c;不过本来在GAT这一层就为了能懂就简化了很多…

Linux-系统随你玩之--用户及用户组管理

一、用户基本介绍 Linux 系统是一个多用户多任务的操作系统&#xff0c;任何一个要使用系统资源的用户&#xff0c;都必须首先向系统 管理员申请一个账号&#xff0c;然后才可以以这个用户登陆系统。 二、Linux中用户和组 2.1、用户和组介绍 用户&#xff1a; 每一个用户都…

如何不改一行代码,让Hippy启动速度提升50%?

导读&#xff5c;Hippy使用JS引擎进行异步渲染&#xff0c;在用户从点击到打开首屏可交互过程中会有一定的耗时&#xff0c;影响用户体验。如何优化这段耗时&#xff1f;腾讯客户端开发工程师李鹏&#xff0c;将介绍QQ浏览器通过切换JS引擎来优化耗时的探索过程和效果收益。在分…

微导纳米科创板上市:市值125亿 无锡首富王燕清再敲钟

雷递网 雷建平 12月23日江苏微导纳米科技股份有限公司&#xff08;简称&#xff1a;“微导纳米”&#xff0c;股票代码为&#xff1a;“688147”&#xff09;今日在科创板上市。微导纳米此次发行4544.55万股&#xff0c;发行价为24.21元&#xff0c;募资总额为11亿元。微导纳米…

对Python的学习【如何查看路径和安装包】

1&#xff1a;怎么查看本地电脑的Python版本号及安装路径&#xff1a; 对于Windows平台&#xff0c;打开cmd 使用命令py -0p 【其中0是零】 显示已安装的 python 版本且带路径的列表&#xff0c;参见下图&#xff1a; 其中带星号*的为默认版本。 2:怎么查看python pip…

认识 Fuchsia OS

认识 Fuchsia OS 1 说明背景 1.1 基本信息 开发者: Google编程语言: C、C、Rust、Go、Python、Dart内核: Zircon运作状态: 当前源码模式: 开放源代码初始版本: 2016年8月15日支持的语言: 英语支持平台: ARM64、X86-64内核类别: 微内核 基于能力 实时操作系统许可证: BSD 3 c…

腾讯焦虑了,一向温文尔雅的马化腾也发脾气了

大家好&#xff0c;我是校长。昨天小马哥内部讲话在互联网上疯传&#xff0c;这应该是&#xff0c;腾讯这家公司创办以来&#xff0c;马化腾最焦虑也最外露的一次讲话了&#xff0c;重点大概涉及 3 大方面&#xff0c;8 大项内容&#xff1a;1、所有业务线 ROI 化&#xff0c;再…

该怎么选择副业,三条建议形成自己的副业思维

受经济环境的影响&#xff0c;许多年轻人觉得原来稳定的工作不那么稳定&#xff0c;看着周围的朋友因为企业破产和失业&#xff0c;生活变得没有信心&#xff0c;也想找到自己的副业&#xff0c;在紧急情况下赚更多的钱。所以&#xff0c;年轻人在选择副业时也面临着很多困惑&a…

LeetCode HOT 100 —— 581. 最短无序连续子数组

题目 给你一个整数数组 nums &#xff0c;你需要找出一个 连续子数组 &#xff0c;如果对这个子数组进行升序排序&#xff0c;那么整个数组都会变为升序排序。 请你找出符合题意的 最短 子数组&#xff0c;并输出它的长度。 思路 方法一&#xff1a;双指针 排序 最终目的是让…