標籤: 電動車

  • Day10-微信小程序實戰-交友小程序-實現刪除好友信息與子父組件間通信

    Day10-微信小程序實戰-交友小程序-實現刪除好友信息與子父組件間通信

    回顧:上一次已經把消息的布局以及樣式做好了

    效果圖:

     

     在removeList.js文件中,messageId就是發起這個消息的用戶了

    先查看一下自定義組件的生命周期

    https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/lifetimes.html

     lifetimes: {
        attached: function() {
          // 在組件實例進入頁面節點樹時執行
        },
        detached: function() {
          // 在組件實例被從頁面節點樹移除時執行
        },
      }

    直接就是在lifttimes裏面進行定義的(直接就是在methods的同級的下面加上即可了)

    因為要對用戶的信息進行渲染,就可以看成是一個一個的對象,所以就可以在removeLIst.js中定義一個對象

    然後遇到的問題就和之前是一樣的了,就是我們得到的數據太多了,沒必要全部都要,可以選擇性的要,只需要頭像和昵稱

    (所以就可以在get前面來一個field)

    lifetimes: {
        attached: function () {
          // 一進來就會進行它了
          db.collection('users').doc(this.data.messageId)
          .field({
            userPhoto : true,
            nickName : true
          })
          .get().then((res)=>{
            this.setData({
                userMessage : res.data
            });
          });
        }
      }

    這樣的話我們在這個頁面裏面就可以得到用戶的數據了,剩下的就是直接可以在wxml中用了

    <!--components/removeList/removeList.wxml-->
    <movable-area class="area">
         <movable-view direction="horizontal" class="view">{{ userMessage.nickName }}</movable-view>
         <image src="{{ userMessage.userPhoto }}" />
         <view class="delete">刪除</view>
     </movable-area>

    效果圖:

     

     在之後設置刪除功能之前,先設置一下就是只要點擊了消息列表中用戶的頭像之後,就可以跳轉到這個用戶的詳情頁了

    可以直接 在編輯個人信息的頁面 editUserInfo.wxml中COPY代碼  

    在設置這個跳轉頁面的url的時候,因為同時要給這個url傳遞參數的,所以這個時候就要用大括號括起來了

    <!--components/removeList/removeList.wxml-->
    <movable-area class="area">
         <movable-view direction="horizontal" class="view">{{ userMessage.nickName }}</movable-view>
         <navigator url="{{'/pages/detail/detail?userId=' + userMessage._id}}" open-type="navigate">
         <image src="{{ userMessage.userPhoto }}" />
         </navigator>
         <view class="delete">刪除</view>
     </movable-area>

    即可實現,點擊頭像跳轉到個人的詳情頁面

     

    二、下面就是對刪除功能進行設計

    一開始的就是,點擊了之後,要給用戶一個提示信息,讓用戶可以選擇是取消還是確定的,這裏用的是一個wx.showModel這樣一個內置的方法

     

    所以就要另外的給“點擊了確定”加邏輯了,就要在微信開放文檔裏面細看這個API了

    https://developers.weixin.qq.com/miniprogram/dev/api/ui/interaction/wx.showModal.html

    wx.showModal({
      title: '提示',
      content: '這是一個模態彈窗',
      success (res) {
        if (res.confirm) {
          console.log('用戶點擊確定')
        } else if (res.cancel) {
          console.log('用戶點擊取消')
        }
      }
    })

    把查到的賦值給list,然後在用數組的filter進行刪除即可了

    通過fileter過濾之後,就是過濾初和我們不想要的東西,然後把這些東西再次賦值為list,然後我們把前後的list打印出來會發現:

     

     確實是過濾掉了的

     由於如果要刪掉的話,就設計了removeList這個組件和message這各頁面之間的通信了,並且是子組件像父組件,用到事件來做的

    https://developers.weixin.qq.com/miniprogram/dev/framework/custom-component/events.html

    <!-- 當自定義組件觸發“myevent”事件時,調用“onMyEvent”方法 -->
    <component-tag-name bindmyevent="onMyEvent" />
    <!-- 或者可以寫成 -->
    <component-tag-name bind:myevent="onMyEvent" />

    所以在message.wxml中隊子組件remove-list設置

    <remove-list wx:for="{{ userMessage }}" wx:key="{{index}}" messageId="{{ item }}"
         bindmyevent="onMyEvent"/> 
        

    這樣事件監聽就寫好了,但是如何在組件中觸發呢,我們回到removelist.js中

    繼續查看山脈的鏈接-微信開發文檔

    Component({
      properties: {},
      methods: {
        onTap: function(){
          var myEventDetail = {} // detail對象,提供給事件監聽函數
          var myEventOption = {} // 觸發事件的選項
          this.triggerEvent('myevent', myEventDetail, myEventOption)
        }
      }
    })

    在removelist.js中通過:

     this.triggerEvent('myevent',list) 

    前面參數,要和在 message.wxml設置的 bindmyevent,後面的myevent對應上

    第二個參數就是我們 過濾剩下的list

    給message傳過去之後

      onMyEvent(ev){
      this.setData({
        userMessage : ev.detail
      });

    通過這樣的設置出現了一個bug,就是我們刪除第一條信息的時候,直接把第二條刪掉了,第一條被留下來了

    當我們查看數據庫的時候,留下來的就是第二條信息,但是在前端显示的是第一條信息留下,第二條信息沒了

    要這樣修改:

    onMyEvent(ev){
        this.setData({
          userMessage : []
        },()=>{
            this.setData({
              userMessage : ev.detail
            });
        });
      }
      

    先賦值為空,之後再次調用removelist,再把過濾的數組進行賦值  

     

     

     也就是全部清空之後,再重新渲染的

     

     整個邏輯:

    1、在數據庫中用戶的頭像和昵稱找到,然後獲取數據

     

    2、點擊刪除按鈕的時候,彈出提示框,如果用戶點了缺點刪除的話,之後我們先查詢

     找到之後,把那個消息在message列表中過濾掉

     

     3、然後再重新的更新,之後就觸發子父通信,把更新之後的list傳給

     

    4、父組件拿到removelist這組件的信息

     

     拿到就更新我們的列表,這樣的話列表就發送了變化了

     

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※帶您來了解什麼是 USB CONNECTOR  ?

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    ※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

    ※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※教你寫出一流的銷售文案?

  • 排氣不符規定 德要求戴姆勒召回數十萬輛柴油車

    摘錄自2019年10月12日中央通訊社德國報導

    德國汽車製造商戴姆勒(Daimler)12日表示,聯邦交通管理局(KBA)以違反排氣規定為由,要求召回數十萬輛柴油車。戴姆勒說,這波召回的數量估計將達6位數,並表示會「與有關當局合作」。

    公司在聲明中表示,這次的召回涉及至少26萬輛Sprinter廂型車,並表示所有車輛都在2016年6月之前生產。

    德國福斯汽車(Volkswagen)2015年承認在全球1100萬輛柴油車上安裝非法「減效裝置」(defeat device),包括歐洲850萬輛及美國60萬輛車,德國有關當局隨後展開這起造假醜聞「柴油門」調查。自從「柴油門」4年前爆發,這場排放造假醜聞就對汽車產業造成巨大後果。部分汽車排放與呼吸道及心血管疾病有關的有害氮氧化物,高達法律規定數值的40倍。

    據德國媒體報導,聯邦交通管理局本月稍早展開調查,懷疑戴姆勒安裝「非法軟體」,試圖讓車輛在實驗室測試時的排汙量看起來比實際低。戴姆勒早已召回約70萬輛車,包括德國境內就有近30萬輛車被召回。

    本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※帶您來了解什麼是 USB CONNECTOR  ?

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    ※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

    ※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※教你寫出一流的銷售文案?

  • 抗議氣候變遷 奧斯卡影后珍芳達被捕

    摘錄自2019年10月12日中央通訊社美國報導

    奧斯卡影后珍芳達(Jane Fonda)12日在美國國會山莊外被逮捕,當時她參與氣候變遷抗議活動,並在現場發表談話要求當局採取行動保護環境,之後就被警方銬上手銬帶走。

    法新社報導,長期投身社會運動的珍芳達在臉書(Facebook)專頁張貼的影片顯示,她在國會大廈的階梯上抗議長達10分鐘後,便與其他數名人士一同遭到拘押。

    警方發言人發布聲明說:「美國國會警察局(US Capitol Police)今天逮捕16人,因為他們違法在國會山莊東側抗議。」但聲明並未指明是哪些人被捕。

    81歲的珍芳達穿著亮紅色大衣,反覆呼喊氣候變遷相關口號,而後她被警方銬上手銬,並在其他示威者的歡呼聲下被帶走。數個小時後珍芳達就被釋放。

    珍芳達近期告訴「洛杉磯時報」(Los Angeles Times),她將搬到華府4個月,並效法瑞典環保少女桑柏格(Greta Thunberg)的熱情,全心全力對抗全球暖化。

    珍芳達被捕前曾向現場一小群人發表談話,她痛斥氣候變遷這項「人為危機」,還說自己跟其他環保人士「每週五中午11時,無論晴天、雨天、下雪或暴風雪」,他們都會回到國會山莊展開一連串示威活動。

    「紐約時報」(New York Times)報導,珍芳達若因參與違法示威活動被定罪,將面臨最多250美元(約新台幣7660元)罰款,以及最高90天的刑期。

    珍芳達曾分別以1971年「柳巷芳草」(Klute)與1978年「歸返家園」(Coming Home)兩部作品,摘下奧斯卡影后殊榮。

    本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※帶您來了解什麼是 USB CONNECTOR  ?

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    ※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

    ※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※教你寫出一流的銷售文案?

  • BMW i3 在美銷量 首度超越 Tesla Model S

    BMW i3 在美銷量 首度超越 Tesla Model S

     

    BMW i3 純電動汽車今年 8 月在美銷量為 1,025 輛,首次超過特斯拉 Model S,後者 8 月銷量僅為 600 輛。

    寶馬 i3 純電動車型在美國市場已上市 3 個月,之前由於寶馬內部的運轉效率問題,其銷量一直低於特斯拉 Model S。但該問題解決後,寶馬 i3 的銷量也迎頭趕上。特斯拉 8 月整體需求較去年同期下降 54%,7 月更是下降了 72%。與 2013 年同期相比,特斯拉今年上半年銷量下降了 26%。

    專家稱,特斯拉目前正處發展壯大的階段,而寶馬在歐洲和亞洲市場則以紮穩腳跟。在產品創新度、更新速度及售價方面,特斯拉 Model S 的優勢愈來愈不明顯,而隨著寶馬 i3 的銷量逐步上升,預計歐洲將會成為其最大銷售市場。

     

    (圖片來源:)

    本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※帶您來了解什麼是 USB CONNECTOR  ?

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    ※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

    ※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※教你寫出一流的銷售文案?

  • Jmeter系列(31)- 獲取並使用 JDBC Request 返回的數據

    Jmeter系列(31)- 獲取並使用 JDBC Request 返回的數據

    如果你想從頭學習Jmeter,可以看看這個系列的文章哦

    https://www.cnblogs.com/poloyy/category/1746599.html

     

    前言

    • Jmeter 使用 JDBC Request 獲取數據庫中數據,很多人都會用,因為測試中,有時候需要大量的用戶進行登錄,然後獲取數據庫中真實的數據用於測試
    • 前面也詳細講到 JDBC Request 的具體使用,一般是通過 Variable names 和 Result variable name 來獲取返回的數據
    • 這篇文章主要講的就是把 Variable names 和 Result variable name 獲取到的數據提取出來,給到 HTTP 請求使用

     

    Variable names + Foreach控制器

    線程組結構樹

     

    JDBC Request

     

    調試取樣器運行結果

    有 100 條記錄

     

    ForEach控制器

     

    循環運行的結果( mobile:${mobile} )

     

    Variable names + 循環控制器

    和上面的栗子只是換了個控制器而已,沒太大變化

    線程組結構樹

     

    循環控制器

    填寫 100,是代表循環100次

     

    計數器

    從 1 開始,遞增加到 100為止,每次遞增 1

    • 初始值=1
    • 每次增加 1
    • 最大的值=100(包含)
    • 新變量 num

     

    循環控制器內的 Debug Sampler

     ${__V()} 是關聯函數,後面講到

     

    循環運行的結果( mobile:${mobile} )

     

    Result variable name + Foreach控制器

    線程組結構樹

     

    JDBC Request

     

    正則提取器

     

    重點

    Applu to 選中 Jmeter Variable Name to use,因為要從 Jmeter Variables 中拿到 result_mobile 變量進行提取

     

    調試取樣器運行結果

    正則提取后的值是不是跟上面 Variable names 獲取的值列表很像,是的!然後再結合 ForEach控制器就好啦

     

    ForEach控制器

    變量前綴是正則提取器里的引用名稱

     

    循環運行的結果( mobile:${mobile} )

     

    Result variable name + 循環控制器

    和上面的栗子只是換了個控制器而已,沒太大變化

    線程組結構樹

     

    循環控制器

    填寫 100,是代表循環100次

     

    計數器

     

    用戶參數

    重點一

    •  ${__BeanShell(vars.getObject(“result_mobile”).get(${num}).get(“mobile”))} 
    •  ${__BeanShell()} :執行BeanShell腳本,一般比較短的腳本可以用此方法來寫,後面會再詳細講解這個函數

    重點二

    •  vars.getObject(“result_mobile”).get(${num}).get(“mobile”) 
    • result_mobile:是一個數組,即 JDBC Request 里的 Result variable name,每個元素的格式都是 {mobile=158000480001} 
    • ${num}:上面計數器的值,每次遞增 1,這裡是數組下標的意思
    • 總結:獲取 result_mobile 數組,每次取數組中第 num 個元素,從元素中取 mobile 鍵的值【這是固定寫法,只改Object 名、鍵名就行了】

     

    循環運行的結果( mobile:${user_mobile} )

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※為什麼 USB CONNECTOR 是電子產業重要的元件?

    網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

    ※台北網頁設計公司全省服務真心推薦

    ※想知道最厲害的網頁設計公司"嚨底家"!

    新北清潔公司,居家、辦公、裝潢細清專業服務

    ※推薦評價好的iphone維修中心

  • .NET Core請求控制器Action方法正確匹配,但為何404?

    .NET Core請求控制器Action方法正確匹配,但為何404?

    前言

    有些時候我們會發現方法名稱都正確匹配,但就是找不到對應請求接口,所以本文我們來深入了解下何時會出現接口請求404的情況。

    匹配控制器Action方法(404)

    首先我們創建一個web api應用程序,我們給出如下示例控制器代碼

    [ApiController]
    [Route("[controller]/[action]")]
    public class WeatherController : ControllerBase
    {
        [HttpGet]
        string Get()
        {
            return "Hello World";
        }
    }

     

    當我們進行如上請求時會發現接口請求不到,這是為何呢?細心的你應該可能發現了,對於請求方法是私有,而不是公共的,當我們加上public就可以請求到了接口

    [HttpGet("get")]
    public string Get()
    {
        return "Hello World";
    }

    匹配控制器Action方法本質

    經過如上示例,那麼對於Action方法的到底要滿足怎樣的定義才能夠不至於請求不到呢?接下來我們看看源碼怎麼講。我們找到DefaultApplicationModelProvider類,在此類中有一個OnProvidersExecuting方法用來構建控制器和Action方法模型,當我們構建完畢所有滿足條件的控制器模型后,緊接着勢必會遍歷控制器模型去獲取對應控制器模型下的Action方法,這裏只截取獲取Action方法片段,源碼如下:

    foreach (var controllerType in context.ControllerTypes)
    {    
        //獲取控制器模型下的Action方法
        foreach (var methodInfo in controllerType.AsType().GetMethods())
        {
            var actionModel = CreateActionModel(controllerType, methodInfo);
            if (actionModel == null)
            {
                continue;
            }
    
            actionModel.Controller = controllerModel;
            controllerModel.Actions.Add(actionModel);    
        }
    }

    上述紅色標記則是創建Action模型的重點,我們繼續往下看到底滿足哪些條件才創建Action模型呢?

    protected virtual ActionModel CreateActionModel(TypeInfo typeInfo, MethodInfo methodInfo)
    {
        if (typeInfo == null)
        {
            throw new ArgumentNullException(nameof(typeInfo));
        }
    
        if (methodInfo == null)
        {
            throw new ArgumentNullException(nameof(methodInfo));
        }
    
        if (!IsAction(typeInfo, methodInfo))
        {
            return null;
        }    
        ......    
    }

    到了這個方法裏面,我們找到了如何確定一個方法為Action方法的源頭,由於該方法有點長,這裏我採用文字敘述來作為判斷邏輯,如下:

    protected virtual bool IsAction(TypeInfo typeInfo, MethodInfo methodInfo)
    {
        //如果有屬性訪問器(無效)
    
        //如果有NonAction特性標識無效)
    
        //如果重寫Equals(Object), GetHashCode()方法(無效)
    
        //如果實現Dispose方法(無效)
    
        //如果是靜態方法(無效)
    
        //如果是抽象方法(無效)
    
        //如果是構造函數(無效)
    
        //如果是泛型方法(無效)
    
        //必須為公共方法
        return methodInfo.IsPublic;
    }

    如上是從方法定義的角度來過濾而獲取Action方法,除此之外,我們請求方法的名稱還可以自定義,比如通過路由、ActionName特性指定,那麼這二者是否存在優先級呢?比如如下示例:

    [ApiController]
    [Route("[controller]/[action]")]
    public class WeatherController : ControllerBase
    {
        [HttpGet]
        [ActionName("get1")]
        public string get()
        {
            var routeValue = HttpContext.Request.RouteValues.FirstOrDefault();
    
            return routeValue.Value.ToString();
        }
    }

    我們可以看到此時將以ActionName特性作為方法名稱。所以在上述過濾方法定義后開始構建方法模型,在此之後還會再做一步操作,那就是查找該方法是否通過ActionName特性標識,若存在則以ActionName特性標識給定的名稱作為請求方法名稱,否則以方法定義名稱為準,源碼如下:

    var actionModel = new ActionModel(methodInfo, attributes);
    
    AddRange(actionModel.Filters, attributes.OfType<IFilterMetadata>());
    
    var actionName = attributes.OfType<ActionNameAttribute>().FirstOrDefault();
    if (actionName?.Name != null)
    {
        actionModel.ActionName = actionName.Name;
    }
    else
    {
        actionModel.ActionName = methodInfo.Name;
    }

    還沒完,若是將路由特性放到Action方法上,如下,此時請求接口應該是weather/get還是weather/get1呢?

    [ApiController]
    public class WeatherController : ControllerBase
    {
        [HttpGet]
        [Route("weather/get")]
        [ActionName("get1")]
        public string get()
        {
            var routeValue = HttpContext.Request.RouteValues.FirstOrDefault();
    
            return routeValue.Value.ToString();
        }
    }

    此時若我們以weather/get1請求將出現404,還是以路由特性模板給定為準進行請求,但最終會將路由上Action方法名稱通過ActionName特性上的名稱賦值給Action模型中的ActionName進行覆蓋,源碼如下,所以上述我們得到的action名稱為get1,,當然這麼做沒有任何實際意義。

    public static void AddRouteValues(ControllerActionDescriptor actionDescriptor,ControllerModel controller,ActionModel action)
    {
        foreach (var kvp in action.RouteValues)
        {
            if (!actionDescriptor.RouteValues.ContainsKey(kvp.Key))
            {
                actionDescriptor.RouteValues.Add(kvp.Key, kvp.Value);
            }
        }
    
        if (!actionDescriptor.RouteValues.ContainsKey("action"))
        {
            actionDescriptor.RouteValues.Add("action", action.ActionName ?? string.Empty);
        }
    
        if (!actionDescriptor.RouteValues.ContainsKey("controller"))
        {
            actionDescriptor.RouteValues.Add("controller", controller.ControllerName);
        }
    }

    總結

    本文我們只是單獨針對查找Action方法名稱匹配問題做了進一步的探討,根據源碼分析,對Action方法名稱指定會做3步操作:第一,根據方法定義進行過濾篩選,第二,若方法通過AcionName特性標識則以其所給名稱為準,否則以方法名稱為準,最終賦值給ActionModel上的ActionName屬性,第三,將ActionModel上的ActionName值賦值給路由集合中的鍵Action。

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※帶您來了解什麼是 USB CONNECTOR  ?

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    ※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

    ※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※教你寫出一流的銷售文案?

  • 衣索比亞總理阿邁德推動環保、性平獲2019年諾貝爾和平獎

    貝爾和平獎11日出爐,得獎者是衣索比亞總理阿邁德(Abiy Ahmed),原因是他結束該國與鄰國厄利垂亞之間長達20年的戰火,這項創舉又激發了非洲地區一系列的外交突破,阿邁德也提倡性別平等、環境保護。

    阿邁德2018年4月上任,是該國第1位奧羅莫元首,在最初幾個月,他果斷、大膽地釋放政治犯,並對他們受到的酷刑予以譴責,也釋放被監禁的記者,甚至與政治反對派、民間社會對談,討論改革問題,並邀請先前流亡的政黨人士返國,還針對安全、司法部門進行重大改革。

    阿邁德也致力於性別、環保問題,例如在國境內植樹造林以遏制氣候變化的負面影響。

    本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※帶您來了解什麼是  USB CONNECTOR   ?

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    ※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

    ※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※教你寫出一流的銷售文案 ?

  • 2015年京津冀公共服務新能源車將達20222輛

    22日,中國工信部、發改委及科技部等七部委聯合印發《京津冀公交等公共服務領域新能源汽車推廣工作方案》,提出2014年到2015年,京津冀地區公共交通服務領域共推廣20,222輛新能源汽車。其中北京市8,507輛,天津市6,000輛,河北省5,715輛,京津冀地區公交車中新能源汽車到2015年底比例不低於16%,京津出租車中新能源汽車比例不低於5%。   2014年到2015年,京津冀地區共新建充/換電站94座,充電樁新增1.62萬個。到2015年底,京津冀地區充換電站總數將達到112座,充電樁總數將達到19,657個,基本建成以保障運行為前提,建設規模適度超前的充電設施網絡。

    本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※帶您來了解什麼是 USB CONNECTOR  ?

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    ※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

    ※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※教你寫出一流的銷售文案?

  • DNS篇(詳解DNS)

    DNS篇(詳解DNS)

    *文章來源:https://blog.egsec.cn/archives/601

    *本文將主要說明:本文主要敘述什麼是DNS、域名的層級、DNS 解析過程、DNS的緩存時間、DNS 的記錄類型、DNS 報文結構、DNS劫持與HTTP劫持以及手動清理本地緩存的方法。

     

    DNS屬於應用層。DNS即域名系統,其作用是將字符串域名解析成相對於的服務器IP地址,免除人們記憶IP地址的單調和苦惱,屬於為用戶排憂解難之舉,因此劃歸為應用層。DNS不屬於協議,它是域名解析。

     

    什麼是DNS

    DNS是 Domain Name System 的縮寫,也就是 域名解析系統,它的作用非常簡單,就是根據域名查出對應的 IP地址。

    你可以把它想象成一本巨大的電話本,比如當你要訪問域名www.egsec.cn,首先要通過DNS查出它的IP地址是118.31.61.137。

    域名層級

    DNS 的解析過程中,需要對域名的層級有了解:

    • 根域名 :.root 或者 . ,通常是省略的
    • 頂級域名,如 .com,.cn 等
    • 次級域名,如 baidu.com 里的 baidu,這個是用戶可以進行註冊購買的
    • 主機域名,比如 baike.baidu.com 里的baike,這個是用戶可分配的 
    主機名.次級域名.頂級域名.根域名
    baike.baidu.com.root
    

    DNS 解析過程

    咱們以訪問 www.egsec.cn 這個域名為例,來看一看當你訪問 www.egsec.cn 時,會發生哪些事:

    1. 先查找本地 DNS 緩存(自己的電腦上),有則返回,沒有則進入下一步
    2. 查看本地 hosts 文件有沒有相應的映射記錄,有則返回,沒有則進入下一步
    3. 向本地 DNS 服務器(一般都是你的網絡接入服務器商提供,比如中國電信,中國移動)發送請求進行查詢,本地DNS服務器收到請求后,會先查下自己的緩存記錄,如果查到了直接返回就結束了,如果沒有查到,本地DNS服務器就會向DNS的根域名服務器發起查詢請求:請問老大, www.egsec.cn 的ip是啥?
    4. 根域名服務器收到請求后,看到這是個 .cn 的域名,就回信說:這個域名是由 .cn 老弟管理的,你去問他好了,這是.cn老弟的聯繫方式(ip1)。
    5. 本地 DNS 服務器接收到回信后,照着老大哥給的聯繫方式(ip1),馬上給 .cn 這個頂級域名服務器發起請求:請問 .cn 大大,www.egsec.cn 的ip 是啥?
    6. .cn 頂級域名服務器接收到請求后,看到這是 egsec.cn 的域名,就回信說:這個域名是 .egsec.cn 老弟管理的,你就去問他就行了,這是他的聯繫方式(ip2)
    7. 本地 DNS 服務器接收到回信后,按照前輩的指引(ip2),又向 .egsec.cn 這個權威域名服務器發起請求:請問 egsec.cn 大大,請問 www.egsec.cn 的ip是啥?
    8. egsec.cn 權威域名服務器接收到請求后,確認了是自己管理的域名,馬上查了下自己的小本本,把 www.egsec.cn 的ip告訴了 本地DNS服務器。
    9. 本地DNS服務器接收到回信后,非常地開心,這下總算拿到了www.egsec.cn的ip了,馬上把這個消息告訴了要求查詢的客戶(就是你的電腦)。由於這個過程比較漫長,本地DNS服務器為了節省時間,也為了盡量不去打擾各位老大哥,就把這個查詢結果偷偷地記在了自己的小本本上,方便下次有人來查詢時,可以快速回應。

    總結起來就是三句話:

    • 從”根域名服務器”查到”頂級域名服務器”的NS記錄和A記錄(IP地址)
    • 從”頂級域名服務器”查到”次級域名服務器”的NS記錄和A記錄(IP地址)
    • 從”次級域名服務器”查出”主機名”的IP地址

    DNS的緩存時間

    上面的幾個步驟里,可以看到有兩個地方會緩存 DNS 的查詢記錄,有了緩存,在一定程度上會提高查詢效率,但同時在準確率上會有所損失。

    因此我們在配置 DNS 解析的時候,會有一個 TTL 參數(Time To Live),意思就是這個緩存可以存活多長時間,過了這個時間,本地 DNS 就會刪除這條記錄,刪除了緩存后,你再訪問,就要重新走一遍上面的流程,獲取最新的地址。

    DNS 的記錄類型

    當我們在阿里雲買了一個域名后,可以配置我們主機域名解析規則,也就是 記錄。  

    阿里雲域名雲解析(不管是哪個服務商都一樣):

    常見的 DNS 記錄類型如下

    • A:地址記錄(Address),返回域名指向的IP地址。
    • NS:域名服務器記錄(Name Server),返回保存下一級域名信息的服務器地址。該記錄只能設置為域名,不能設置為IP地址。
    • MX:郵件記錄(Mail eXchange),返回接收电子郵件的服務器地址。
    • CNAME:規範名稱記錄(Canonical Name),返回另一個域名,即當前查詢的域名是另一個域名的跳轉,詳見下文。
    • PTR:逆向查詢記錄(Pointer Record),只用於從IP地址查詢域名,詳見下文。

    DNS報文結構

    1. 事務 ID:DNS 報文的 ID 標識。對於請求報文和其對應的應答報文,該字段的值是相同的。通過它可以區分 DNS 應答報文是對哪個請求進行響應的。
    2. 標誌:DNS 報文中的標誌字段。
    3. 問題計數:DNS 查詢請求的數目。
    4. 回答資源記錄數:DNS 響應的數目。
    5. 權威名稱服務器計數:權威名稱服務器的數目。
    6. 附加資源記錄數:額外的記錄數目(權威名稱服務器對應 IP 地址的數目)

    DNS劫持與HTTP劫持

    通過上面的講解,我們都知道了,DNS 完成了一次域名到 IP 的映射查詢,當你在訪問 www.egsec.cn 時,能正確返回給你 我網站首頁的 ip。

    但如果此時 DNS 解析出現了一些問題,當你想要訪問 www.egsec.cn 時,卻返回給你 www.baidu.com 的ip,這就是我們常說的 DNS 劫持。

    與之容易混淆的有 HTTP 劫持。

    什麼是 HTTP 劫持?

    你一定見過當你在訪問 某個網站時,右下角也突然彈出了一個扎眼的廣告彈窗。這就是 HTTP 劫持。

    藉助別人文章里的例子,它們倆的區別就好比是

    • DNS劫持是你想去機場的時候,把你給丟到火車站。
    • HTTP劫持是你去機場途中,有人給你塞小廣告。

    DNS劫持 是如何產生的?

    下面大概說幾種DNS劫持方法:

    1.本機DNS劫持

    攻擊者通過某些手段使用戶的計算機感染上木馬病毒,或者惡意軟件之後,惡意修改本地DNS配置,比如修改本地hosts文件,緩存等

    2. 路由DNS劫持

    很多用戶默認路由器的默認密碼,攻擊者可以侵入到路由管理員賬號中,修改路由器的默認配置

    3.攻擊DNS服務器

    直接攻擊DNS服務器,例如對DNS服務器進行DDOS攻擊,可以是DNS服務器宕機,出現異常請求,還可以利用某些手段感染dns服務器的緩存,使給用戶返回來的是惡意的ip地址

    如何在本地查詢 DNS 解析結果?

    nslookup命令:

    命令格式:nslookup [查詢的域名] [指定DNS服務器]

    你也可以指定公網的域名服務器進行查詢,比如常見的 114.114.114.114

    手動清理DNS緩存

    MacOS:

    sudo dscacheutil -flushcache
    $ sudo killall -HUP mDNSResponder
    

    Windows:

    $ ipconfig /flushdns
    

    Linux:

    使用NSCD的DNS緩存
    $ sudo /etc/init.d/nscd restart
    
    # 服務器或者路由器使用DNSMASQ
    $ sudo dnsmasq restart
    

      

    DNS詳解篇完

    轉發請註明出處(EG Blog:blog.egsec.cn),謝謝!

     

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※帶您來了解什麼是 USB CONNECTOR  ?

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    ※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

    ※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※教你寫出一流的銷售文案?

  • 拯救漏油生態危機:菲律賓吉馬拉斯島的故事

    環境資訊中心綜合外電;姜唯 編譯;林大利 審校

    本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※帶您來了解什麼是 USB CONNECTOR  ?

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    ※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

    ※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※教你寫出一流的銷售文案?