• 自動秒收錄
  • 軟件:1973
  • 資訊:57811|
  • 收錄網站:279872|

IT精英團

基于位置變化的市縣彈出引導切換

基于位置變化的市縣彈出引導切換

瀏覽次數:
評論次數:
編輯: 陽煦
信息來源: ITPUB
更新日期: 2022-09-08 21:22:53
摘要

目錄1.背景2.模型方案產出3.總結01背景58App業務中有城市和縣域兩個首頁,兩者中間有一個過渡選擇頁,用戶通過點擊該頁面下的條目內容可以切換到對應條目的首頁;比如:點擊“北京”會跳轉到北京(市)

  • 正文開始
  • 相關閱讀
  • 推薦作品

記錄

1.背景

2.模型方案產出

3.總結

01

背景

58App業務有市縣兩個首頁,中間有過渡選擇頁面。用戶可以通過點擊該頁面下的詞條內容切換到相應詞條的首頁;比如點擊“北京”會跳轉到北京(市)首頁,點擊“大興”會跳轉到大興(縣)首頁。

, 34, 34);font-family: -apple-system, "system-ui", "Helvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.544px;background-color: rgb(255, 255, 255);line-height: 2em;visibility: visible;box-sizing: border-box !important;overflow-wrap: break-word !important;'>除了用戶直接通過上述提及的選擇頁切換城市和縣域外,58App內還有另一種切換首頁的方式——基于位置變化的彈窗式引導切換。當用戶的定位城市及縣域與當前選擇的城市或縣域有差異時,此時App會主動彈出一個窗,提示用戶將首頁切換到當前定位的城市首頁或者是縣域首頁。

具體引導切換到城市首頁還是縣域首頁,是通過服務端下發開關配置進行控制的。需要注意的是,App同時只能存在一個首頁,當位置變化后,切換到城市首頁和縣域首頁的可能性都存在,如果服務端將這兩種開關同時打開的話,勢必會造成客戶端彈窗引導切換沖突的問題。

當用戶所處的位置在某市下的某縣時,APP此時出現了彈窗沖突:

如何避免上述彈窗引導切換時發生沖突呢?

一開始,彈窗是這樣處理的:

產品方面

  1. 通過產品經理人工分析總結可能存在引導切換城市和縣域的場景(彈窗);

  2. 同時靠人力分析每個場景(彈窗)之間存在的沖突情況;

  3. 運營在下發不同配置開關引導首頁切換分發流量時,思考是否會產生沖突(多個彈窗)。

打開指定開關引導特定場景首頁切換;同樣,關閉開關暫時阻斷特定場景的切換。

開發方面

  1. 程序開發者通過產品經理總結的多場景分別進行處理;

  2. 程序開發者針對產品經理分析出的場景沖突進行解決。

  3. 每個場景對應各自的開關配置,每個開關對應不同的邏輯處理、對應各自的彈窗、對應各自的文案;

開發者此時在不停地解決QA反饋的彈窗沖突;因為產品經理也沒有想到會出現“這樣和那樣”的場景沖突!!!

上述方案人為把控點多,場景錯綜復雜,人為干預每個環節出錯率很高,同時對開關的配置也沒有糾錯和驗證能力;除此,客戶端處理的場景很多,解決的必要問題就一個,但是非必要問題很多。開發側一直處于被動執行的情形,此時補的邏輯越多、錯的地方就更多。以為是一個簡單的彈窗需求,結果變成處理花式彈窗沖突的大坑。

引導切換場景中到底有多少場景是沖突的?整個引導過程中又有多少種切換場景呢??這個問題此時很難有人說得具體。

針對如此難解問題,作者思考做了一套模型:模型完整地羅列了一張58App中所有基于位置變化后城市與縣域互相切換的場景表;更直觀的是,此模型直接表達出了所有切換場景間存在的沖突項。


02

模型方案產出

2.1 模型方案產出

知道了上述的需求背景和開發痛點后,首先把方案設計要解決的問題和事項加以羅列:

  1. 如何全面產出城市和縣域首頁互相切換存在的各種場景;

  2. 如何分析得出上述各種場景可能存在的沖突項;

  3. 最終通過分析出的①場景和②沖突項,合理制定一套高效準確無沖突的開關配置協議,滿足產品運營需求。

模型思考設計:

  1. 使用面向對象思維,將城市和縣域兩個實體分別用兩種變量表示。

  2. 兩種不同的變量切換其實是一種交換關系,交換包括與自己交換和與非己交換。

  3. 城市和縣域本身存在上下級關系,涉及到下級的交換時要考慮上級是否也存在交換關系。

  4. 用變量表示出所有的交換項,這些變量交換項便是帶有上下級關系的全部切換場景。

  5. 分析上述全部變量交換項,找出存在包含與被包含的交換項,出現包含關系的兩個交換項則認為存在沖突關聯——互斥的事件即不會同時發生——有交集才會有沖突。

  6. 通過步驟4和5的結果,確定開關配置協議(用于控制不同場景下的切換彈窗)。

模型的思路可以用簡單的幾個關鍵詞表達:變量、交換(切換)、上下級、交集(沖突)

具體模型推演:

  1. 城市用變量X表示,縣域用變量Y表示。

  2. 城市與城市的交換表示為:X->X’,城市與縣域的交換表示為:X->Y;縣域與縣域的交換表示為:Y->Y’,縣域與城市的交換表示為:Y->X。

  3. 城市屬于上級,用單個X變量表示即可;縣域屬于城市下級,單純的變量Y在這里表示縣域不再充分,這里在原來縣域變量Y前面加上城市變量X來表示帶有所屬關系的縣域XY更準確。

  4. 加入上下級關系后,城市與己因為沒有下級關系,所以互相交換還是用X->X’?表示;城市與縣域的交換則需要考慮目標縣域是否與當前城市相同與否的情況,相同用X->XY表示,不同則用X->X’Y表示。同理,縣域與己的交換也要考慮目標縣域是否與當前縣域所在的城市相同與否的情況,相同用XY->XY’?表示,不同則用XY->X’Y’?表示;縣域與城市的交換考慮的則是目標城市是否與當前縣域所在的城市相同與否的情況,相同用XY->X表示,不同則用X’Y->X表示。整張關系表如下:

  5. 上述交換項中可以看出:城市切換時,存在X->X’被X->X’Y包含的情況(X->X’ ∩ X->X’Y = X->X’);縣域切換時,存在XY->XY’包含XY->X的情況(XY->XY’ ∩ XY->X = XY->X),XY->X’Y’包含XY->X’?的情況(XY->X’Y’ ∩ XY->X’ = XY->X’)。

  6. 步驟4中的結果一共有7個交換項,這7項中又包含步驟5中的3個關聯交集;也就是說,考慮關聯交集(沖突)后,能夠同時存在的交換項個數最多是4個(因為其它3個與這4個有沖突)。

協議開關配置:

如此,協議開關配置時變得很簡單了,只要按模型校驗邏輯即可。

方案詳解:

  1. 服務端下發開關配置協議時,從全量派發改為按需下發,原來要下發7個全場景,現在只按引流需求下發。7種引導場景,擇需下發;選擇時如果出現沖突,模型算法可以提示和排除沖突(開關最多下發不會超過4個)。

  2. 客戶端處理彈窗邏輯時,不再考慮彈窗沖突的問題,邏輯僅體現在選擇和定位的城市或縣域信息不一致的處理上。原來要為7個配置開關設置7個邏輯彈窗,引入模型后,只需處理4個邏輯,也就是推演步驟2中的四種場景,即選擇的城市或縣域和定位的城市或縣域的兩兩組合。假設,用戶選擇了X市首頁,當前定位在X’市,這時候只需遍歷下發的開關中是否存在“引導從城市切換到其他城市首頁”的開關即可;如果有,則彈窗;否則,不彈窗。彈窗文案同時可以模板化——“當前瀏覽的是X市(縣),是否切換到X’Y縣(市)”。

經過這樣的模型算法,其實已經篩選了服務端存在沖突的協議開關;同時,客戶端也會將多種場景經過定位數據篩選最終匹配到最多一種開關設置的場景。

通過以上設計思路演進和步驟實現,最終產出的模型可以完整、高效、準確、無沖突地解決城市與縣域互相切換的開關配置問題。

使用本方案,只需一套標準模型算法即可解決多種場景下的錯綜彈窗問題,多場景問題得到了歸一處理。解決了服務端下發協議考慮沖突的難題;同時,減輕了客戶端處理多個場景的邏輯負擔。


03

總結

總結

  1. 通過模型,產出了城市與縣域互相切換的場景表;又通過模型算法,計算出了這些場景表中存在的沖突項;最后,通過服務端下發排除了沖突項后的場景開關配置,可以準確控制App彈窗引導切換城市和縣域首頁。

  2. 比傳統人工分析會具有理論價值意義,且更具備系統性,邏輯簡單,產生的結果更全面準確,排除了人為分析出錯的可能,減少了客戶端對多種情況的彈窗和邏輯判斷處理負擔,客戶端彈窗邏輯維護成本低,分析出的沖突關系也更具完善性和精準性。

  3. 這套理論模型基本可以應用到一切帶有上下級關系互換位置的邏輯分析和處理,理論應用場景廣泛。

標簽:縣域 城市 場景
基于iframe的微前端框架——青田
? 上一篇 2022-09-08
springboot集成docsify實現可移植文檔
下一篇 ? 2022-09-09
  • 如何在Ubuntu中保留文件系統并備份當前開發板鏡像
    0閱讀 0條評論 個贊
    在Ubuntu保留文件系統或者說備份當前開發板鏡像的需求在不斷增加。比如Ubuntu文件系統需要安裝庫文件的話直接使用apt-get工具就可以下載,但由于需要下載的核心板較多,比較費時間,這時需要將安……
  • 國產核心板全志T507助力消防系統升級
    0閱讀 0條評論 個贊
    9月16日下午,位于湖南長沙市區內的中國電信大樓發生火災,建筑高度218米,現場濃煙滾滾,數十層樓體燃燒劇烈。消防救援人員趕到現場后很快將火勢控制住,目前大樓火勢已被撲滅,所幸未發現人員傷亡。湖南電信……
  • 教大家如何處理Spring Boot易流中的用戶和群體!
    0閱讀 0條評論 個贊
    1.準備工作2.用戶操作2.1添加用戶2.2修改用戶2.3刪除用戶2.4查詢用戶3.組操作3.1添加組3.2修改組3.3刪除組3.4查詢組4.查看表詳情雖然說我們在實際開發中,……
  • 從PG15開始WAL壓縮優化
    0閱讀 0條評論 個贊
    PG15傳聞中的超級令人激動的功能大多數跳票了,年初我也寫過一個關于PG15新功能跳票的文章。PG15BETA已經發出幾個月了,似乎PG15里令人激動人心的功能不多,不過從長長的新功能列表里,……
  • 深入了解美團葉子發射器開源方案
    0閱讀 0條評論 個贊
    大家好,我是樹哥。之前我們有聊過「如何設計一個分布式ID發號器」,其中有講過4種解決方案,分別是:UUID類雪花算法數據庫自增主鍵Redis原子自增美團以第2、3種解決方案為基礎,開發出……
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
  • [設計模式] Java設計模式-工廠模式
    3閱讀 0條評論 個贊
    目錄【設計模式】Java設計模式-工廠模式簡介1、普通工廠(SimpleFactory)模式①、定義類②、定義簡單的工廠類③、實例2、抽象工廠(AbstractFactory)模式①、定義類②、……
  • 談談動態線程池的9個場景(改進版)
    0閱讀 0條評論 個贊
    大家好,我是小馬哥。線程池是一種基于池化思想管理線程的工具,使用線程池可以減少創建銷毀線程的開銷,避免線程過多導致系統資源耗盡。在高并發以及大批量的任務處理場景,線程池的使用是必不可少的?!?/div>
  • c#異步高級————通道[1]
    0閱讀 0條評論 個贊
    前言該系列為異步編程的進階篇,其實也不能這么講。世界上本沒有進階篇,只能說是高級篇(高級篇不能說多高級,是對底層的封裝的意思),只要是加深理解都是進階。本章先介紹一下channel。正文下面沒什么好說……
  • 深入理解Redis數據結構-字典
    0閱讀 0條評論 個贊
    字典,又稱為符號表、關聯數組或映射,是一種用于保存鍵值對的抽象數據結構。在字典中,一個鍵可以和一個值進行關聯,這些關聯的鍵和值稱為鍵值對。鍵值對中鍵是唯一的,我們可以根據鍵key通過映射查找或者更新對……
  • smile——Java機器學習引擎
    2閱讀 0條評論 個贊
    資源https://haifengl.github.io/https://github.com/haifengl/smile介紹Smile(統計機器智能和學習引擎)是一個基于Java和Scala的快速……
  • 關于這個能見度的例子 網上95%的文章都是錯的!
    0閱讀 0條評論 個贊
    你好,我是坤哥上周我在查閱資料時無意中搜到一篇解釋volatile用法的博文,這篇博文排得很靠前,不過很遺憾,雖然結論是對的,但分析過程完全錯誤,而且我發現網上很多文章都用這個例子來解釋vola……
  • SQL Server復制:事務發布
    0閱讀 0條評論 個贊
    一、背景在復制的運用場景中,事務發布是使用最為廣泛的,我遇到這樣一個場景:在Task數據庫中有Basic與Group兩個表,需要提供這兩個表的部分字段給其它程序讀取放入緩存,程序需要比較及時的獲取……
  • 如何保持Mysql和Redis數據一致
    0閱讀 0條評論 個贊
    先闡明一下Mysql和Redis的關系:Mysql是數據庫,用來持久化數據,一定程度上保證數據的可靠性;Redis是用來當緩存,用來提升數據訪問的性能。關于如何保證Mysql和Redis中的數據一致(……
  • SQL Server 2005分區模板和實例
    0閱讀 0條評論 個贊
    一、場景這一段時間使用SQLServer2005對幾個系統進行表分區,這幾個系統都有一些特點,比如數據庫某張表持續增長,給數據庫帶來了很大的壓力?,F在假如提供一臺新的服務器,那么我們應該如何規劃……
  • Linux環境程序如何運行?
    0閱讀 0條評論 個贊
    .css-1yuhvjn{margin-top:16px;}.css-3jt6os.FileLinkCard{-webkit-align-items:center;-webkit-box-align……
  • 數據庫發展史1-傳統數據庫
    0閱讀 0條評論 個贊
    1946年,美國賓夕法尼亞大學誕生了人類第一臺電子計算機--ENIAC(ElectronicNumericalIntegratorAndComputer,即電子數字積分計算機),這個占地170……
  • Python條件語句的用法
    0閱讀 0條評論 個贊
    python條件語句使用if表達式,難度不高,需要注意的是嵌套用法,以及如何設置對應的條件。if條件判斷語句python語句是按固定順序執行的,先執行前面的語句,再執行后面的語句。如果你像要程……
  • 大促銷活動如何抵御高流量DDoS攻擊?
    0閱讀 0條評論 個贊
    大促活動如何抵御大流量DDoS攻擊?每一次活動大促帶來的迅猛流量,對技術人而言都是一次嚴峻考驗。如果在活動期間遭受黑產惡意DDoS攻擊,無疑是雪上加霜。電商的特性是業務常態下通常不會遭受大流量DD……
  • 訂單超時案例的RabbitMQ實現
    0閱讀 0條評論 個贊
    前言#人間清醒目錄前言業務場景JUC(DelayQueue)方案DelayQueue簡介JUCDelayQueue實現訂單超時案例代碼案例代碼RedisKey過期事件方案簡介RabbitKey……
  • 構建docker鏡像庫(1):用注冊表構建本地鏡像庫
    0閱讀 0條評論 個贊
    目錄一.系統環境二.前言三.使用registry搭建私有鏡像倉庫3.1環境介紹3.2k8smaster節點配置鏡像倉庫3.3k8sworker1節點配置從私有倉庫上傳和拉取鏡像3.3.1上傳鏡……
  • 當老板讓我從Java8升級到Java11時
    4閱讀 0條評論 個贊
    老板讓我把一個項目從Java8遷移到Java11,我該怎么辦呢?最簡單的辦法,當然是直接強行升級,遇到一個錯就改一個錯,別看它low,但是對于一個小型且非核心的項目來說,已經足夠了。當然,……
  • Java內存區(運行時數據區)簡介
    0閱讀 0條評論 個贊
    Java虛擬機在執行Java程序的過程中會把它管理的內存劃分成若干個不同的數據區域。JDK1.8和之前的版本略有不同。下圖是JDK1.8對JVM做的改動,把方法區的具體實現----元空……
  • 在頭腦中扎根泛型的思想3354深刻理解泛型
    0閱讀 0條評論 個贊
    1.前言往往一些剛接觸C#編程的初學者,對于泛型的認識就是直接跳到對泛型集合的使用上,雖然微軟為我們提供了很多內置的泛型類型,但是如果我們只是片面的了解調用方式,這會導致我們對泛型盲目的使用。至于為什……
  • 這三個特點讓G1取代CMS!
    0閱讀 0條評論 個贊
    大家好,我是樹哥。之前我們聊過CMS回收器,但那時候我們說CMS回收器已經落伍了,現在應該是用G1回收器的時候了。那么G1回收器到底有什么魔力,它比CMS回收器相比強在哪里呢?今天……
  • 如何在C#程序中注入惡意DLL?
    6閱讀 0條評論 個贊
    一:背景前段時間在訓練營上課的時候就有朋友提到一個問題,為什么Windbg附加到C#程序后,程序就處于中斷狀態了?它到底是如何實現的?其實簡而言之就是線程的遠程注入,這一篇就展開說一下。二:……
最近發布資訊
更多
十八禁试看120秒做受