1. 程式人生 > >2018年終總結暨這些年的折騰

2018年終總結暨這些年的折騰

  2018馬上就要走向尾聲了,在這辭舊迎新的日子裡適合發表一些感慨,回顧這一年走過的路和這些年的歷程,然後展望一下2019年以及往後的時光。
  
  2018年,離開呆了好多年的廈門來到深圳,節奏更快了,競爭也更大了,但是水平也可以提升很快了。一線城市有很多高手可以交流學習,但是你得想好要學什麼、怎麼去提問,不能問太低階的問題,高手願意回答你問題也是需要時間的,所以要把問題準備得充分一些具體一點。還有接觸新專案先去看文件,到網上找找有沒相關的解決方法。希望你能去問google而不是BD,去問Stack Overflow而不是BD,這是在網上看到的一句標語,很有個性,也很好用。
  
  2018學了很多Linux運維的技能,幾個命令就能讓你提升很多的開發速度;2018學了全球最流行的PHP框架Laravel,還用它搭建了電商系統,包括高效能無限級分類、眾籌商品管理、眾籌商品下單邏輯、眾籌商品結束邏輯、使用分期付款支付訂單、計算分期付款逾期費、分期付款訂單的退款、給商品增加屬性、使用 Elasticsearch 重構商品搜尋模組、分面搜尋、相似商品查詢(類似於亞馬遜的『商品推薦』功能)、Elasticsearch 的索引遷移、秒殺商品管理、秒殺商品下單邏輯、秒殺介面效能優化、編寫部署指令碼、多機部署實現負載均衡等。
  
  2018參與了ERP的製作與實施,感受了它複雜的業務和縝密的邏輯,企業正是需要建立完善的系統才能做大做強走得更遠!肯德基麥當勞等那些大型企業哪個沒有自己一套健全的系統來支撐她們的成長?把那些流程正規化、系統化、電子化,減少時間成本/提高效率不正是資本寒冬中企業所渴求的嗎?
  
  回望這些年的折騰
  
  09 - 10年 第三方部落格平臺
  
  那時剛從學校出來,還帶著一點文藝氣息,喜歡發表一點自己的思想,那段時間不定時更新了一些文章,自我感覺有些成就感,可惜後面那個網站改版下線還是怎麼的,好像是部落格中國,後面賬號密碼都忘記了。
  
  那時還接觸了淘寶店鋪,感覺好神奇,居然可以在業餘時間通過網上賣東西賺了點小錢,雖然不多但還是很興奮。年輕氣盛想著做點更巨集偉的事情就沒繼續經營了,如果堅持到現在至少也有皇冠了吧?
  
  10 -13年 Zencart、Magento、Wordpress、Drupal、Joomla
  
  那段時間從事外貿行業,通過Zencart、Magento自建站建商城,做好站內優化,在第三方部落格、論壇等平臺釋出外部連結提升排名。還用Wordpress、Drupal、Joomla搭建部落格站引流,然後把流量導給商城進行轉化。那時候谷歌排名相對比較容易做上去,可是支付通道不是很穩定,賬號被凍結,有點心灰意冷。加上一些其他因素後面就轉戰國內市場了。
  
  13 - 18年 Dedecms、帝國cms、ThinkPHP
  
  機緣巧合進了一家比較大型的集團,從dedecms的改造到帝國cms的深度開發,從移動網頁加速器MIP改造到熊掌號搭建,從單站到CI框架多站管理系統,從Excel批量操作到ThinkPHP營銷系統的開發,從不算特別酷炫的PPT到邏輯清晰的思維導圖製作,從公眾平臺二次開發到TP後臺API開發,從https部署到小程式上線,一路走來,踩了不少坑,也填了很多坑,都記錄在這個部落格裡www.cnblogs.com/ytkah,滿滿當當地記錄了5年3個月,總算有了一點小成就,在465228個開發者部落格中排第262位,感謝各位一直以來對我不離不棄的支援,我會繼續記錄點點滴滴,我們一起成長,一同進步!
  
  展望2019及未來,移動網際網路將繼續進化,APP還是一個重要的承載體,雖然流量都被全球各大科技公司瓜分,但是守住細分領域自己一畝三分地還是很有必要的,積累使用者,做好服務,變現逐步!Webapp可能作為一個衍生品得到廣泛發展。它們共同的點是通過API來連線,所以寫好接口才是硬道理。
  
  Python的運用。大資料經常被人談及,資料從何而來?通過各個平臺、app、網站資料的收集,分析,過濾,生成報告,這些都可以用python來處理,並且有很多成熟的庫可以直接用了。那還不趕緊深入得學習?
  
  AI人工智慧。最瞭解你的以後可能不是你自己或別人,因為機器更懂你!讓AI幫你處理問題比你自己做得更好!
  
  Fighting!!!
  
  df = pd.read_csv('https://raw.githubusercontent.com/chrisalbon/war_of_the_five_kings_dataset/master/5kings_battles_v1.csv')
  
  df.head()
  
  name    year    battle_number    attacker_king    defender_king    attacker_1    attacker_2    attacker_3    attacker_4    defender_1    defender_2    defender_3    defender_4    attacker_outcome    battle_type    major_death    major_capture    attacker_size    defender_size    attacker_commander    defender_commander    summer    location    region    note
  
  0    Battle of the Golden Tooth    298    1    Joffrey/Tommen Baratheon    Robb Stark    Lannister    NaN    NaN    NaN    Tully    NaN    NaN    NaN    win    pitched battle    1.0    0.0    15000.0    4000.0    Jaime Lannister    Clement Piper, Vance    1.0    Golden Tooth    The Westerlands    NaN
  
  1    Battle at the Mummer’s Ford    298    2    Joffrey/Tommen Baratheon    Robb Stark    Lannister    NaN    NaN    NaN    Baratheon    NaN    NaN    NaN    win    ambush    1.0    0.0    NaN    120.0    Gregor Clegane    Beric Dondarrion    1.0    Mummer’s Ford    The Riverlands    NaN
  
  2    Battle of Riverrun    298    3    Joffrey/Tommen Baratheon    Robb Stark    Lannister    NaN    NaN    NaN    Tully    NaN    NaN    NaN    win    pitched battle    0.0    1.0    15000.0    10000.0    Jaime Lannister, Andros Brax    Edmure Tully, Tytos Blackwood    1.0    Riverrun    The Riverlands    NaN
  
  3    Battle of the Green Fork    298    4    Robb Stark    Joffrey/Tommen Baratheon    Stark    NaN    NaN    NaN    Lannister    NaN    NaN    NaN    loss    pitched battle    1.0    1.0    18000.0    20000.0    Roose Bolton, Wylis Manderly, Medger Cerwyn, H…    Tywin Lannister, Gregor Clegane, Kevan Lannist…    1.0    Green Fork    The Riverlands    NaN
  
  4    Battle of the Whispering Wood    298    5    Robb Stark    Joffrey/Tommen Baratheon    Stark    Tully    NaN    NaN    Lannister    NaN    NaN    NaN    win    ambush    1.0    1.0    1875.0    6000.0    Robb Stark, Brynden Tully    Jaime Lannister    1.0    Whispering Wood    The Riverlands    NaN
  
  # 建立圖形
  
  plt.figure(figsize=(10,8))
  
  # 建立散點圖
  
  # 298 年的攻擊方大小為 x 軸
  
  plt.scatter(df['attacker_size'][df['year'] == 298],
  
  # 298 年的防守方大小為 y 軸
  
  df['defender_size'][df['year'] == 298],
  
  # 標記
  
  marker='x',
  
  # 顏色
  
  color='b',
  
  # 透明度
  
  alpha=0.7,
  
  # 大小
  
  s = 124,
  
  # 標籤
  
  label='Year 298')
  
  # 299 年的攻擊方大小為 x 軸
  
  plt.scatter(df['attacker_size'][df['year'] == 299],
  
  # 299 年的防守方大小為 y 軸
  
  df['defender_size'][df['year'] == 299],
  
  # 標記
  
  marker='o',
  
  # 顏色
  
  color='r',
  
  # 透明度
  
  alpha=0.7,
  
  # 大小
  
  s = 124,
  
  # 標籤
  
  label='Year 299')
  
  # 300 年的攻擊方大小為 x 軸
  
  plt.scatter(df['attacker_size'][df['year'] == 300],
  
  # 300 年的防守方大小為 x 軸
  
  df['defender_size'][df['year'] == 300],
  
  # 標記
  
  marker='^',
  
  # 顏色
  
  color='g',
  
  # 透明度
  
  alpha=0.7,
  
  # 大小
  
  s = 124,
  
  # 標籤
  
  label='Year 300')
  
  # 標題
  
  plt.title('Battles Of The War Of The Five Kings')
  
  # y 標籤
  
  plt.ylabel('Defender Size')
  
  # x 標籤
  
  plt.xlabel('Attacker Size')
  
  # 圖例
  
  plt.legend(loc='upper right')
  
  # 設定圖形邊界
  
  plt.xlim([min(df['attacker_size'])-1000, max(df['attacker_size'])+1000])
  
  plt.ylim([min(df[www.douniu157.com'defender_size'])-1000, max(df['defender_size'])+1000])
  
  MatPlotLib 中的棧式百分比條形圖
  
  %matplotlib inline
  
  import pandas as pd
  
  import matplotlib.www.gouyiflb.cn pyplot as plt
  
  raw_data = {'first_name': ['Jason', 'Molly', 'Tina', 'Jake', 'Amy'],
  
  'pre_score': [4, 24, 31, 2, 3],
  
  'mid_score': [25, 94, 57, 62, 70],
  
  'post_score': [5, 43, 23, 23, 51]}
  
  df = pd.DataFrame(raw_data, columns = ['first_name', 'pre_score', 'mid_score', 'post_score'])
  
  first_name    pre_score    mid_score    post_score
  
  0    Jason    4    25    5
  
  1    Molly    24    94    43
  
  2    Tina    31    57    23
  
  3    Jake    2    62    23
  
  4    Amy    3    70    51
  
  # 建立帶有一個子圖的圖形
  
  f, ax = plt.subplots(1, figsize=(10,5))
  
  # 將條寬設為 1
  
  bar_width = 1
  
  # 條形左邊界的位置
  
  bar_l = [i for i in range(len(df['pre_score']))]
  
  # x 軸刻度的位置(條形的中心是條形標籤)
  
  tick_pos = [i+(bar_width/2) for i in bar_l]
  
  # 建立每個參與者的總得分
  
  totals = [i+j+k for i,j,k in zip(df[www.taohuaqing178.com 'pre_score'], df['mid_score'], df['post_score'])]
  
  # 建立每個參與者的 pre_score 和總得分的百分比
  
  pre_rel = [i / j * 100 for  i,j in zip(df['pre_score'], totals)]
  
  # 建立每個參與者的 mid_score 和總得分的百分比
  
  mid_rel = [i / j * 100 for  i,j in zip(df['mid_score'], totals)]
  
  # 建立每個參與者的 post_score 和總得分的百分比
  
  post_rel = [i / j * 100 for  i,j in zip(df['post_score'], totals)]
  
  # 在位置 bar_1 建立條形圖
  
  ax.bar(bar_l,
  
  # 使用資料 pre_rel
  
  pre_rel,
  
  # 標籤
  
  label='Pre Score',
  
  # 透明度
  
  alpha=0.9,
  
  # 顏色
  
  color='#019600',
  
  # 條形寬度
  
  width=bar_width,
  
  # 邊框顏色
  
  edgecolor='white'
  
  )
  
  # 在位置 bar_1 建立條形圖
  
  ax.bar(bar_l,
  
  # 使用資料 mid_rel
  
  mid_rel,
  
  # 底部為 pre_rel
  
  bottom=pre_rel,
  
  # 標籤
  
  label='Mid Score',
  
  # 透明度
  
  alpha=0.9,
  
  # 顏色
  
  color='#3C5F5A',
  
  # 條形寬度
  
  width=bar_width,
  
  # 邊框顏色
  
  edgecolor='white'
  
  )
  
  # Create a bar chart in position bar_1
  
  ax.bar(bar_l,
  
  # 使用資料 post_rel
  
  post_rel,
  
  # 底部為 pre_rel 和 mid_rel
  
  bottom=[i+j for i,j in zip(pre_rel, mid_rel)],
  
  # 標籤
  
  label='Post Score',
  
  # 透明度
  
  alpha=0.9,
  
  # 顏色
  
  color='#219AD8',
  
  # 條形寬度
  
  width=bar_width,
  
  # 邊框顏色
  
  edgecolor='white'
  
  )
  
  # 將刻度設為 first_name
  
  plt.xticks(tick_pos,yongshiyule178.com df['first_name'])
  
  ax.set_ylabel("Percentage")
  
  ax.set_xlabel("")
  
  # 設定圖形邊界
  
  plt.xlim([min(tick_www.michenggw.com pos)-bar_width, max(tick_pos)+bar_width])
  
  plt.ylim(-10, 110)
  
  # 旋轉軸標籤
  
  plt.setp(plt.gca().get_xticklabels(www.dasheng178.com), rotation=45, horizontalalignment='right')
  
  # 展示繪圖
  
  plt.show()