コマンドモードについて理解する
リクエストをオブジェクトとしてカプセル化して、ユーザーがさまざまなリクエストを使用して顧客をパラメータ化したり、リクエストをキューに入れたり、リクエストログを記録したり、可逆操作をサポートしたりできるようにします。
いつ使用するか:
- プログラムは、要求を指定、調整、および実行する必要があります。
- プログラムは、元に戻す操作を提供する必要があります。
- プログラムはマクロ操作をサポートする必要があります。
利点:
- コマンドモードでは、リクエスター(Invoker)はレシーバー(Receiver)と直接対話せず、リクエスター(Invoker)にはレシーバー(Receiver)参照が含まれていないため、相互間の結合は完全に排除されます。
- コマンドモードは「開閉原理」を満たしています。新しい特定のコマンドとコマンドの受信者を追加する場合、呼び出し元は、呼び出し元のコードを変更せずに新しいコマンドオブジェクトを使用できます。逆に、新しい呼び出し元を追加する場合、既存の特定のコマンドと受信者を変更する必要はありません。追加の呼び出し元は、既存の特定のコマンドを使用できます。
- リクエスタのリクエストは特定のコマンドにカプセル化されるため、特定のコマンドを永続的なメディアに保存でき、特定のコマンドは必要に応じて再実行できます。したがって、コマンドモードを使用してログを記録できます。
- コマンドモードを使用して、リクエスタの「リクエスト」をキューに入れます。各リクエストは特定のコマンドに対応しているため、これらの特定のコマンドは特定の順序で実行できます。
オブジェクトには複数の操作がありますが、呼び出し元(リクエスター)がそれを直接使用するのは望ましくありません。追加のオブジェクトを追加し、呼び出し側がこのオブジェクトを介してこれらの操作を使用できるようにします。たとえば、ディスク(レシーバー)でファイルを作成または削除できるクラスがありますが、それらを他のユーザー(リクエスター)に直接提供したくないので、さまざまな操作に対応するコマンドを作成します
//接收者
public class MakeFile {
//新建文件
public void createFile(String name) throws IOException{
File file = new File(name);
file.createNewFile();
}
//删除文件
public boolean deleteFile(String name){
File file = new File(name);
if(file.exists()&&file.isFile()){
file.delete();
return true;
}
return false;
}
}
//命令接口
public interface Command {
void execute(String name) throws Exception;
}
//新建文件命令
public class CommandCreate implements Command {
MakeFile makeFile;
public CommandCreate(MakeFile makeFile) {
this.makeFile = makeFile;
}
@Override
public void execute(String name) throws Exception {
makeFile.createFile(name);
}
}
//删文件命令
public class CommandDelete implements Command{
MakeFile makeFile;
public CommandDelete(MakeFile makeFile) {
this.makeFile = makeFile;
}
@Override
public void execute(String name) throws Exception {
makeFile.deleteFile(name);
}
}
//请求者
public class Client {
Command command;
public Client setCommand(Command command){
this.command = command;
return this;
}
public void executeCommand(String name) throws Exception{
if(command==null)
throw new Exception("命令不能为空!");
command.execute(name);
}
}
public class Test {
public static void main(String args[]) throws Exception{
//接收者
MakeFile makeFile = new MakeFile();
//命令
CommandCreate create = new CommandCreate(makeFile);
CommandDelete delete = new CommandDelete(makeFile);
//请求者
Client client = new Client();
//执行命令
client.setCommand(create).executeCommand("d://test1.txt");
client.setCommand(create).executeCommand("d://test2.txt");
client.setCommand(delete).executeCommand("d://test2.txt");
}
}//执行完后在D盘会有一个test1.txt的文件,test2.txt本页创建了,不过又被删除了
たとえば、コマンドモードを乱用しないでください。このモードを使用すると、オブジェクト(コマンド)が多くなります。
TCPとUDPの違いを簡単に説明してください
tcpとudpは、OSIモデルのトランスポート層のプロトコルです。TCPは信頼性の高い通信伝送を提供しますが、UDPはアプリケーションの通信伝送をブロードキャストおよび詳細に制御するためによく使用されます。
この2つの違いは、おおよそ次のとおりです。
- tcpは接続指向であり、udpは非接続指向です。つまり、データを送信する前にリンクを確立する必要はありません。
- tcpは信頼できるサービス(データ転送)を提供し、udpは保証できません。
- tcpはバイトストリーム用、udpはパケット用です。
- TCPデータ転送は遅く、udpデータ転送は速いです。
Androidネットワークデータの暗号化方法
対称暗号化は、暗号化されたデータと復号化されたデータの両方が同じ鍵を使用することを意味し、この点でのアルゴリズムはDESです。
非対称暗号化、暗号化、復号化では、異なるキーを使用します。データを送信する前に、サーバーに同意して公開鍵と秘密鍵を生成する必要があります。公開鍵で暗号化されたデータは秘密鍵で復号化でき、その逆も可能です。これに関するアルゴリズムはRSAです。sshとsslはどちらも典型的な非対称暗号化です。
HttpとHttpsの違い
HTTP:ハイパーテキスト転送プロトコル(HyperText Transfer Protocol)は、現在インターネットで最も広く使用されているネットワーク転送プロトコルです。すべてのWWWファイルは、この標準に準拠している必要があります。HTTPを設計する本来の目的は、HTMLページを公開および受信する方法を提供することでした。これは主にクライアントとサーバーの要求と応答の標準(TCP)ですが、HTTPSに置き換えられています。
HTTPS:セキュアソケットレイヤー上のハイパーテキスト転送プロトコル(セキュアソケットレイヤー上のハイパーテキスト転送プロトコル)またはハイパーテキスト転送プロトコルセキュア(ハイパーテキスト転送プロトコルセキュア)は、1994年にNetscapeによって作成され、セキュリティに基づいています。ターゲットHTTPチャネル。簡単に言えば、これはHTTPの安全なバージョンです。つまり、HTTPの下にSSLレイヤーが追加され、HTTPSのセキュリティ基盤はSSLであるため、暗号化された詳細なコンテンツにはSSLが必要です。
主な違い:
- URL:httpは通常http://で始まり、httpsはhttps://で始まります。
- 証明書:httpは証明書を必要としません。httpsはcaへの証明書を申請する必要があります。通常、無料の証明書はほとんどないため、一定の料金が必要です。
- セキュリティ:http情報はクリアテキストで送信され、httpsは安全なSSL暗号化送信プロトコルです。
- ポート:httpデフォルトのポートは80、httpsは443です。
- 接続:http接続は非常にシンプルでステートレスです。httpsプロトコルは、SSL + httpプロトコルによって構築されたネットワークプロトコルであり、暗号化された送信とID認証を実行できるため、初めて接続を確立するのは遅くなりますが、httpプロトコルより安全です。
添付:httpsの長所と短所:
利点:
- 証明書は、サーバーをより信頼するために使用できます。
- 安全で改ざん防止。
短所:
- httpsには証明書が必要です。
- 送信は暗号化されているため、CPU消費がある程度増加します。
- 鍵を返し、暗号化アルゴリズムを確認するためにhttpsが必要なため、初めて接続を確立するのは遅くなります。
- 帯域幅の消費が増加し、サーバーへのプレッシャーが大きくなります。
高度なHTTP:https://mp.weixin.qq.com/s/3TaonTzAsqqLLbJ-yrwNdw
Https:https://mp.weixin.qq.com/s/lCr7NuQNLQh4Ake8yXorxg?scene = 25#wechat_redirect
apkのパッケージプロセスを簡単に説明してください
- リソースファイルのパッケージ化、R.javaファイルの生成入力:resファイル、アセットファイル、AndroidManifest.xmlファイル、Android基本クラスライブラリ(Android.jarファイル)出力:R.java、resources.arscツール:aaptツール場所:SDK \ビルド-tools \ 29.0.0 \ aapt.exe
- AIDLファイルを処理し、対応するJavaファイル入力を生成します。ソースコードファイル、AIDLファイル、Framework.AIDLファイル出力:対応する.Javaファイルツール:AIDLツールツールの場所:SDK \ビルドツール\ 29.0.0 \ AIDL.EXE
- プロジェクトのソースコードをコンパイルし、対応するクラスファイルを生成します。入力:ソースコードファイル(R.javaおよびAIDLによって生成された.javaファイルを含む)、ライブラリファイル(jarファイル)出力:.classファイルツール:javacツールツールの場所:Java \ jdk1.8.0 _201 \ bin \ javac.exe
- すべてのクラスファイルを変換し、classes.dexファイルを生成します。入力:.classファイル(Aidl生成.classファイル、R生成.classファイル、ソースファイル生成.classファイルを含む)、ライブラリファイル(.jarファイル)出力:.dexファイルツール:javacツールツールの場所:Java \ jdk1.8.0_201 \ bin \ javac.exe
- apkファイルを生成するためのパッケージ入力:パッケージ化されたリソースファイル、パッケージ化されたクラスファイル(.dexファイル)、libsファイル(.soファイルを含む)出力:署名されていない.apkファイルツール:apkbuilder.batツールは破棄され、sdklibに変更されました.jarツールの場所:E:\ SDK \ tools \ lib \ sdklib.jar
- apkファイルへの署名入力:署名されていない.apkファイル出力:署名された.apkファイルツール:jarsignerツールapksignerツールツールの場所:Java \ jdk1.8.0_201 \ bin \ jarsigner.exe SDK \ build-tools \ 29.0.0 \ lib \ apksigner.jar
- 署名済みのapkファイルの入力を揃える:署名済みの.apkファイルの出力:揃えた.apkファイルツール:zipalignツールツールの場所:SDK \ build-tools \ 29.0.0 \ zipalign.exe
注:ツールの場所はwinプラットフォームに基づいています。参照接続:
https://developer.android.com/studio/build/index.html?hl=zh-cn#build-processhttps://blog.csdn.net/jiangwei0910410003/article/details/50402000
この記事は簡単ではありません。この記事が気に入った場合や参考になった場合は、気に入って、転送して、フォローしてください。記事は継続的に更新されます。絶対ドライグッズ!!!