魚肉去腥味只會用蔥薑?賣魚阿姨用鹽水泡一泡,魚鮮香沒腥味

今天和大家分享做魚怎樣去除魚腥味。
我個人是非常喜歡吃魚,
因為不太喜歡吃豬肉,所以吃魚比較多,
一周最少要吃4次。
可是做魚的時候都會遇到一個煩惱,
辛辛苦苦做好的魚會有腥味,
影響了口感,沒有飯店裡做的鮮香。

那麼魚應該用什麼方法去腥呢?
其實烹飪魚去腥的方法有很多種,
可以根據原材料的腥味程度,
綜合採取一些措施,達到去腥臭目的。
小編總結了一下,大概有這幾點。
第1種方法,用蔥薑和料酒腌制下可以去除腥味,
這一步是家庭最常用的,相信大家都非常熟悉,
就是把薑片和蔥塞進魚肚子裡,
再抹上料酒,就可以除去大部分腥味了。

第2種方法,
這個方法應該好多人都不太知道,也是最關鍵的。
其實每條魚的腮下兩邊其實都有一條白線,
這根細小的線就是製造獨特腥味的東西,必須要去除掉。
操作也很簡單,只需要把魚鰓往下一點點的位置用刀劃開,
一隻手輕輕拽著這根線,另一隻手輕拍打魚身,
就會輕鬆把這根白線拽出來。


第3種方法,
可以把魚放進溫茶水中泡洗,
家裡茶葉多的喝不完可以用此方法。
一般一條1斤-1斤半左右的魚,
用一杯濃茶兌成淡茶水,
把魚放在茶水中浸泡4-8分鐘左右,
魚腥味就自然消失了。

第4種方法,
把買回來的新鮮魚先放在鹽水中浸泡一會兒,
一般每五斤水加入25克鹽就可以了。
把活魚放入鹽水中,鹽水會通過魚鰓進入血液,
1個小時候,土腥味就會消失了。
如果是死魚要浸泡2個小時左右,
可去除土腥味。

第5種方法,
如果是河裡的魚,剖膛洗乾凈後放入冷水中,
再往水中加少量的醋和白鬍椒粉,
這樣處理後會大大減少土腥味或者沒有土腥味了。


第6種方法,
活魚殺後要把肚子裡的黑膜
魚喉骨、兩邊的腮去乾凈,
像鯉魚或者草魚還要把背筋去掉,
都是腥味產生的根源所在。
這些買魚師傅都會幫忙處理好了,
我們要做的就是把黑膜去掉,
殘留的血液清洗乾凈。
因為這層黑膜和魚血不僅腥味特別重,
脂肪含量也很高,一定要處理乾凈。

第7種方法,
淘洗大米的水不要倒掉,
把魚放進淘米水裡浸泡半個小時,
無論是處理過的魚還是新鮮的魚都能有效的去除腥味,
這也是我最常用的方法之一。
還可以將魚放在牛奶中浸泡,
也會起到增鮮去腥的作用,
這個方法有點小奢侈哈。
最後再和大家分享一點,
如果處理魚手上留有魚腥味,
可以用牙膏、鹽水或者檸檬水搓洗雙手,
會很好的去除手上的腥味。

本站聲明:網站內容來源http://www.look543.com,如有侵權,請聯繫我們,我們將及時處理

【精選推薦文章】

※聽過「電子菸」嗎?想知道與一般傳統香菸有何不同嗎?

電子煙能幫助戒菸嗎?專家學者以健康觀點帶您來了解 !

※新手該如何選擇電子菸口味及濃度呢?

長痣很難看?臉上4個位置長痣,屬於天生「耐看型」美女 點掉反而變醜

在這個看臉的時代,每一個愛美的小仙女都希望自己臉蛋像白煮蛋一樣白皙無暇,甚至通過醫美的手段將臉上那些礙眼的痣點掉來追求一張乾乾淨淨的臉。事實上,如果痣長對了地方,不僅不會影響外表的美麗,而且還會讓你看上去有一種獨特的韻味和特點,給別人一種更加耐看的美。

1.淚痣

眼角周圍的痣又稱為淚痣,對眼睛有很好的修飾作用,使得眼睛更加炯炯有神,很有韻味和魅力,給人三分嬌小,七分柔美之感。因此還發展出了淚痣妝,火爆一時。說到淚痣就不得不提其代表性人物迪麗熱巴了,她的淚痣恰好落於卧蠶下方,增加了卧蠶的飽滿感,眼睛也顯得更加靈動水潤,像一隻俏皮可愛的小狐狸,十分具有辨識度。

橢圓臉型的仙女如果有淚痣,不妨嘗試搭配拉長眼尾的鳳眼狀和微卷的八字劉海,不僅可以平衡面部比例,使得中庭更加飽滿,還會給人更加嫵媚慵懶的感覺。有小野馬之稱並開創了”泫雅風”的性感女神金泫雅也有一顆淚痣點在眼角,她的淚痣與她獨特的微醺妝相結合,更是為其增加了一絲朦朧迷離的美。

2.嘴邊痣

笑起來的時候,嘴角痣會增添一分靈動活潑。而且嘴角的痣總是會讓人聯想到好吃的性格,因此會給人一種憨態可掬的感覺。特別是對於圓臉的小仙女,擁有一顆嘴角痣,再搭配上學生短髮,一下子年輕十歲,十分俏皮可愛。沈月嘴周的兩顆痣,就顯得她又萌又甜美,像一隻微笑的小熊布娃娃。

嘴角痣還可以帶給人一種伶牙利嘴的感覺,特別是說話和笑起來的時候,嘴角痣更加給人一種動態的美。不管是什麼臉型的仙女,都會因為嘴角痣而擁有別具一格的魅力。李倩出演《武林外史》中”小泥巴”這個角色時受到了很多人喜愛,戲中的她不僅演技和顏值都在線,嘴角的痣更是給人一種機靈聰明的感覺,讓她的形象更加突出,給觀眾留下深刻的印象。所以,嘴巴周圍的有痣的小仙女可謂是十分有福氣了!

3.臉頰痣

臉頰痣不僅可以修飾蘋果肌,給人一種少女感,同時臉部的一顰一笑,都會牽動臉頰上的痣,因此更能給人一種生動而有活力的感覺。楊丞琳的臉頰正中央上就有一顆明顯的痣,這顆痣搭配她小巧的鵝蛋臉以及圓潤明亮的大眼睛,帶給人們一絲古靈精怪的感覺,十分調皮減齡。

對於方型臉型的小仙女,面部線條偏硬,臉頰痣就是點睛之筆,整體上更增添幾分高級感和霸氣。我們的”鞏皇”鞏俐女神臉頰上的痣,不但不顯得突兀奇怪,反而讓她整體更加颯爽瀟洒,氣場十足,同時讓她的臉擁有更獨一無二的氣質和韻味。所以,如果你有臉頰痣,千萬不要嫌棄哦,一不小心就是個帥氣女王呢!

4.鼻尖痣

鼻樑下方的鼻尖痣給人的就是活潑又不失精緻的感覺,會突出鼻尖的圓潤以及鼻樑的高挺,讓面部整體更加立體豐盈。圓臉的小仙女如果擁有一顆鼻尖痣,就可以在可愛的基礎上添加一絲俏皮感,特別是搭配上八字劉海以及丸子頭,元氣又有氣質。公認的美女韓佳人就有一顆鼻尖痣,可以說是非常可愛小巧了,給她白皙細嫩的臉增加了一絲生動感,給人優雅大方又不失靈動俏麗。

五官清麗的仙女同樣適合鼻尖痣,會給面部增加一絲豐富感,同時搭配上自然的野生眉,溫柔的眼睛,立刻就能凸現出溫婉感和女人味。另一個擁有鼻尖痣的大美人就是家喻戶曉的不老女神全智賢,她從出道以來就一直因為這顆鼻尖痣而擁有極高的辨識度,而且為她的美麗增加了一份自然淡雅的感覺。

本站聲明:網站內容來源http://www.look543.com,如有侵權,請聯繫我們,我們將及時處理

【精選推薦文章】

※聽過「電子菸」嗎?想知道與一般傳統香菸有何不同嗎?

電子煙能幫助戒菸嗎?專家學者以健康觀點帶您來了解 !

※新手該如何選擇電子菸口味及濃度呢?

用樟腦丸滅蟑螂根本不夠力!阿嫲只用一顆「馬鈴薯」就斬草除根「消滅一大片蟑螂」

家裡的蟑螂去年還沒有,今年突然有很多,而且用樟腦丸也不頂事,最後還是婆婆出馬,用了馬鈴薯和硼酸混合,最後死了一片蟑螂。

蟑螂又叫小強,傳說中是打不死的,而且子嗣眾多,完全沒有瀕臨滅絕的跡象,每個人家裡都可能有,有時候就算是放了樟腦丸也殺不死牠,一個方法不夠,教給你六個,總該夠了!

1、洗衣粉

樟腦丸的味道不好聞,最後可能殺不死蟑螂還污染家裡空氣。可以直接用洗衣粉代替,把洗衣粉灑在蟑螂經常出現的地方,比如廚房角落或者衣櫃角落,也是吃了就死。

2、肥皂液

你需要一塊肥皂,以及熱水。把肥皂放進熱水裡融化,見蟑螂就直接潑,死傷率還是很高的。肥皂也的濃度最好大一些,不能換成冷水。因為用鹼性溶液的目的就是洗去蟑螂身上的油脂,讓它動彈不了,熱水效果去油效果更佳。

3、美式除蟑法

之所以叫美式除蟑法就是因為美國人經常用這種方法。首先是清潔天天見的小蘇打,把它和糖按1:1的比例混合,同樣是灑在可能會出現的地方,驅趕效果較強。

4、硼酸馬鈴薯

把馬鈴薯煮熟,買兩袋硼酸,混合在一塊調成糊糊狀,然後找個小瓶蓋放在那些常見地帶,過不了幾天就能看到很多蟑螂的屍體。小編用過這種,效果挺好,看到屍體莫名爽。

這個原理好像是因為硼酸不消化,蟑螂就會撐死,牠死後會被同伴解決掉,同伴也被撐死了,所以不是吃貨的就能躲掉?

硼砂加麵粉也是同樣的道理。

5、三種驅逐法

神秘的古方說把夾竹桃、黃瓜、洋蔥片中的任意一种放在柜子里或者角落裡能很好地驅逐蟑螂。

6、糖水誘惑

找個窄口的罐子,在瓶口處撒點糖水,在瓶子裡面放小半瓶肥皂液,等蟑螂循著甜味來了,自然會調入你設好的肥皂液陷阱,再難脫身。

7、定期清潔

說一千道一萬,蟑螂之所以叫小強是有原因的,生生不息,聽說連卵都沒辦法輕易殺死,最重要的還是保持家中角落清潔。

本站聲明:網站內容來源http://www.look543.com,如有侵權,請聯繫我們,我們將及時處理

【精選推薦文章】

※聽過「電子菸」嗎?想知道與一般傳統香菸有何不同嗎?

電子煙能幫助戒菸嗎?專家學者以健康觀點帶您來了解 !

※新手該如何選擇電子菸口味及濃度呢?

深入理解static關鍵字

在開始講static之前,我想讓各位看一段有意思的代碼:

public class Test {
     
    static{
        System.out.println("test static 1");
    }
  
    static{
        System.out.println("test static 2");
    }
    
    public static void main(String[] args) {
         
    }
}

看完程序,小白童鞋發話了:啥玩意?main方法中啥都沒有,能運行啥?博主你個星星星…

運行結果:
test static 1
test static 2

小白童鞋:那啥…那啥…博主我說啥了,我啥都沒說…

其實,上面的代碼懂的自然懂,不懂的自然就不懂了,因為上面的代碼涉及到JVM的類加載了!當然不在本篇博客文章的範疇內,如果有興趣理解上面的程序,這篇文章可能會對你有所幫助

1、static存在的主要意義

static的主要意義是在於創建獨立於具體對象的域變量或者方法。以致於即使沒有創建對象,也能使用屬性和調用方法

static關鍵字還有一個比較關鍵的作用就是 用來形成靜態代碼塊以優化程序性能。static塊可以置於類中的任何地方,類中可以有多個static塊。在類初次被加載的時候,會按照static塊的順序來執行每個static塊,並且只會執行一次。

  為什麼說static塊可以用來優化程序性能,是因為它的特性:只會在類加載的時候執行一次。因此,很多時候會將一些只需要進行一次的初始化操作都放在static代碼塊中進行。

2、static的獨特之處

1、被static修飾的變量或者方法是獨立於該類的任何對象,也就是說,這些變量和方法不屬於任何一個實例對象,而是被類的實例對象所共享

怎麼理解 “被類的實例對象所共享” 這句話呢?就是說,一個類的靜態成員,它是屬於大夥的【大夥指的是這個類的多個對象實例,我們都知道一個類可以創建多個實例!】,所有的類對象共享的,不像成員變量是自個的【自個指的是這個類的單個實例對象】…我覺得我已經講的很通俗了,你明白了咩?

2、在該類被第一次加載的時候,就會去加載被static修飾的部分,而且只在類第一次使用時加載並進行初始化,注意這是第一次用就要初始化,後面根據需要是可以再次賦值的。

3、static變量值在類加載的時候分配空間,以後創建類對象的時候不會重新分配。賦值的話,是可以任意賦值的!

4、被static修飾的變量或者方法是優先於對象存在的,也就是說當一個類加載完畢之後,即便沒有創建對象,也可以去訪問。

3、static應用場景

因為static是被類的實例對象所共享,因此如果某個成員變量是被所有對象所共享的,那麼這個成員變量就應該定義為靜態變量

因此比較常見的static應用場景有:

1、修飾成員變量
2、修飾成員方法
3、靜態代碼塊
4、修飾類【只能修飾內部類也就是靜態內部類】
5、靜態導包

以上的應用場景將會在下文陸續講到…

4、靜態變量和實例變量的概念

靜態變量:
static修飾的成員變量叫做靜態變量【也叫做類變量】,靜態變量是屬於這個類,而不是屬於是對象。

實例變量:
沒有被static修飾的成員變量叫做實例變量,實例變量是屬於這個類的實例對象。

還有一點需要注意的是:static是不允許用來修飾局部變量,不要問我問什麼,因為java規定的!

5、靜態變量和實例變量區別【重點常用】

靜態變量:
靜態變量由於不屬於任何實例對象,屬於類的,所以在內存中只會有一份,在類的加載過程中,JVM只為靜態變量分配一次內存空間。

實例變量:
每次創建對象,都會為每個對象分配成員變量內存空間,實例變量是屬於實例對象的,在內存中,創建幾次對象,就有幾份成員變量。

我相信各位智商都比宜春智商要高,應該都能理解上面的話。下面舉了例子完全出於娛樂,理解了大可不必看,下面的例子僅供參考,僅供娛樂一下下氣氛,趕時間的熊dei大可略過!

怎麼理解呢?打個比喻吧…就比方說程序員小王是一個比較溫柔陽光的男孩子,這1024的這一天,老闆閑的沒事,非要拉着程序員小王來玩耍,怎麼個玩法呢?老闆和小王一人拿着一把菜刀,規則很簡單,互相傷害,一人一刀,你一刀,我一刀….遊戲一開始,老闆二話不說,跳起來就是一刀,程序員小王二話也沒說反手就是一菜刀回去,這個時候老闆發飆了,雙眼瞪得忒大,跳起來又是一刀,這個時候程序員小王不敢還手了,就沒動手。沒想到老闆越來越生猛,左一刀右一刀全程下來差不多砍個半個時….程序員小王一直沒有還過手,因為小王知道他是老闆…

這個程序員小王只會在老闆第一次揮刀的時候,回老闆一刀,之後就不還手了,這個時候我們把程序員小王看做是靜態變量,把老闆第一次向小王揮刀看做是類加載,把小王回老闆一刀看出是分配內存空間,而一人一刀這個回合過程看成是類加載的過程,之後老闆的每一刀都看成是創建一次對象。

連貫起來就是static變量值在類第一次加載的時候分配空間,以後創建類對象的時候不會重新分配

之後這個老闆挨了一刀之後躺醫院了一年,一出院回到公司第一件事就是拉程序員宜春出來玩耍,老闆殊不知其然,這個博主程序員宜春性格異常暴躁,老闆遞給程序員宜春一把菜刀,博主宜春一接過菜刀,猝不及防的被老闆跳起來就是一刀,程序員宜春痛的嗷了一聲,暴躁的程序員宜春還沒嗷完,在嗷的同時跳起來就是給老闆一刀,接着老闆跳起來又是一刀,程序員宜春嗷的一聲又是回一刀,老闆跳起來又一刀,程序員宜春嗷的一聲又是回一刀,只要老闆沒停程序員宜春就沒停,因為程序員宜春知道,就自己這曝脾氣,暴躁起來si都敢摸,肯定有幾個老鐵知道….

程序員宜春就類似實例變量,每次創建對象,都會為每個對象分配成員變量內存空間,就像老闆來一刀,程序員宜春都會回一刀這樣子的…

6、訪問靜態變量和實例變量的兩種方式

我們都知道靜態變量是屬於這個類,而不是屬於是對象,static獨立於對象。

但是各位有木有想過:靜態成員變量雖然獨立於對象,但是不代表不可以通過對象去訪問,所有的靜態方法和靜態變量都可以通過對象訪問【只要訪問權限足夠允許就行】,不理解沒關係,來個代碼就理解了

public class StaticDemo {

        static int value = 666;

        public static void main(String[] args) throws Exception{
            new StaticDemo().method();
        }

        private void method(){
            int value = 123;
            System.out.println(this.value);
        }

}

猜想一下結果,我猜你的結果是123,哈哈是咩?其實

運行結果: 666

回過頭再去品味一下上面的那段話,你就能非常客觀明了了,這個思想概念要有隻是這種用法不推薦!

因此小結一下訪問靜態變量和實例變量的兩種方法:

靜態變量:

類名.靜態變量

對象.靜態變量(不推薦)

靜態方法:

類名.靜態方法

對象.靜態方法(不推薦)

7、static靜態方法

static修飾的方法也叫做靜態方法,不知道各位發現咩有,其實我們最熟悉的static靜態方法就是main方法了~小白童鞋:喔好像真的是哦~。由於對於靜態方法來說是不屬於任何實例對象的,this指的是當前對象,因為static靜態方法不屬於任何對象,所以就談不上this了。

還有一點就是:構造方法不是靜態方法

8、static靜態代碼塊

先看個程序吧,看看自個是否掌握了static代碼塊,下面程序代碼繼承關係為 BaseThree——> BaseTwo——> BaseOne

BaseOne類

package com.gx.initializationblock;

public class BaseOne {

    public BaseOne() {
        System.out.println("BaseOne構造器");
    }

    {
        System.out.println("BaseOne初始化塊");
        System.out.println();
    }

    static {
        System.out.println("BaseOne靜態初始化塊");

    }

}

BaseTwo類

package com.gx.initializationblock;

public class BaseTwo extends BaseOne {
    public BaseTwo() {
        System.out.println("BaseTwo構造器");
    }

    {
        System.out.println("BaseTwo初始化塊");
    }

    static {
        System.out.println("BaseTwo靜態初始化塊");
    }
}

BaseThree 類

package com.gx.initializationblock;

public class BaseThree extends BaseTwo {
    public BaseThree() {
        System.out.println("BaseThree構造器");
    }

    {
        System.out.println("BaseThree初始化塊");
    }

    static {
        System.out.println("BaseThree靜態初始化塊");
    }
}

測試demo2類

package com.gx.initializationblock;

/*
     注:這裏的ABC對應BaseOne、BaseTwo、BaseThree 
 * 多個類的繼承中初始化塊、靜態初始化塊、構造器的執行順序
     在繼承中,先後執行父類A的靜態塊,父類B的靜態塊,最後子類的靜態塊,
     然後再執行父類A的非靜態塊和構造器,然後是B類的非靜態塊和構造器,最後執行子類的非靜態塊和構造器
 */
public class Demo2 {
    public static void main(String[] args) {
        BaseThree baseThree = new BaseThree();
        System.out.println("-----");
        BaseThree baseThree2 = new BaseThree();

    }
}

運行結果

BaseOne靜態初始化塊
BaseTwo靜態初始化塊
BaseThree靜態初始化塊
BaseOne初始化塊

BaseOne構造器
BaseTwo初始化塊
BaseTwo構造器
BaseThree初始化塊
BaseThree構造器
-----
BaseOne初始化塊

BaseOne構造器
BaseTwo初始化塊
BaseTwo構造器
BaseThree初始化塊
BaseThree構造器

至於static代碼塊運行結果不是很清晰的童鞋,詳細講解請看這篇

以上僅僅是讓各位明確代碼塊之間的運行順序,顯然還是不夠的,靜態代碼塊通常用來對靜態變量進行一些初始化操作,比如定義枚舉類,代碼如下:

public enum WeekDayEnum {
    MONDAY(1,"周一"),
    TUESDAY(2, "周二"),
    WEDNESDAY(3, "周三"),
    THURSDAY(4, "周四"),
    FRIDAY(5, "周五"),
    SATURDAY(6, "周六"),
    SUNDAY(7, "周日");
 
    private int code;
    private String desc;
 
    WeekDayEnum(int code, String desc) {
        this.code = code;
        this.desc = desc;
    }
 
    private static final Map<Integer, WeekDayEnum> WEEK_ENUM_MAP = new HashMap<Integer, WeekDayEnum>();
 
    // 對map進行初始化
    static {
        for (WeekDayEnum weekDay : WeekDayEnum.values()) {
            WEEK_ENUM_MAP.put(weekDay.getCode(), weekDay);
        }
    }
 
    public static WeekDayEnum findByCode(int code) {
        return WEEK_ENUM_MAP.get(code);
    }
 
    public int getCode() {
        return code;
    }
 
    public void setCode(int code) {
        this.code = code;
    }
 
    public String getDesc() {
        return desc;
    }
 
    public void setDesc(String desc) {
        this.desc = desc;
    }
} 

當然不僅僅是枚舉這一方面,還有我們熟悉的單例模式同樣也用到了靜態代碼塊,如下:

public class Singleton {
    private static Singleton instance;
 
    static {
        instance = new Singleton();
    }
 
    private Singleton() {}
 
    public static Singleton getInstance() {
        return instance;
    }
}

9、static變量與普通變量區別

static變量也稱作靜態變量,靜態變量和非靜態變量的區別是:靜態變量被所有的對象所共享,在內存中只有一個副本,它當且僅當在類初次加載時會被初始化。而非靜態變量是對象所擁有的,在創建對象的時候被初始化,存在多個副本,各個對象擁有的副本互不影響。

還有一點就是static成員變量的初始化順序按照定義的順序進行初始化。

10、靜態內部類

靜態內部類與非靜態內部類之間存在一個最大的區別,我們知道非靜態內部類在編譯完成之後會隱含地保存着一個引用,該引用是指向創建它的外圍內,但是靜態內部類卻沒有。沒有這個引用就意味着:

1、它的創建是不需要依賴外圍類的創建。
2、它不能使用任何外圍類的非static成員變量和方法。

代碼舉例(靜態內部類實現單例模式)

public class Singleton {
    
   // 聲明為 private 避免調用默認構造方法創建對象
    private Singleton() {
    }
    
   // 聲明為 private 表明靜態內部該類只能在該 Singleton 類中被訪問
    private static class SingletonHolder {
        private static final Singleton INSTANCE = new Singleton();
    }

    public static Singleton getUniqueInstance() {
        return SingletonHolder.INSTANCE;
    }
}

Singleton 類加載時,靜態內部類 SingletonHolder 沒有被加載進內存。只有當調用 getUniqueInstance()方法從而觸發 SingletonHolder.INSTANCESingletonHolder 才會被加載,此時初始化 INSTANCE 實例,並且 JVM 能確保 INSTANCE 只被實例化一次。

這種方式不僅具有延遲初始化的好處,而且由 JVM 提供了對線程安全的支持。

11、靜態導包

靜態導包格式:import static

這兩個關鍵字連用可以指定導入某個類中的指定靜態資源,並且不需要使用類名調用類中靜態成員,可以直接使用類中靜態成員變量和成員方法

//  Math. --- 將Math中的所有靜態資源導入,這時候可以直接使用裏面的靜態方法,而不用通過類名進行調用
//  如果只想導入單一某個靜態方法,只需要將換成對應的方法名即可
 
import static java.lang.Math.;
//  換成import static java.lang.Math.max;具有一樣的效果
 
public class Demo {
    public static void main(String[] args) {
 
        int max = max(1,2);
        System.out.println(max);
    }
}

靜態導包在書寫代碼的時候確實能省一點代碼,可以直接調用裏面的靜態成員,但是會影響代碼可讀性,所以開發中一般情況下不建議這麼使用。

12、static注意事項

1、靜態只能訪問靜態。
2、非靜態既可以訪問非靜態的,也可以訪問靜態的。

13、final與static的藕斷絲連

到這裏文章本該結束了的,但是static的使用始終離不開final字眼,二者可謂藕斷絲連,常常繁見,我覺得還是很有必要講講,那麼一起來看看下面這個程序吧。

package Demo;

class FinalDemo {
    public final double i = Math.random();
    public static double t = Math.random();
}

public class DemoDemo {
    public static void main(String[] args) {

        FinalDemo demo1 = new FinalDemo();
        FinalDemo demo2 = new FinalDemo();
        System.out.println("final修飾的  i=" + demo1.i);
        System.out.println("static修飾的 t=" + demo1.t);
        System.out.println("final修飾的  i=" + demo2.i);
        System.out.println("static修飾的 t=" + demo2.t);

        System.out.println("t+1= "+ ++demo2.t );
//      System.out.println( ++demo2.i );//編譯失敗
      }
}
運行結果:
    final修飾的  i=0.7282093281367935
    static修飾的 t=0.30720545678577604
    final修飾的  i=0.8106990945706758
    static修飾的 t=0.30720545678577604
    t+1= 1.307205456785776

static修飾的變量沒有發生變化是因為static作用於成員變量只是用來表示保存一份副本,其不會發生變化。怎麼理解這個副本呢?其實static修飾的在類加載的時候就加載完成了(初始化),而且只會加載一次也就是說初始化一次,所以不會發生變化!

至於final修飾的反而發生變化了?是不是巔覆你對final的看法?關於final詳細講解博主也準備好了一篇文章

ok,文章就先到這裏了,希望這篇文章能夠幫助到你對static的認識,若有不足或者不正之處,希望諒解並歡迎批評指正!

如果本文章對你有幫助,哪怕是一點點,那就請點一個讚唄,謝謝~

參考:
《java編程思想》

如果本文對你有一點點幫助,那麼請點個讚唄,謝謝~

最後,若有不足或者不正之處,歡迎指正批評,感激不盡!如果有疑問歡迎留言,絕對第一時間回復!

歡迎各位關注我的公眾號,一起探討技術,嚮往技術,追求技術,說好了來了就是盆友喔…

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】

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

平板收購,iphone手機收購,二手筆電回收,二手iphone收購-全台皆可收購

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

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

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

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

快速搭建 SpringCloud 微服務開發環境的腳手架

本文適合有 SpringBoot 和 SpringCloud 基礎知識的人群,跟着本文可使用和快速搭建 SpringCloud 項目。

本文作者:HelloGitHub-秦人

HelloGitHub 推出的系列,今天給大家帶來一款基於 SpringCloud2.1 的微服務開發腳手開源項目——SpringCloud

項目源碼地址:

一、微服務的簡介

微服務是可以獨立部署、水平擴展、獨立訪問的服務單元。Java 中常見最小的微服務單元就是基於 SpringBoot 框架的一個獨立項目。一個微服務只做一件事(單一職責),多個微服務組合才能稱之為一個完整的項目或產品。那麼多個微服務的就需要來管理,而 SpringCloud 就是統籌這些微服務的大管家。它是一系列有序框架的集合,簡單易懂、易部署易維護的分佈式系統開發工具包。

今天介紹的開源項目就是基於 SpringCloud2.1 的腳手架,讓項目開發快速進入業務開發,而不需過多時間花費在架構搭建上,下面就讓我們一起來看看這個項目的使用吧。

二、項目結構

這裏以一個網關(gateway-admin)微服務來說明。

項目目錄結構如下圖:

目錄說明:

  1. db:項目初始化數據庫腳本。
  2. docker:Docker 配置文件目錄,將微服務打包為 docker 鏡像(image)。
  3. config:項目配置信息目錄,包括數據庫配置,消息轉化配置等。
  4. dao:數據庫操作目錄,主要對底層數據進行增刪查改。
  5. entity:項目實體類目錄。
  6. events:事件處理目錄。
  7. exception:異常處理目錄,通過面向切面處理全局異常。
  8. rest:微服務控制器目錄,也就是對外提供的接口。
  9. service:微服務業務層目錄。
  10. GatewayAdminApplication:微服務 SpringBoot 入口類。
  11. resources:項目配置文件目錄。
  12. test:項目單元測試目錄。
  13. pom.xml:maven 項目對象模型文件。

三、實戰操作

3.1 前提

  • 確保本地安裝 Git、Java8、Maven。
  • 懂一些 SpringMVC 的知識,因為 SpringBoot 是基於 SpringMVC 演化而來的。
  • 懂一些應用容器引擎 Docker、Docker-compose 的知識。

3.2 微服務架構說明

一個完整的項目,微服務架構一般包括下面這些服務:

  • 註冊中心(常用的框架 Nacos、Eureka)
  • 統一網關(常用的框架 Gateway、Zuul)
  • 認證中心(常用技術實現方案 Jwt、OAuth)
  • 分佈式事務(常用的框架 Txlcn、Seata)
  • 文件服務
  • 業務服務

3.3 運行項目

下面介紹了三種運行的方式:

第一種:一鍵運行

Linux 和 Mac 系統下可在項目根目錄下執行 ./install.sh 快速搭建開發環境。

第二種:本地環境運行

不推薦此方法,但還是簡單介紹下。

  1. 基礎環境安裝:mysql、redis,rabbitmq

  2. 環境運行:
    git clone https://github.com/zhoutaoo/SpringCloud.git #克隆項目

  3. 安裝認證公共包到本地 maven 倉庫,執行如下命令:
    cd common mvn clean install #安裝認證公共包到本地 maven 倉庫

  4. 安裝註冊中心 Nacos
    • 下載
    • 執行如下命令:

      unzip nacos-server-0.9.0.zip  OR tar -xvf nacos-server-0.9.0.tar.gz
      cd nacos/bin
      bash startup.sh -m standalone # Linux 啟動命令
      cmd startup.cmd # Windows 啟動命令
  5. 運行網關服務、認證服務、業務服務等

這裏以網關服務為例:執行 GatewayAdminApplication.java

注意:認證服務(auth)、網關服務(gateway)、組織管理服務(sysadmin)需要執行數據庫初始化腳本。

可通過 swager 接口: 測試是否搭建成功,如果能正常訪問表示服務啟動成功。

說明:

  • application.yml 文件主要配置 rabbitmq,redis, mysql 的連接信息。

    spring:
      rabbitmq:
        host: ${RABBIT_MQ_HOST:localhost}
        port: ${RABBIT_MQ_PORT:5672}
        username: ${RABBIT_MQ_USERNAME:guest}
        password: ${RABBIT_MQ_PASSWORD:guest}
      redis:
        host: ${REDIS_HOST:localhost}
        port: ${REDIS_PORT:6379}
        #password: ${REDIS_PASSWORD:}
        lettuce:
          pool:
            max-active: 300
    
      datasource:
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:${DATASOURCE_DBTYPE:mysql}://${DATASOURCE_HOST:localhost}:${DATASOURCE_PORT:3306}/sc_gateway?characterEncoding=UTF-8&useUnicode=true&useSSL=false
        username: ${DATASOURCE_USERNAME:root}
        password: ${DATASOURCE_PASSWORD:root123}
  • bootstrap.yml 文件主要配置服務基本信息(端口,服務名稱),註冊中心地址等。

    server:
      port: ${SERVER_PORT:8445}
    spring:
      application:
        name: gateway-admin
      cloud:
        nacos:
          discovery:
            server-addr: ${REGISTER_HOST:localhost}:${REGISTER_PORT:8848}
          config:
            server-addr: ${REGISTER_HOST:localhost}:${REGISTER_PORT:8848}
            file-extension: yml
        sentinel:
          transport:
            dashboard: ${SENTINEL_DASHBOARD_HOST:localhost}:${SENTINEL_DASHBOARD_PORT:8021}

第三種:Docker 環境運行

  1. 基礎環境安裝
    • 通過 docker 命令安裝

      # 安裝redis
      docker run -p 6379:6379 --name redis -d docker.io/redis:latest --requirepass "123456" 
      # 安裝mysql
      docker run --name mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root123 -d docker.io/mysql:5.7
      # 安裝rabbitmq 
      docker run -d -p 15672:15672 -p 5672:5672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin --name rabbitmq docker.io/rabbitmq:latest
    • 也可以通過 docker-compose 命令安裝

      cd docker-compose
      docker-compose up -d  #docker-compose 安裝mysql,redis,rabbitmq 服務
  2. 下載項目到本地
    git clone https://github.com/zhoutaoo/SpringCloud.git #克隆項目

  3. 安裝認證公共包到本地 maven 倉庫執行如下命令:
    cd common && mvn install #安裝認證公共包到本地maven倉庫

  4. docker-compose 運行 Nacos
    cd docker-compose docker-compose -f docker-compose.yml -f docker-compose.nacos.yml up -d nacos #啟動註冊中心

  5. 構建消息中心鏡像
    cd ./center/bus mvn package && mvn docker:build cd docker-compose #啟動消息中心 docker-compose -f docker-compose.yml -f docker-compose.center.yml up -d bus-server

需要構建鏡像的其他服務有:(注:操作和消息中心鏡像構建方式類似)

  • 網關管理服務 (gateway-admin、gateway-web)

  • 組織服務(sysadmin/organization)

  • 認證服務 (auth/authentication-server)

  • 授權服務(auth authorization-server)

  • 管理台服務(monitor/admin)

3.4 運行效果

Nacos 服務中心

所有服務都正常啟動,在 nacos 管理中心可查看,實例數表示運行此服務的個數,值為 1 可以理解為服務正常啟動。

查看後台服務

命令行執行:docker ps -a 查看 docker 所有進程信息

通過訪問微服務對外暴露的接口(swagger)檢測服務是否可用。

swager 接口地址:

測試如下圖:

四、最後

微服務(SpringBoot、SpringCloud、Docker)現在吵得特別火,它並不是一門新的技術,而是在老技術的基礎上衍生出來的,增加了一些新的特性。

教程至此,你應該能夠通過 SpringCloud 這項目快速搭建微服務了。那麼就可以開始你的微服務學習之旅了,是時候更新一下自己的技能樹了,讓我們一起來學習微服務吧!

五、參考資料

『講解開源項目系列』——讓對開源項目感興趣的人不再畏懼、讓開源項目的發起者不再孤單。跟着我們的文章,你會發現編程的樂趣、使用和發現參与開源項目如此簡單。歡迎留言聯繫我們、加入我們,讓更多人愛上開源、貢獻開源~

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】

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

收購3c,收購IPHONE,收購蘋果電腦-詳細收購流程一覽表

網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想要讓你的商品在網路上成為最夯、最多人討論的話題?

※高價收購3C產品,價格不怕你比較

※想知道最厲害的台北網頁設計公司推薦台中網頁設計公司推薦專業設計師”嚨底家”!!

讀寫分離很難嗎?springboot結合aop簡單就實現了

目錄

前言

入職新公司到現在也有一個月了,完成了手頭的工作,前幾天終於有時間研究下公司舊項目的代碼。在研究代碼的過程中,發現項目里用到了Spring Aop來實現數據庫的讀寫分離,本着自己愛學習(我自己都不信…)的性格,決定寫個實例工程來實現spring aop讀寫分離的效果。

環境部署

數據庫:MySql

庫數量:2個,一主一從

關於mysql的主從環境部署之前已經寫過文章介紹過了,這裏就不再贅述,參考

開始項目

首先,毫無疑問,先開始搭建一個SpringBoot工程,然後在pom文件中引入如下依賴:

<dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>2.1.5</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.16</version>
        </dependency>
        <!-- 動態數據源 所需依賴 ### start-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
            <scope>provided</scope>
        </dependency>
        <!-- 動態數據源 所需依賴 ### end-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.4</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
    </dependencies>

目錄結構

引入基本的依賴后,整理一下目錄結構,完成后的項目骨架大致如下:

建表

創建一張表user,在主庫執行sql語句同時在從庫生成對應的表數據

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `user_id` bigint(20) NOT NULL COMMENT '用戶id',
  `user_name` varchar(255) DEFAULT '' COMMENT '用戶名稱',
  `user_phone` varchar(50) DEFAULT '' COMMENT '用戶手機',
  `address` varchar(255) DEFAULT '' COMMENT '住址',
  `weight` int(3) NOT NULL DEFAULT '1' COMMENT '權重,大者優先',
  `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',
  `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',
  PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `user` VALUES ('1196978513958141952', '測試1', '18826334748', '廣州市海珠區', '1', '2019-11-20 10:28:51', '2019-11-22 14:28:26');
INSERT INTO `user` VALUES ('1196978513958141953', '測試2', '18826274230', '廣州市天河區', '2', '2019-11-20 10:29:37', '2019-11-22 14:28:14');
INSERT INTO `user` VALUES ('1196978513958141954', '測試3', '18826273900', '廣州市天河區', '1', '2019-11-20 10:30:19', '2019-11-22 14:28:30');

主從數據源配置

application.yml,主要信息是主從庫的數據源配置

server:
  port: 8001
spring:
  jackson:
    date-format: yyyy-MM-dd HH:mm:ss
    time-zone: GMT+8
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    master:
      url: jdbc:mysql://127.0.0.1:3307/user?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=false&useSSL=false&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
      username: root
      password:
    slave:
      url: jdbc:mysql://127.0.0.1:3308/user?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&failOverReadOnly=false&useSSL=false&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true
      username: root
      password:

因為有一主一從兩個數據源,我們用枚舉類來代替,方便我們使用時能對應

@Getter
public enum DynamicDataSourceEnum {
    MASTER("master"),
    SLAVE("slave");
    private String dataSourceName;
    DynamicDataSourceEnum(String dataSourceName) {
        this.dataSourceName = dataSourceName;
    }
}

數據源配置信息類 DataSourceConfig,這裏配置了兩個數據源,masterDb和slaveDb

@Configuration
@MapperScan(basePackages = "com.xjt.proxy.mapper", sqlSessionTemplateRef = "sqlTemplate")
public class DataSourceConfig {
    
     // 主庫
      @Bean
      @ConfigurationProperties(prefix = "spring.datasource.master")
      public DataSource masterDb() {
  return DruidDataSourceBuilder.create().build();
      }

    /**
     * 從庫
     */
    @Bean
    @ConditionalOnProperty(prefix = "spring.datasource", name = "slave", matchIfMissing = true)
    @ConfigurationProperties(prefix = "spring.datasource.slave")
    public DataSource slaveDb() {
        return DruidDataSourceBuilder.create().build();
    }

    /**
     * 主從動態配置
     */
    @Bean
    public DynamicDataSource dynamicDb(@Qualifier("masterDb") DataSource masterDataSource,
        @Autowired(required = false) @Qualifier("slaveDb") DataSource slaveDataSource) {
        DynamicDataSource dynamicDataSource = new DynamicDataSource();
        Map<Object, Object> targetDataSources = new HashMap<>();
        targetDataSources.put(DynamicDataSourceEnum.MASTER.getDataSourceName(), masterDataSource);
        if (slaveDataSource != null) {
            targetDataSources.put(DynamicDataSourceEnum.SLAVE.getDataSourceName(), slaveDataSource);
        }
        dynamicDataSource.setTargetDataSources(targetDataSources);
        dynamicDataSource.setDefaultTargetDataSource(masterDataSource);
        return dynamicDataSource;
    }
    @Bean
    public SqlSessionFactory sessionFactory(@Qualifier("dynamicDb") DataSource dynamicDataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setMapperLocations(
            new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/*Mapper.xml"));
        bean.setDataSource(dynamicDataSource);
        return bean.getObject();
    }
    @Bean
    public SqlSessionTemplate sqlTemplate(@Qualifier("sessionFactory") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
    @Bean(name = "dataSourceTx")
    public DataSourceTransactionManager dataSourceTx(@Qualifier("dynamicDb") DataSource dynamicDataSource) {
        DataSourceTransactionManager dataSourceTransactionManager = new DataSourceTransactionManager();
        dataSourceTransactionManager.setDataSource(dynamicDataSource);
        return dataSourceTransactionManager;
    }
}

設置路由

設置路由的目的為了方便查找對應的數據源,我們可以用ThreadLocal保存數據源的信息到每個線程中,方便我們需要時獲取

public class DataSourceContextHolder {
    private static final ThreadLocal<String> DYNAMIC_DATASOURCE_CONTEXT = new ThreadLocal<>();
    public static void set(String datasourceType) {
        DYNAMIC_DATASOURCE_CONTEXT.set(datasourceType);
    }
    public static String get() {
        return DYNAMIC_DATASOURCE_CONTEXT.get();
    }
    public static void clear() {
        DYNAMIC_DATASOURCE_CONTEXT.remove();
    }
}

獲取路由

public class DynamicDataSource extends AbstractRoutingDataSource {
    @Override
    protected Object determineCurrentLookupKey() {
        return DataSourceContextHolder.get();
    }
}

AbstractRoutingDataSource的作用是基於查找key路由到對應的數據源,它內部維護了一組目標數據源,並且做了路由key與目標數據源之間的映射,提供基於key查找數據源的方法。

數據源的註解

為了可以方便切換數據源,我們可以寫一個註解,註解中包含數據源對應的枚舉值,默認是主庫,

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
@Documented
public @interface DataSourceSelector {

    DynamicDataSourceEnum value() default DynamicDataSourceEnum.MASTER;
    boolean clear() default true;
}

aop切換數據源

到這裏,aop終於可以現身出場了,這裏我們定義一個aop類,對有註解的方法做切換數據源的操作,具體代碼如下:

@Slf4j
@Aspect
@Order(value = 1)
@Component
public class DataSourceContextAop {

 @Around("@annotation(com.xjt.proxy.dynamicdatasource.DataSourceSelector)")
    public Object setDynamicDataSource(ProceedingJoinPoint pjp) throws Throwable {
        boolean clear = true;
        try {
            Method method = this.getMethod(pjp);
            DataSourceSelector dataSourceImport = method.getAnnotation(DataSourceSelector.class);
            clear = dataSourceImport.clear();
            DataSourceContextHolder.set(dataSourceImport.value().getDataSourceName());
            log.info("========數據源切換至:{}", dataSourceImport.value().getDataSourceName());
            return pjp.proceed();
        } finally {
            if (clear) {
                DataSourceContextHolder.clear();
            }

        }
    }
    private Method getMethod(JoinPoint pjp) {
        MethodSignature signature = (MethodSignature)pjp.getSignature();
        return signature.getMethod();
    }

}

到這一步,我們的準備配置工作就完成了,下面開始測試效果。

先寫好Service文件,包含讀取和更新兩個方法,

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    @DataSourceSelector(value = DynamicDataSourceEnum.SLAVE)
    public List<User> listUser() {
        List<User> users = userMapper.selectAll();
        return users;
    }

    @DataSourceSelector(value = DynamicDataSourceEnum.MASTER)
    public int update() {
        User user = new User();
        user.setUserId(Long.parseLong("1196978513958141952"));
        user.setUserName("修改后的名字2");
        return userMapper.updateByPrimaryKeySelective(user);
    }

    @DataSourceSelector(value = DynamicDataSourceEnum.SLAVE)
    public User find() {
        User user = new User();
        user.setUserId(Long.parseLong("1196978513958141952"));
        return userMapper.selectByPrimaryKey(user);
    }
}

根據方法上的註解可以看出,讀的方法走從庫,更新的方法走主庫,更新的對象是userId為1196978513958141953 的數據,

然後我們寫個測試類測試下是否能達到效果,

@RunWith(SpringRunner.class)
@SpringBootTest
class UserServiceTest {

    @Autowired
    UserService userService;

    @Test
    void listUser() {
        List<User> users = userService.listUser();
        for (User user : users) {
            System.out.println(user.getUserId());
            System.out.println(user.getUserName());
            System.out.println(user.getUserPhone());
        }
    }
    @Test
    void update() {
        userService.update();
        User user = userService.find();
        System.out.println(user.getUserName());
    }
}

測試結果:

1、讀取方法

2、更新方法

執行之後,比對數據庫就可以發現主從庫都修改了數據,說明我們的讀寫分離是成功的。當然,更新方法可以指向從庫,這樣一來就只會修改到從庫的數據,而不會涉及到主庫。

注意

上面測試的例子雖然比較簡單,但也符合常規的讀寫分離配置。值得說明的是,讀寫分離的作用是為了緩解寫庫,也就是主庫的壓力,但一定要基於數據一致性的原則,就是保證主從庫之間的數據一定要一致。如果一個方法涉及到寫的邏輯,那麼該方法里所有的數據庫操作都要走主庫

假設寫的操作執行完后數據有可能還沒同步到從庫,然後讀的操作也開始執行了,如果這個讀取的程序走的依然是從庫的話,那麼就會出現數據不一致的現象了,這是我們不允許的。

最後發一下項目的github地址,有興趣的同學可以看下,記得給個star哦

地址:

參考:

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理【其他文章推薦】

USB CONNECTOR 掌控什麼技術要點? 帶您認識其相關發展及效能

※高價3c回收,收購空拍機,收購鏡頭,收購 MACBOOK-更多收購平台討論專區

※評比前十大台北網頁設計台北網站設計公司知名案例作品心得分享

收購3c瘋!各款手機、筆電、相機、平板,歡迎來詢價!

※智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

中國購物中心需要補的課

  碩大一張PPT显示在大屏幕上,上面只有兩張圖片和很少的文字。

  一張圖片是中國的餐飲店,圖片配文是,中國風靡一時的網紅潮店。即使此刻你看不到這張照片,也可以想象出來中國大街小巷蜂擁出現的那種店鋪,小清新、INS風,穿着入時的年輕人拍得出美美的照片發社交媒體,至於食物的味道,其實沒人太在意。

  另一張是日本的餐飲店,圖片配文是,日本亘古長青的百年老店,言問糰子店齡160年、村田眼鏡鋪店齡403年、榛原和紙店店齡212年。

  站在演講台上的是一位日本人,住友商事中國生活關聯產業部門總經理大野隆平,他演講的題目是《用心即是創新》,演講內容是商業運營的一些基本法則,比如在購物中心中引入自然光線,注意退台和步道的設計,讓顧客的遊覽感受更好等等,台下坐着數百位中國購物中心各領域的從業者。

  這是中購聯中國購物中心國際論壇第十七屆年會上的一幕,在悉數登台的40多位嘉賓的發言中,多的是比大野隆平的演講炫目的科技和資本故事,就像我們日常生活中習以為常的那樣——越來越便捷的支付方式、越來越清晰的用戶畫像,越來越拉風的推廣活動,這是中國商業流通領域正在發生的事實,毫無疑問,速度真的很快,並且很有可能在彎道超車。

  來自商務部流通發展司的報告說,2017年中國商品零售額為32.7萬億元,同比增長10.2%,中國商品零售額增速仍處於較高水平,分別比美國、歐盟、日本高5.7、6.1和8.3個百分點。

  這樣看來,大野隆平的演講過時了嗎?也許是的。我最近接觸的兩位業內人士從不同的側面證明了這一點。

  一位是知名購物中心的餐飲招商人員,他在北京的深巷裡搜尋了一家地道的日式甜品店,老闆在日本餐飲業工作多年,寫過很多本有關和菓子的書。

  後來,甜品店在購物中心落位時,他曾經給這位老闆提過一些裝修方面的建議,比如拍照要好看,但被這位老闆無情地拒絕了,甚至可以說,樸實的店面就是這位老闆篩選真正食客的小心機。

  “我告訴你結果吧,這家店開了沒多久就倒閉了。”招商人士講完這個故事,唏噓匠心店鋪的生不逢時,但他也無法指責“顏值即真理”的消費需求。

  另一位業內人士是一家私房菜的老闆,巧的是,因為北京治理穿牆打洞,她也接受了購物中心遞出的橄欖枝。然而,比衚衕穩定的環境和豐富的客流,並沒有讓問題變得簡單。

  140多平方米的小面積,堅持每天採買食材製作,無添加增味劑,不使用外購半成品,連鹽都是進口的希臘海鹽……儘管店鋪高居大眾點評榜前列,但這位老闆一直在懷疑進入商業體的決定。

  三分之一的面積留給不直接產生效益的廚房,在購物中心高昂的租金成本且是每年固定增長的成本壓力下,這樣做是一件任性的事,絕大多數餐飲品牌完全使用中央廚房配送是更符合商業競爭規則的理性選擇。

  這位老闆說,我也不知道商業有沒有錯,但是,偌大的市場里沒有可以長期生存下來的餐飲商戶,所有的店家為了壓縮成本竭盡全力,為了博眼球的推廣不拘一格,為了滿足客人的新鮮感推出新菜品天馬行空。真正做菜的人會被額外誇讚,貫其名曰“匠人”,若是商家,人後被譏諷不懂商業,人前被吹捧“有情懷”。

  你看,匠心、匠人、情懷,這些詞在商業面前是那麼高貴而脆弱,因此,大野隆平的演講題目《用心即是創新》,在中國的購物中心環境里,有些曲高和寡。

  我們的創新有着鮮明的特點,比如,我們擅長用科技的力量挖掘消費者的購買潛力,你買了Armani的唇釉,說不定也要買lululemon的瑜伽服;買了尿不濕,肯定要買早教課,刷臉就能買。

  這當然是了不起的成績,近些年,中國購物中心的運營水平已經越來越受到國際的認可。舉個簡單的例子,對凱德集團的員工來說,去東南亞的購物中心參觀學習,曾經可以算是一項員工培訓福利,現在除了泰國幾個高大上的購物中心外,大多數東南亞的購物中心已經沒太大學習上的吸引力了。行業相應的變化是,中國第三方管理機構在東南亞購物中心裏輸出管理正蔚然成風。

  如果把生產視為商品流通的第一個環節,中國製造的能力毋庸置疑,如果把挖掘消費潛力視作商品流通最後一個環節,中國的科技助力也讓世界刮目相看,但是,在兩個環節中間,其實我們還有很大的短板需要補足。

  同日本相比,日本購物中心對店員服務能力的培訓和考核,有着非常細緻和明確的標準。產品的研發能力以及供應鏈管理能力也都是肉眼看不到的內功,很多日本企業以能降低生產流通各環節成本,讓利給消費者為榮。這也是中國遊客到日本購物獲得高滿足感的原因,中國“匠心”類品牌生存空間應該也在這裏。

  同歐美的購物中心相比,我們的短板同優勢一樣明顯,缺乏資產管理的思維,沒有建立起清晰的投資回報概念,資產的流通價值對社會的意義沒有充分體現出來。

  從數據上看,儘管中國的商品零售額增幅很大,但增速也在明顯降低,國家統計局2017年的數據是,近五年年均下降0.7個百分點。

  或許,上面的短板,正是可挖掘的潛力所在。

(文章來源:經濟觀察網)

(責任編輯:DF078)

【其他文章推薦】

實木地板、海島型地板、耐磨地板怎麼挑? 木地板三倍價差的秘密!!

※新屋購入,尋找台中室內設計師?是否可先免費估價丈量?

※挑好磚一點都不難!馬賽克磚挑選眉角小撇步!

※想知道北部最多平價、庫存出清的家具工廠推薦在哪裡?

※想知道大型演唱會、知名劇場的舞台設計是由哪位設計師一手操刀嗎?

書房是最好的學區房

  書房是一輩子的事,可代代相傳;學區房則是九年義務教育的事,所以買賣頻繁。

  在現代漢語的語境中,書房,學區房,在認知上,各自具有明確的內涵與外延,不易也不容混淆。本文題意所要闡說的,不是書房等於學區房,而是書房可謂是最好的學區房。

  這些年,我們不論是到國內或國外的外出旅遊,或是同城游時,每到一地,參觀親友同學們的住房,尤其是有人喬遷之喜時,到家坐坐,看房看廳看花園(如果有的話),已是一種流行的風尚。改革開放四十年後的今天,我們很多人看得見摸得着也享受到的一大碩果,就是住房的大改善,一套住房有兩廳兩洗手間三間房的,近乎是標配,有些套房有三個以上洗手間,四五間房的,也不是稀罕物。

  但是,多多少少看了一些房子后,我倒是有一點發現,不論是在這些有三間或五間房、有兩個或三個洗手間的套房裡,有一間書房的,雖不是稀罕物——比如在教授研究員們的房子里,但也不是常有的配置。那些沒有書房的套房裡,有些還不乏琳琅滿目可亮瞎人眼的室內擺設,有時髦或不那麼時髦的大大小小的古董、掛畫與玩藝,但卻見不着一本書一本雜誌。

  對此,或有人會說,這沒什麼啊,都数字時代啦,那麼多电子書、电子報刊,還有無數电子版的文章,還需要讀紙質書嗎?還需要書房嗎?房價多貴啊,紙質書也不便宜。

  是的,這些話,貌似有七分理。只是,我們現在的閱讀還沒有100%地進入全电子閱讀的年代,而且我相信,這個年代也不會到來,紙質書在未來的存在,也許就如馬車在今天汽車時代的存在一樣,是鳳毛麟角的,但肯定會長久地存在下去的,紙質書、書房以及它們所象徵的書香門第,不會完全被数字時代的电子化浪潮全部淹沒,雖難免被邊緣化,卻還會因為物以稀為貴,紙質書和書房,隨時間流逝,越來越會成為一種精神乃至經濟上的奢侈品的。

  所以,如果可以選擇,我是更願意呆在有書房也有好書的套房裡面的。

  很幸運的是,一是我自小學時代起,生活環境就沒有離開父親的書房。二是我自從上世紀80年代中正式參加工作也就是到廣西大學任教起,在過去的數十年時間里,除了離家外出的日子,我就能一直居住在有我自己書房的房子里,最簡陋的,是在讀博研時,康樂園裡只有一間房,那也就是書房加卧室加工作室了,我的書——已足夠到讓我基本不要跑圖書館書——伴着我,朝朝暮暮,日出日落,一直至今。

  我的書房情結,源自於父親與父親的書房。父親是愛書的人,書房裡藏書豐富,大部頭的書包括大藏經、道藏和二十五史(含《清史稿》)等,別的書刊,僅說一隅,在我高考的前幾年,按我的需求,父親專門為我訂閱了《文史知識》《歷史大觀園》和《地理知識》等刊物,其中的知識點尤其是一些學習方法論的闡述,直接助推我考上了重點大學,我從理科班的鬱悶到文科班的如魚得水,轉變尤為明顯,作為南寧五中這家普通中學在當年唯一考上重點大學的考生,成績多少也是有點杠的。

  現在好的學區房,處於與名校相伴的好地段,名校有好的老師,有來自於優渥家庭的素質較好的生源,有好的軟硬教學環境,自然令萬千適齡孩童們的家長們趨之若鶩,這是一種焦慮中混雜着理性的選擇。比較來看,書房是一輩子的事,可代代相傳;學區房則是九年義務教育的事,所以買賣頻繁。價值上看,學區房優於書房,好的學區房能讓孩子接受比較好的中小學教育。意義上論,書房勝於學區房,因為書房多少會讓孩子在心田裡,自小埋下讀好書好讀書乃至善用書的優良種子,他日或能長成參天大樹。

  餘生也早,所以我平生沒有住過什麼學區房。因為有父親的書房,我的高考是考進了當年重點大學(現在985)的中山大學;因為有我的書房,我的博士研究生依然是在中山大學就讀的。就我而言,我有相當的理由或感慨,道一句,書房是最好的學區房。

(文章來源:證券時報)

(責任編輯:DF353)

【其他文章推薦】

※居家隱形鐵窗安裝施作經驗分享

※純客製手工沙發,古典沙發,專業首選沙發工廠打造屬於您的居家品味!

※解決漏水、壁癌危機,找尋新竹舊屋翻新專業修繕專家

※分享木質地板DIY自行施工教學影片

※想要打造簡約、淡雅兼且收納空間的小資房,台中室內設計推薦哪一家?

自動駕駛離現實到底還有多遠?

  9月22日,武漢市向3家企業頒發了自動駕駛商用牌照,這一事件之所以吸睛,在於牌照的可商用屬性。按照官方給出的定義,獲牌企業不僅可以在公開道路上進行載人測試,也可以進行商業化運營。在此之前,國內城市發放的自動駕駛牌照多為測試牌照。

  武漢的超前之舉令人關注,但真正的自動駕駛離現實還有很長的路要走。

  場景美好硬件跟上

  不妨設想一幅自動駕駛的場景:你正在自動駕駛汽車中休息,亦或正在車內看一檔綜藝節目,這個時候,車輛可以自動識別紅綠燈、指示牌等各類路況信息,並相應做出直行、剎車、變道等決策,無需你進行任何手動操作。想象中的場景十分美好,但自動駕駛在給人們的生活帶來便利的同時,安全仍然是最重要的底線。聰明的車、智慧的路以及強大的網是自動駕駛最重要的三個環節,只有每個環節之間相互協同、實現高度的步調一致,才能保證自動駕駛的安全性。

  首先來看“車”。汽車實現智能網聯是自動駕駛的關鍵基礎,只有具備了網聯功能,車輛在行駛過程中,才能對道路上的同伴進行識別,減少剮蹭、撞車等意外情況的發生。但毫無疑問的是,在當前龐大的汽車保有量中,具備智能網聯功能的車輛佔比無疑是很低的。如何在新出廠車輛中快速推廣智能網聯功能?如何對存量汽車進行網聯化改造?智能網聯汽車的全社會佔比何時達到一個可觀的程度?這些都決定着自動駕駛何時能夠真正實現。

  其次再看“路”。汽車的網聯化能夠實現車車協同,但車輛還需要對路況信息進行實時的識別,實現車路協同。如何將道路上的信息(如紅綠燈的變動、指示牌信息等)傳遞給車輛就顯得十分重要了,如果沒有道路的智能化改造,上了路的網聯汽車也只是一隻“無頭蒼蠅”。即使不考慮正在規劃中的公路網,經過幾十年的發展,中國的公路現有公里數也十分巨大,若要真正的實現自動駕駛,道路的智能化改造將是一項浩瀚的工程,絕非一日之功。信息的傳遞是車車協同、車路協同的基石,有了聰明的車、智慧的路,自動駕駛還需要一張強大的網,以完成車輛行駛中的各類信息交互。此時,網絡的功能好比粘合劑,將車車、車路聚集在了同一個空間。

  最後就“網”而言,5G被視為解決車車通信、車路通信的殺手鐧。如前所述,安全是自動駕駛的底線,自動駕駛車輛需要對任何突髮狀況做出最快的反應,5G的低時延特性剛好能夠保證信息傳遞的時間在安全範圍內。當前,國內的5G建設已經如火如荼,從車、路、網三方面的情況來看,網絡的推進速度無疑是最快的,但如果沒有最基礎的車與路,自動駕駛仍然不能奏出響亮的樂章。此外,由於自動駕駛是AI技術與製造業結合的一個新興領域,因此還需要配備一套完善的AI算法,對實時狀況進行處理、對過往行駛狀況進行經驗總結,並且在一系列的經驗總結后提高自動駕駛能力。這就像一位新入行的司機,只有長期的駕駛經歷才可能豐富其駕駛技巧。

  分級發展前景光明

  在武漢市發布的有關此次自動駕駛商用牌照的信息中,還有一個細節值得關注,那就是,車輛的行駛雖然實現了自動,但並非“無人”,仍需要配備安全員以應對緊急情況。實際上,自動駕駛也分為多個級別,目前國內多為L3級別,即有條件的自動駕駛,而非完全無人的高度自動化的、或者全自動化的無人駕駛。

  當然,上面的討論也絕非“潑冷水”,自動駕駛的前景依舊光明。從當前的行業格局來看,傳統老牌車廠、互聯網巨頭、汽車零部件企業、地圖提供商等都已先後入局,自動駕駛領域也處在百家爭鳴的階段。

  雖然自動駕駛尚不成熟,但很多城市都已經在政策方面向自動駕駛企業拋出橄欖枝。從地方發展經驗來看,貴州的大數據、江西的VR/AR都是當地的經濟結構轉型的重要標籤,在助力地方經濟結構轉型中貢獻頗多。如今,自動駕駛已成為各地追逐的新風尚,武漢在自動駕駛商用上的主動作為或許正是一個好的開始。

(文章來源:證券時報)

(責任編輯:DF353)

【其他文章推薦】

木地板哪有幾種款式?該如何選購適合的材質呢?

※屬於你的居家品味,家具訂製工廠推薦與心得分享

※想知道舞台設計公司幕後工作人員工作祕辛嗎?

※想知道更多隱形防盜窗Q&A,都在生活知識王!!

※居家裝潢選購心得,沙發訂做推薦,手工沙發推薦CP值破表平價傢俱!

網約車“跑馬圈地” 傳統出租車路在何方?

  在業界人士看來,在網約車強勢發展的目前,出租車需要做的是儘快改革,實現與網約車的共存

  “10年前,開出租車非常賺錢,每月收入過萬元,但10年後,出租車司機的月收入不但沒有漲反而還急劇下降,扣掉份子錢、修車費、汽油費等之後,每月只能賺5000元。”一位出租車司機向《證券日報》記者抱怨,自從網約車發展起來后,出租車司機的日子越來越不好過了。

  有出行行業人士向《證券日報》記者分析,網約車出現后,有一些開出租車的司機轉開網約車去了,導致部分出租車閑置。

  世界資源研究所中國可持續交通項目主任劉岱宗向《證券日報》記者表示:“新的互聯網+公司也好,科研結構也好,對未來行業的判斷就是傳統出租車如果不‘洗心革面’、迎接新的行業變革,未來的市場份額會越來越小。”

  數據显示,網約出租汽車客運量占出租汽車總客運量的比重從2015年的9.5%提高到2018年的36.3%。那麼,面對來勢洶洶的網約車,出租車的未來會駛向何方呢?

  部分出租車

  遭閑置

  一位開了10多年出租車的老司機向《證券日報》記者表示,“現在開出租車不像以前那樣賺錢了,特別是越來越多的網約車出現后,現在路邊等車的人都是通過手機軟件約車,出租車只能空跑,油費只能自己出。”

  有出租車司機向記者表示:“受網約車的衝擊,出租車的生意減少了。尤其是網約車用返還紅包等方式招攬客戶時,出租車司機的日子最為難過。再加上現在城市越來越堵,一旦遇到堵車就會虧本,雖然車費會變高一些,但還是不划算。”

  不少出租車司機轉開網約車。

  “南京市就有許多出租車司機退租改開網約車了,因為有的司機跑出租不但不賺錢反而會虧本。”有出租車司機向記者表示,“一天開車超過12個小時,但賺的錢大半都要交份子錢,而開網約車則不用交。”

  事實上,隨着部分出租車司機改開網約車,導致大量出租車被閑置。

  此前有相關報道稱,在南京市多處空置場地上,停放有大批量被退租的出租車。

  更有南京市客管處相關人士向媒體介紹,自2017年初以來,南京市傳統出租車行業“退車潮”愈演愈烈,截至2018年3月中旬,退車比例佔總運營數的四分之一。其中有些甚至是新車,因為招不到駕駛員,或是駕駛員臨時變卦退租而停運。

  中國出租汽車暨租賃協會副會長鄭小平向《證券日報》記者表示,“互聯網乘虛而入是不可逆轉的發展趨勢。‘互聯網+出行’模式對出租汽車司機帶來巨大影響,2017年,全國被調查的137萬輛出租汽車中,全程開啟打車軟件的司機佔59.7%”。

  事實上,出租車大量廢棄現象在國外也有出現。

  世界資源研究所中國可持續交通項目主任劉岱宗向《證券日報》記者表示,“紐約在2014年5月份的時候,出租車牌照一張能賣到132萬美金,但是現如今只有高峰時的一半。甚至還有一部分招不到司機,導致一些出租車公司的車輛閑置。如果我們不做好對新興業態的準備的話,它對行業帶來的災難性風險就會出現。”

  劉岱宗表示,共享出行吸引了非常多的新興企業,導致傳統出租汽車行業面臨很大的壓力。

  其舉例稱,洲際集團、希爾頓等都是非常有名的酒店,他們經過了一個世紀的發展才形成了大概65萬個房間的規模。但共享經濟的出現,讓Airbnb只用了4年時間就走完了傳統酒店業一個世紀所走的歷程。“同樣,Uber、Lyft只用了大概6年的時間就能佔到整個出租車行業市場份額的39%;滴滴僅用50個月就達到了日單量2000萬單的規模;摩拜用了11個月達到2000萬單的成績。”

  “當共享經濟跟交通領域結合起來,將迅速地形成市場力量。”劉岱宗介紹稱,“Uber出現后僅3年,洛杉磯出租車載客量就下降了30%。”

  在網約車大肆“跑馬圈地”的同時,傳統出租車行業受到了前所未有的衝擊。

  “網約車興起后,有很多聲音在討論出租車會不會消亡、會不會被網約車所取代。事實上,初期,大部分網約平台發展的初衷和目標就是取代出租車。”嘀嗒出行CEO宋中傑向《證券日報》記者表示。

  但其認為,出租車永遠不會消失,“城市的道路格局決定了出租車的必要性,我以前在上海出差,在任何一個地方都可以隨手打車,但是現在,我發現越來越多的道路不允許停車,你會發現,繁華的地區、CBD,打出租車的用戶體驗比打網約車好很多。雖然迅游出租車面臨一些挑戰,但永遠不會消失”。

  業內建議

  出租車價格市場化

  共享經濟下的網約車有着不可忽視的力量,而被搶佔市場后的出租車又該如何做呢?

  鄭小平認為,“由於出租車司機工作量大,在付出多與收入低的矛盾下,一些地方曾經出現過‘罷運事件’,歸根結底還是行業本身處在封閉環境中,無法適應市場經濟下的出行生態環境。”

  對於出租車的現狀,交通運輸部公路科學研究院公路交通發展研究中心主任虞明遠向《證券日報》記者分析稱:“從當前來看,出租車的價格機制還不完善,包括定價機制不合理,調整機制僵化,調價的周期長,程序複雜等問題已經成為制約傳統出租汽車轉型升級最主要的因素。”

  有出租車司機表示:“一個上午就做了100多元的生意”。而在同樣的時間段,網約車司機卻“做了300多元的生意,另外還有其他獎勵”。

  收入差距的加大使得出租車越來越不被司機“待見”,轉而投向網約車的“懷抱”,而為了留住出租車司機,政府相關部門開始研討出租車改革問題。

  “關於規範經營權管理方面,截至目前,全國有70%以上的城市已經實現了期限制,其中有14個省、70多個城市已經進行了一些經營權有償使用費的清退。”虞明遠表示。

  虞明遠提議,應加快推動出租車運價不納入政府定價的聽證目錄,逐步放鬆管制,為由政府定價向政府指導價過渡創造積極作用;此外,還需積極爭取地方政府支持,建立車動態調整的運價水平和結構,探索推廣使用新型計價、計程設備,為靈活調整運價創造條件。

  據了解,為改善出租車司機收入,深圳市將承包金從原先的由政府統一制定,改成協會與企業、司機共同協定、動態調整。

  虞明遠向記者表示,“改革后,深圳市燃油車每個月份子錢降低了1000元-2000元。此外,杭州市也將整個出租車企業的承包金下調了逾30%。廣州市結合車載終端升級改造,研發了司企收入的清分結算系統,嘗試‘固定投入成本攤銷+營運收入提成’的新型收入分配,抽樣調查显示,在這樣的清分模式下,司機的收入大概提高了5%至8%。”

  參考紐約出租車改革來看,其通過建立多宿主平台的方式實現司機流轉。“紐約建立了多宿主平台,可以加快出租車掛靠多個運營公司,讓這種掛靠能夠流轉起來,公司之間就會有更多的競爭壓力。”劉岱宗如是說。

  出租車聯網

  成大勢所趨

  目前,出行行業業內人士普遍認為,傳統出租車行業應該實現全面聯網。

  有長期乘坐網約車的用戶向記者表示:“上下班和趕飛機的時候,感覺用網約車打車更方便一些,至少能保證有車坐。有一次我趕飛機,沒有用打車軟件,想打出租車,結果等了20分鐘才打上,這麼看來,還是用軟件打車更靠譜。”

  “單一模式下,線下運營這一落後的技術導致出租汽車行業日益落後於信息時代。”鄭小平認為,“互聯網+出行”對出租車行業提出了一系列的新要求,助互聯網技術將碎片化的資源整合起來,發揮規模效應,達到信息共享,是出租汽車行業改革的大方向。

  鄭小平向記者談道:“截至2018年底,全國出租汽車保有量為138.89萬台,同比下降3.8%,日服務5800萬次,空駛率在45%左右。與此相反,打車軟件及互聯網專車使用資源得到了充分的利用。數據表明,截至2018年12月底,中國打車App賬戶規模達到4.72億個,打車軟件覆蓋了400多個城市。”

  事實上,除了滴滴外,在國內各地區不斷有新的打車軟件平台推出,而大幅度的折扣也確實吸引了大量的乘客使用。

  據網約車用戶李女士向《證券日報》記者表示,“此前有段時間,有新的網約車平台推出,折扣力度很大,從家到單位只用4元就可以,那時候,我天天用網約車軟件打車。”

  那麼,在眾多新的網約車平台進入市場后,傳統出租車又該如何做呢?

  交通運輸部運輸服務司城市交通管理處處長孟秋向《證券日報》記者表示,可以利用網上約車、电子支付、在線服務評價、信息化管理等手段,加快出租車與互聯網技術的深度融合和合作應用。探索推動新型的司機與企業分配相關利益的形式,提高傳統行業競爭力和服務水平,鼓勵各地組織引導出租車經營者通過共同建立信息服務平台,或者與現有的電商平台技術合作等方式,整合區域內的出租車運力信息、資源,促進出租車運輸和營運的效率和服務質量水平的提高。

  經過各方面的探討后,業界普遍認為,傳統出租車可以仿效網約車的聯網模式,提高服務質量,建立評價平台,只有這樣,才能與網約車共存。

  《證券日報》記者採訪多位網約車用戶發現,有部分用戶使用網約車是因為“價格便宜”;但也有用戶向記者反映,“我比較喜歡打專車,主要是因為它比較乾淨,而且服務好,還有礦泉水免費供應,而有的出租車感覺比較臟。”

  針對上述用戶的不同要求,西安市開始對出租車進行整改。

  據西安市交通運輸局出租車管理處處長王健向《證券日報》記者介紹,“2018年以來,西安市啟動了出租汽車車型升級換代工作,決定將原有的雙燃料出租車全部升級為全新的甲醇燃料汽車和新能源純電動汽車,並以此為契機擴大出租車市場供給,提高市民的乘車體驗。”

  王健表示,更換后的出租車全部安裝了智能終端設備,配備四路高清攝像頭,同時,還與嘀嗒出行共同推出了全國首個出租車智慧碼,整合了車輛、駕駛員、銀行賬戶、移動支付、計價器、實時定位等多維數據,乘客一次掃碼即可實現費用預估,形成實時查詢分享、服務評價與投訴、聚合支付、使用多種出行工具等功能,尤其是線上服務評價體系的建立,使得優秀駕駛員可獲得嘀嗒平台優先派單和服務獎勵,並作為行業內評優評先的參考條件,解決了長期以來制約行業發展的駕駛員服務水平無法與收入掛鈎的問題。

  宋中傑向《證券日報》記者表示,未來,將在西安、瀋陽等出租汽車轉型升級先行先試城市取得試點經驗的基礎上,在全國出租汽車行業推廣“三化工程”,即数字智能化、網約化、線上線下一體化。

  宋中傑表示,“三化”最核心的是後面的技術、數據、模式,“現在提的網約化、数字智能化、線上線下一體化,也是基於技術、數據和模式這個大基礎之上的。而傳統巡遊車的轉型升級,是綜合的系統化工程,必須在乘客、司機、公司、政府這四方面,實現全方位的體驗、服務和管理的提升,才能夠推動整個傳統巡遊車深化改革。”

  不過值得注意的是,在《證券日報》記者詢問多位網約車用戶時發現,在涉及晚間打車安全性時,這些網約車用戶都會選擇打出租車。“如果太晚的話,我就不打網約車了,還是打出租車比較安全一點。”有網約車用戶如是說。

  未來出行行業

  會怎樣?

  雖然業內各界給出了不同的建議和措施,但未來的出行行業到底會怎樣發展還未可知。

  “網約車有相對比較活躍的模式,結合比較好的算法可以大幅提高效率。”劉岱宗舉例稱,2018年《自然》雜誌封面曾刊登麻省理工學院最新的研究成果,把目前相當於拼車的這種模式進行算法的優化之後,測算出在美國紐約曼哈頓地區,只需要3000輛在網約平台上發起訂單的拼車或者合乘車,就可以替代13000輛傳統出租車。

  另據ITF(國際交通論壇)分析稱,如果出租車也是無人駕駛的話,那麼,將有80%的私人小汽車出行可以轉到共享出行裏面。

  據悉,Google旗下的Sidewalk做了一個未來出行的分析稱,從現在多倫多整體的出行情況來看, 54%是私人汽車,但是在Google未來社區的出行模式打造裏面,只有15%留給了私人小汽車,共享出行和出租車從原來的2%增加到10%。

  從上述分析可見,出行行業的未來有着眾多的不確定性,而在業界人士看來,在網約車強勢發展的目前,出租車需要做的就是儘快改革,實現與網約車的共存。

  事實上,對於網約車和出租車新老業態如何雙向互濟、良性互動、融合共生的問題,包括交通運輸部在內的各界相關人士都在試圖通過改革找到一條出路。

  據劉岱宗分析:“網約車平台其實有助於提高出租車車輛利用效率,通過分析可以看到,在早上8時到下午18時之間,網約平台可以提高出租車的載客效率達15%。”

  不過,鄭小平認為:“網約車經營模式是與汽車租賃公司以及第三方勞務公司合作,由專車公司在整合資源后與乘客建立信息通道,滿足乘客個性化出行要求,而出租車有嚴格的總量控制和運價管制,兩者在競爭中不處在同一起跑線,不少城市將網約車納入合法體系的同時,出租車行業改革遲遲未動,更凸顯了出租車和網約車的矛盾。”

  在競爭條件不平等的情況下,傳統出租車行業要如何應對網約車的衝擊呢?

  據了解,在網約車興起之後,各國對網約車都有着不同的監管措施。如牌照發放、里程數計算、價格制定等皆有着一定限制。

  “我們要探索網約車的監管,沒有網約車監管體系的話,傳統出租車行業很難跟網約車進行競爭。”劉岱宗表示,網約車跟傳統出租車經常會有惡性競爭,特別是在用車需求非常集中的地方,比如CBD核心區、機場、火車站、賓館、公共交通樞紐附近。以紐約為例,其在建立聚合平台以後,推出差異化的牌照,這類網約車有些只能在高峰時期、運力不足的時候才能接活,有些只能負責機場火車站等地派單。通過差異化牌照讓傳統的出租車跟網約車盡量能夠和諧共處。

  劉岱宗舉例稱,聚合平台主要用於監管,這個平台是通過特許經營,可能並不僅僅是一家,但是它能夠使用統一的標準化的API(數據接口)。“聚合平台是紐約可以在後期進行網約車管理的最重要的手段。紐約開放數據是非常重要的一點,包括傳統出租車數據以及新型網約車的數據,它是全美甚至全球第一個通過法律固定下來必須開放數據的,不開放是違反法律的。”

  虞明遠認為,長期來看,出行行業出租車與網約車應該是長期共存。所以,在改革策略上,可以採用“一松一緊”。出租車主要以鬆綁為主,網約車以規範為重。從改革路徑上為營造出租車的深化改革營造更好的市場環境。

  “我們建議,要以統一準入條件,駕駛員從業資格管理統一;轉變價格管理方式,政府定價改為指導價;發揮信息化的手段,利用信息技術來提升服務質量作為重點。”虞明遠如是說。

  在業界對網約車和出租車兩者共存提出設想的同時,政府方面也表示會給予支持。

  孟秋表示:“下一步我們將積極貫徹落實黨中央、國務院的決策部署,會同行業各方力量,綜合運用行政、經濟、信用、数字等監管服務手段,着力推進深化出租車改革和新老業態融合發展。”

  據西安市交通運輸局出租車管理處處長王健向《證券日報》記者透露:“去年以來,受國內汽車銷售業績持續下滑的影響,國內傳統車企幾乎全部跨界進入了網約車市場,他們或直接投資平台,或通過線下銷售公司以賣車為目標,通過‘以租代購’等形式快速向網約車市場投放車輛,間接操控網約車市場,完全不考慮市場容量。”

  “目前,網約車市場已經不是健康理性的市場,如果不加以規範,很有可能大幅度影響全行業收入。為此,我們將全面規範網約車市場准入,逐步規範網約車管理。”王健表示,“現階段,西安市將對網約車總量進行適度管控,確保巡遊車市場穩定。”

  孟秋認為,出租汽車行業應繼續保證有效供給,通過出租車數量的調整、網約車合規化增量,來擴大有效的供給和高中端的供給,滿足社會公眾高品質、多樣化、差異化的出行需求。

(文章來源:證券日報)

(責任編輯:DF353)

【其他文章推薦】

※老舊房屋馬桶不通、水管阻塞,推薦竹北通水管新竹通水管專業師傅,徹底解決多年臭味問題

※門外漢也要知道的超耐磨木地板祕辛?

※中古屋大改造,分享台中室內設計公司隔間重新規劃,擴大實用空間!

※浴室設計小心機,利用馬賽克磁磚,放大你的浴室空間

※打造北歐風,連設計師也極力讚許的古典家具推薦工廠