首頁 後端開發 php教程 面试有关问题:给你一个文本文件,里面存储了一亿个QQ号,请用程序将其由小到大排序,汗呀!

面试有关问题:给你一个文本文件,里面存储了一亿个QQ号,请用程序将其由小到大排序,汗呀!

Jun 13, 2016 pm 01:47 PM
bit hash memcache quot

面试问题:给你一个文本文件,里面存储了一亿个QQ号,请用程序将其由小到大排序,汗呀!..
面试问题:给你一个文本文件,里面存储了一亿个QQ号,请用程序将其由小到大排序,汗呀!..
求高手讲解思路!
还有其它问题:
比如Memcache的运行机制,它的工作原理它有什么优缺点!
现有一个库存100件的产品要进行秒杀,在秒杀过程中的秒杀人数远远超过库存,请问你将如何处理,应该注意什么问题!
请谈谈你对Mysql的优化的见解,或者说如果让你设计一个数据库,你将怎样设计并优化!
有高手吗,今天面试都自己认为都答得不太理想,求指教,还有下面的面试!
小弟的刚刚被裁员,本来就冬天,真的好冷啊!


------解决方案--------------------
排序的问题想不出来什么好办法,有没有更具体的限制条件,比如运行时间和内存?
如果都不限制直接sort函数就行,里面是用的快速排序法(quicksort),理论上的效率应该是最高的,况且人家是native code,怎么也比php代码里模拟一个排序算法快。

memcache的运行机制是使用职守进程开辟一块内存空间用来保存key/value数据,所有的请求和应用都共用这些数据。优点是存取速度快,适合用来缓存频繁读写的数据。缺点是占用内存,同时只能通过key检索,无法进行关系查询(SQL等)。

要保证原子操作,使用一定的锁机制防止多个请求同时操作一个数据造成效果与预期不符。

mysql数据库优化主要是索引和分表,为了性能可以为所有需要排序和检索的字段建立索引,并通过水平或垂直分表方式提高效率。
------解决方案--------------------
目的肯定不是让你投机,导入数据库,建索引导出,不过可以提一下


遍历一遍,将号码按大小,写入合适的文件。。。比如约定10万一个号码段

比如10,000,写在第0个文件,100,000,001,属于第1K个文件里面

排序每一个文件数据,拼接文件

排序的时候,如果文件较大,这里根据文件大小,大概能估计号码数量级的。。如果号码量少,可选择快排,否则,

创建一个10万的数组,再次遍历,arr[qqnum-i*100000]+1;

遍历数组,依数组值,增量写入号码即可

复杂度是O(n),O(nlogn)之间
------解决方案--------------------
这面试题有点眼熟啊,算法板块貌似讨论过,所以我回答用bitmap,空间换时间。
而且实际要做可能需要分段处理,比如5-7位的qq直接bit hash,7-10位的bit hash值 + 1000000

PHP code
<?php set_time_limit(0);
//5-7位qq
$s = '0';
$s{9999999}     = 1;
$s{22334}       = 1;
$s{375345}      = 1;
$i = 10000;
while(isset($s{$i}))
{
        if($s{$i} == 1) echo "QQ:".$i."<br/>";                                                                                                                
        $i++;
}
?>
<br><font color="#e78608">------解决方案--------------------</font><br>
登入後複製
探讨

这面试题有点眼熟啊,算法板块貌似讨论过,所以我回答用bitmap,空间换时间。
而且实际要做可能需要分段处理,比如5-7位的qq直接bit hash,7-10位的bit hash值 + 1000000
PHP code
set_time_limit(0);
//5-7位qq
$s = '0';
$s{9999999} = 1;
$s{22334} = 1;
……

------解决方案--------------------
探讨

跟编程珠玑里面的排序电话号码道理应该是一样的.1亿个qq号,就需要一亿个位,大概是11MB
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何使用PHP開發中的Memcache? 如何使用PHP開發中的Memcache? Nov 07, 2023 pm 12:49 PM

在Web開發中,我們經常需要使用快取技術來提高網站的效能和回應速度。 Memcache是​​一種流行的快取技術,它可以快取任何資料類型、支援高並發和高可用性。本文將介紹如何使用PHP開發中的Memcache,並提供具體程式碼範例。一、安裝Memcache要使用Memcache,我們首先需要在伺服器上安裝Memcache擴充。在CentOS作業系統中,可以使用以下命令

php如何實現Redis的Hash操作 php如何實現Redis的Hash操作 May 30, 2023 am 08:58 AM

Hash操作//為hash表中的欄位賦值。成功返回1,失敗返回0。若hash表不存在會先建立表格再賦值,若欄位已存在會覆寫舊值。 $ret=$redis->hSet('user','realname','jetwu');//取得hash表中指定欄位的值。若hash表不存在則回傳false。 $ret=$redis->hGet('user','rea

如何使用redis的bit位操作 如何使用redis的bit位操作 May 26, 2023 pm 02:14 PM

本文redis試驗程式碼基於以下環境:作業系統:MacOS64位元版本:Redis5.0.764bit運行模式:standalonemoderedis位元操作reids位元操作也叫位元組操作、bitmap,它提供了SETBIT、GETBIT、BITCOUNT、BITTOP四個指令用於操作二進位位數組。先來看一波基本操作範例SETBIT語法:SETBITkeyoffsetvalue即:指令key偏移量0/1setbit指令用於寫入位元組指定偏移量的二進位位元設定值,偏移量從0開始計數,且只允許寫入1或0,

Laravel開發:如何使用Laravel Hash產生密碼雜湊? Laravel開發:如何使用Laravel Hash產生密碼雜湊? Jun 17, 2023 am 10:59 AM

Laravel是目前最受歡迎的PHPweb框架之一,為開發人員提供了許多強大的功能和元件,其中LaravelHash也是其中之一。 LaravelHash是用於密碼雜湊的PHP函式庫,可用於保護密碼的安全,並使應用程式的使用者資料更加安全。在本文中,我們將了解LaravelHash的工作原理以及如何使用它來對密碼進行雜湊和驗證。前置知識在學習Lara

PHP開發中如何使用Memcache進行高效率的資料讀寫操作? PHP開發中如何使用Memcache進行高效率的資料讀寫操作? Nov 07, 2023 pm 03:48 PM

在PHP開發中,使用Memcache快取系統可以大幅提高資料讀寫的效率。 Memcache是​​一種基於記憶體的快取系統,它可以將資料緩存在記憶體中,避免頻繁的讀寫資料庫。本文將介紹如何在PHP中使用Memcache進行高效率的資料讀寫操作,並提供具體的程式碼範例。一、安裝和設定Memcache首先,需要在伺服器上安裝Memcache擴充。可以透過

PHP開發中如何使用Memcache進行高效率的資料寫入與查詢? PHP開發中如何使用Memcache進行高效率的資料寫入與查詢? Nov 07, 2023 pm 01:36 PM

PHP開發中如何使用Memcache進行高效率的資料寫入與查詢?隨著網路應用的不斷發展,對於系統效能的要求越來越高。在PHP開發中,為了提高系統的效能和反應速度,我們經常使用各種快取技術。而其中一個常用的快取技術就是Memcache。 Memcache是​​一種高效能的分散式記憶體物件快取系統,可以用來快取資料庫查詢結果、頁面片段、會話資料等。透過將資料儲存在內存

Linux如何查看系統是32位元還是64位元? Linux如何查看系統是32位元還是64位元? Mar 01, 2024 pm 07:34 PM

  CentOS是Linux的一種發行版,起源於RHEL,並依照開放原始碼的規定釋出原始碼進行編譯。而且它與RHEL在功能上保持相容性,是一個免費、開源的作業系統,用戶可以在不支付版權費用的情況下使用並進行修改。那麼Linux中CentOS區分32和64位嗎?具體請看下文。  CentOS區分32位元和64位元!  主要區別:  CentOS32bit系統主要針對PC而發布的;  CentOS64bit系統主要針對大型的科學計算;  64bitLinux系統主要安裝64bit系統主要針對大型的科學計算;  64bitLinux系統主要安裝64bit系統上1 2]

利用Memcache快取技術提升PHP應用的同時處理能力 利用Memcache快取技術提升PHP應用的同時處理能力 May 18, 2023 am 08:12 AM

隨著網路的快速發展,越來越多的應用程式需要面對大量的並發請求,如何提高應用程式的並發處理能力成為開發者需要解決的問題。其中,利用Memcache快取技術進行並發優化成為了相對較受歡迎的方案。 Memcache是​​一種高效能的快取技術,適用於大型Web應用程式、資料庫和分散式系統。其特點是將資料儲存於記憶體中,以實現高速讀寫操作。在網路應用程式的資料存取過程中,

See all articles