【ARTS】28 week

12598 ワード

https://github.com/angel-star/ARTS/tree/master/2018_07_15
Algorithm
709.To Lower Caseテーマ説明:Implement function ToLowerCase()that has a string parameter str,and returns the same string in lowercase.
最も一般的な方法のC++実装を以下に示す.
class Solution {
public:
    string toLowerCase(string str) {
        string result = "";
        for (auto s : str) {
            if (s >= 'A' && s <= 'Z') {
                result += 'a' + s - 'A';
            } else result += s;
        }
        return result;
    }
};

今週のAlgorithmコーナーは水を引いて、来週2つ来ます.
Review
【なぜ木工をすればプログラマーになれるのか】Why Woodworking Will Make You a Better Coder
本文の内容概要:
I’ve found that dissimilar hobbies can lead to unexpected transfer learning. In the following essay, I share an example of this lateral thinking; how skills in one area can inform learning and decision making in another.
本文は5つの方面を通じて1つの“木工”をすることを述べてどうして自分にプログラムをたたく方面に木を建てさせて、彼は5つの理由を提供しました:
  • It will teach you utility
  • It will teach you to troubleshoot
  • It will teach you bootstrapping
  • It will teach you progress
  • It will teach you work backwards

  • *この記事では、著者が日常生活で触れている「木工」の仕事を通して、codingによく似ていて、ある面で更新できる一連の思考を述べています.*冒頭で述べたように
    Many adept technologists agree that being good at one thing is the same as being good at none; “two is one and one is none”. Those who can work across many disciplines — the polymaths — will dominate the future of business.
    キーワード:ProgrammingDataScienceLifeCodeComputerScienceTechnique
    分散ファイルシステムとは?
    分散ファイルシステム.3つの語、分散、ファイル、ファイルシステムに分割できます.
    分散とは?簡単に言えば、いくつかの機械でネットワークを通じて協同して統一的に何らかのサービスを提供することであり、このようなサービスの内部の細部は通常対外的に透明であり、外部はこのシステムが内部のノード状態、コピー、分割などに関心を持たない信頼できるサービスを提供することを感知するしかない.
    ファイルとは?linuxシステムにとって、すべてはファイルです.では、書類とは何ですか.どんなファイルでも、大きなバイナリ配列と見なすことができます.
    ファイルシステムとは?まずシステムは複数のコンポーネントが有機的に結合した生成物であり、ファイルシステムはシステムの中でファイル情報の管理と記憶を担当するサブシステムである.
    分散ファイルシステムとは何ですか?
    一連の機械を利用してネットワーク方式を通じて、統一的で透明なサービスで外部にファイルストレージとファイル管理を提供するシステムである.
    これからはレベルを練習して、何を学ぶことができますか.今日はレベル1だけをします.
    JDKは8で、依存はmaven管理を使用して、まずmaven依存を見て、guavaパッケージだけに依存して、いろいろな集合を処理するのに便利です.
    
    <dependency>
       <groupId>com.google.guavagroupId>
       <artifactId>guavaartifactId>
       <version>25.1-jreversion>
    dependency>
    
  • Level 1簡単なメモリ分散型メモリ
  • package com.bigbanana.lab.lab3.dajiao.step1;
    
    import com.google.common.primitives.Bytes;
    
    import java.util.*;
    
    public class SimpleDistributeFSInMemory {
    
       public static Map>> servers= new HashMap<>();
       public static Integer serverSize = 3;
    
       static {
          /**
           *           
           */
          for(int i = 0 ; i < serverSize ;i++){
             Map> server = new HashMap<>();
             servers.put(i+"",server);
          }
    
       }
    
       public static void main(String[] args){
          /**
           *       
           */
          Scanner scanner = new Scanner(System.in);
    
          while (scanner.hasNextLine()){
             String command  = scanner.nextLine();
             String[] commandArray = command.split(" ");
    
             String targetCommand = commandArray[0];
             String fileName = commandArray[1];
    
             /**
              *                ,           
              */
             int serverIndex = getServerIndex(fileName);
             Map> serverFile = servers.get(serverIndex+"");
    
             if("get".equals(targetCommand)){
                println("getting file from server "+serverIndex +"....");
    
                /**
                 *    get               ,     String     。
                 */
                println(new String(Bytes.toArray(serverFile.getOrDefault(fileName,new ArrayList<>()))));
    
             }else if("put".equals(targetCommand)){
                /**
                 *    put    (    String)    byte   ,          
                 */
                println("putting file to server "+serverIndex +"....");
                String file = commandArray[2];
                List fileBytes = Bytes.asList(file.getBytes());
    
                serverFile.put(fileName,fileBytes);
    
                println("success");
             }
          }
    
       }
    
       /**
        *       
        */
       public static void println(Object o){
          System.out.println(o);
       }
    
       /**
        *   hash         
        */
       public static Integer getServerIndex(String fileName){
          return fileName.hashCode() % serverSize;
       }
    }

    コマンドラインで自分が実装したばかりのファイルシステムを叩くと、getとputという最も基本的な機能が実装されていることがわかります.
    put banana.git banananisToooBig putting file to server 1…. success get banana.get getting file from server 0….
    get banana.git getting file from server 1…. banananisToooBig
    実現の構想はどうなっているのだろうか.1、サーバー・クラスタ全体を初期化し、ここでは3を使用し、Level 2ではサーバーを個別のエンティティに抽象化します.
    public static Map>> servers= new HashMap<>();
    public static Integer serverSize = 3;
    
    static {
       /**
        *           
        */
       for(int i = 0 ; i < serverSize ;i++){
          Map> server = new HashMap<>();
          servers.put(i+"",server);
       }
    
    }
    

    2、サーバーのバケツ分け方式を定義し、ここではファイル名hashを使用してmodを取る方式でサーバーアドレスを行う.
    /**
     *   hash         
     */
    public static Integer getServerIndex(String fileName){
       return fileName.hashCode() % serverSize;
    }

    3、対応するサーバーを取得して、前に定義した方法によって、ここで直接Mapから取り出しました.
    
    /**
     *                ,           
     */
    int serverIndex = getServerIndex(fileName);
    Map> serverFile = servers.get(serverIndex+"");

    4、put操作を定義する.対応するファイル(ここではファイルをStringに簡略化)を取り、ファイル対応のbyte配列を取得し、それらのフォーマットを統一した後、サーバのファイルバケツに書き込む.
    else if("put".equals(targetCommand)){
       /**
        *    put    (    String)    byte   ,          
        */
       println("putting file to server "+serverIndex +"....");
       String file = commandArray[2];
       List fileBytes = Bytes.asList(file.getBytes());
    
       serverFile.put(fileName,fileBytes);
    
       println("success");
    }

    5、get操作を定義します.put操作と同様に,まずファイルサーバを見つけてからバケツを見つけ,バケツからファイル名に従って対応するbyteリストを取得し,byte配列に変換してStringに変換して印刷する.
    if("get".equals(targetCommand)){
       println("getting file from server "+serverIndex +"....");
    
       /**
        *    get               ,     String     。
        */
       println(new String(Bytes.toArray(serverFile.getOrDefault(fileName,new ArrayList<>()))));
    
    }

    6、クライアントを外部に露出し、ここではScannerを使用してシステム入力をスキャンし、「commandファイル名ファイル内容」に従ってこのプロセスを組織する.
    Scanner scanner = new Scanner(System.in);
    
    while (scanner.hasNextLine()){
       String command  = scanner.nextLine();
       String[] commandArray = command.split(" ");
    
       String targetCommand = commandArray[0];
       String fileName = commandArray[1];
    }

    これで、私达の分布式ファイルシステムLEVEL 1は楽しく终わって、あなたに役に立つことを望んで、私にLEVEL 2を実现させたいと思っています.このバージョンは最も简単なので、LEVEL 2は各サービスを抽象化して、私达の后で各サービスに対して単独で配置して协同することを便利にして、1つのappendのapiを定义して、もちろんメモリのフォーマットで、最初からファイルストリームネットワークの操作に陥るので、ぼんやりします.もちろん私もgithubに置いて、下のこの練習種目はlab 3の中にあります.
    Javaの練習プロジェクトはすでに設立されています.https://github.com/CallMeDJ/BananaLab.git
  • ではどうやって操作するのでしょうか?
  • 自分のパッケージを新規作成し、dajiaoフォルダのdemoクラスをコピーする
  • 実装クラスであなたが実現する機能が必要
  • 走test、通過後提出可能.
  • MDファイルを作成し、あなたの考えや注意点を説明します.
  • あなたのPRを提出します.


  • 公衆号「バナナというプログラマー」から転載
    Share
    今日の主役はWide&Deep Modelで、推奨システムやCTR見積りに応用されています.万字長文、壁割れおすすめ!
    本文は公衆番号「AI前線」から来た
    冒頭でいくつかの名詞解釈を紹介したMemorization GeneralizationWide DeepCross-product transformation次に2つの推奨システムを紹介した:CF-Based( )Content-Based( )システムの実践を簡単に概説した後、適用範囲とメリットとデメリットについても言及し、コード実装を大幅に紹介した.
    https://github.com/gutouyu/ML_CIA/tree/master/Wide%26Deep
    データセット:https://archive.ics.uci.edu/ml/machine-learning-databases/adult
    コードは主に2つの部分を含む:Wide Linear ModelとWide&Deep Model.
    『CTR見積りコラム|Wide&Deep理論と実践の詳細』
    注:本文は公衆番号「機械学習推薦情報局」に原発され、興味のある学生たちは他のいくつかのコラムを調べることができる.
    また、アンリの皆さんの文章は、グアゴがグループに投稿したものです.
    どのように1篇の論文を読みます