SENI #002
SENI #002
SENI adalah kegiatan yang diprakarsai oleh
由左耳朵耗子--陈皓: Kerjakan setidaknya satu pertanyaan algoritma leetcode setiap minggu, baca dan komentari setidaknya satu artikel teknis berbahasa Inggris, pelajari setidaknya satu keterampilan teknis, dan bagikan artikel yang berisi opini dan pemikiran. (Artinya, Algoritma, Review, Tip, dan Share disebut sebagai SENI) dan bertahan setidaknya selama satu tahun.
SENI 002
Ini adalah artikel kedua, dan tulisannya relatif buruk. Saya berharap ini akan menjadi lebih baik dan lebih baik lagi di masa depan.
Pertanyaan algoritma algoritma
pertanyaan algoritma leetcode 242 Anagram yang Valid (verifikasi apakah itu anagram)
Given two strings s and t , write a function to determine if t is an anagram of s.
Example 1:
Input: s = "anagram", t = "nagaram"
Output: true
Example 2:
Input: s = "rat", t = "car"
Output: false
Note:
You may assume the string contains only lowercase alphabets.
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true
示例 2:
输入: s = "rat", t = "car"
输出: false
说明:
你可以假设字符串只包含小写字母。
Ide awalnya adalah mengurutkan terlebih dahulu lalu membandingkannya, yaitu mengurutkan kedua string terlebih dahulu, lalu membandingkan apakah keduanya sama. Metode verifikasi ini adalah yang paling efisien. Anda dapat menggunakan pengurutan gelembung, pengurutan pilihan, pengurutan penyisipan, dll. saat mengurutkan. Walaupun kompleksitas dari ketiga algoritma pengurutan ini adalah O(n<sup>2</sup>), pengujian menemukan bahwa ketika jumlah data besar, pengurutan penyisipan jauh lebih cepat dibandingkan dua algoritma pengurutan lainnya, yang besarnya tidak sama. Implementasi dari insert sort adalah sebagai berikut:
char* insertionSort(char* str) {
for (int j = 1; j < strlen(str); j++) {
char *insertionChar = str + j;
char iChar = *insertionChar;
char * compareChar = insertionChar;
for (int i = j-1; i >=0; i--) {
if (iChar < *(str + i)) {
compareChar = str + i;
*(compareChar +1) = *compareChar;
}
else{
break;
}
}
*compareChar = iChar;
}
return str;
}
bool isAnagram(char* s, char* t) {
if (strlen(s) != strlen(t)){
return false;
}
char *s1 = insertionSort(s);
char *s2 = insertionSort(t);
if (strcmp(s1,s2)) {
return false;
}
else{
return true;
}
}
Tapi itu tidak bisa lolos sama sekali dalam leetcode. Panjang string data pengujian pada leetcode adalah 100Kb. Saya mengukurnya secara lokal dan butuh hampir 20 detik menggunakan penyisipan. Tetapi jika saya menggunakan bubble dan seleksi sortir, saya membutuhkan waktu lebih dari satu jam untuk menyelesaikannya.
Jika cara ini tidak berhasil, Anda dapat mencoba ide lain. Anda dapat menghitung apakah tipe karakter dan angka yang terdapat dalam string sama. Misalnya string s berisi 10 huruf a, 5 huruf b, dan 8 huruf k. Jika hal yang sama juga berlaku untuk string t, maka s adalah anagram dari t. Diimplementasikan sebagai berikut
bool isAnagram(char* s, char* t) {
if (strlen(s) != strlen(t)){
return false;
}
int af[26]= {0};
while (*s) {
af[*s++ - 'a']+=1;
}
while (*t) {
af[*t++ - 'a']-=1;
}
for (int i = 0; i<26; i++) {
if (af[i] != 0) {
return false;
}
}
return true;
}
Saat mengimplementasikan ini, hanya satu array yang digunakan, bukan dua array, untuk menghitung jumlah karakter yang muncul dalam dua string masing-masing. Hal ini dapat menghindari situasi di luar batas karena terlalu banyak kemunculan karakter tertentu.
Ulasan
Artikel berikut berasal dari: https://littlebitesofcocoa.com/251-face-aware-image-views-with-aspectfillfaceaware;. Ini berbicara tentang penggunaan aspekfillfaceaware untuk menyadari bahwa ketika mengatur gambar untuk imageView, jika gambar berisi wajah, wajah dapat secara otomatis ditampilkan di tengah.
Tampilan Gambar Face Aware dengan AspectFillFaceAware (gunakan AspectFillFaceAware agar imageView mengenali wajah)
Saat menggunakan UIImageViews, terkadang mode konten bawaan dapat membatasi gaya kita.
Saat menggunakan UIImageViews, terkadang mode konten bawaan merusak gaya kita dan tidak dapat memenuhi kebutuhan kita.
Seringkali, kami menampilkan foto orang. Dalam kasus ini, akan sangat bagus jika tampilan gambar dapat diminta untuk memotong foto di sekitar wajah orang tersebut dengan cerdas.
Seringkali, kami menampilkan foto orang. Dalam kasus ini, akan sangat bagus jika tampilan gambar dapat dengan cerdas memotong foto di sekitar wajah orang tersebut.
Hari ini kita akan memeriksa perpustakaan dari Beau Nouvelle yang disebut AspectFillFaceAware. Ini sangat sederhana, mari kita lihat.
Hari ini kita akan melihat perpustakaan kelas dari Beau Nouvelle yang disebut AspectFillFaceAware. Ini sangat sederhana, mari kita lihat.
AspectFillFaceAware pada dasarnya hanyalah ekstensi pada UIImageView. Ini menyediakan dua cara untuk mengonfigurasi tampilan gambar menjadi “sadar wajah”.
AspectFillFaceAware pada dasarnya hanyalah perpanjangan dari UIImageView. Ini menyediakan dua metode untuk mengkonfigurasi tampilan gambar untuk “pengenalan wajah”.
Yang pertama ada di Interface Builder, kita dapat mengaktifkan fitur tersebut dengan mengaktifkan fitur di Inspector. (Tidak melihat opsinya? Jalankan proyek Anda sekali, maka proyek itu akan muncul).
Cara pertama adalah di Interface Builder, kita dapat mengaktifkan fitur tersebut dengan menelusuri Fitur di Inspektur. (Tidak melihat opsinya? Jalankan proyek Anda sekali dan proyek itu akan muncul).
<img src=“/img/15334638167496.jpg” lebar=“50%” tinggi=“50%” /> Berikut tampilannya:

Kita juga dapat mengaktifkan fungsionalitas dalam kode dengan mengatur tampilan gambar menggunakan fungsi baru ini:
Kita juga dapat menggunakan fitur baru ini melalui kode:
imageView.set(gambar: avatar, focusOnFaces: benar) Kita bahkan dapat menampilkan radius sudut cepat pada lapisan tampilan gambar untuk mencoba fungsi “sadar wajah” pada tampilan melingkar. (yaitu avatar pengguna):
Kita bahkan dapat menampilkan radius sudut cepat pada lapisan tampilan gambar untuk mencoba fitur “pengenalan wajah” pada tampilan melingkar. (yaitu avatar pengguna):
misalkan radius = imageView.bounds.size.width / 2.0 imageView.layer.cornerRadius = radius
Di bawah tenda, perpustakaan menggunakan CIDetector akurasi rendah dengan tipe CIDetectorTypeFace untuk menangani deteksi wajah sebenarnya. Ingin menyelam lebih dalam di sini? Kami membahas CIDetectors di Bite #87.
Di bawah tenda, perpustakaan menggunakan CIDetector presisi rendah dengan tipe CIDetectorTypeFace untuk menangani deteksi wajah sebenarnya. Ingin mempelajari lebih dalam? Kami memperkenalkan pendekatan CIDetectors di Bite #87.
Kiat
Perkenalkan metode penggunaan Proxifier dan shadowsocks untuk mencapai akses Internet proxy sekunder.
Beberapa perusahaan perlu melalui proxy untuk mengakses Internet. Dalam hal ini, kita tidak dapat menggunakan shadowocks untuk mengakses Internet melalui proxy. Misalnya, perusahaan tempat saya berada saat ini menggunakan proxy untuk mengakses Internet. Jika Anda ingin mengakses jaringan eksternal, Anda harus melakukan proxy ke server perusahaan untuk mengakses Internet. Dalam hal ini, menggunakan shadowocks secara langsung tidak akan berhasil.
Apakah mungkin menemukan cara agar shadowocks juga menggunakan proxy? Jadi saya menemukan perangkat lunak Proxifier.
Proxifier, fungsi dari tool ini adalah untuk mengambil alih semua permintaan yang dikeluarkan oleh semua aplikasi yang berjalan, dan kemudian Anda dapat mengontrol apakah suatu aplikasi menggunakan proxy, sehingga aplikasi yang tidak mendukung proxy juga dapat menggunakan proxy.
Awalnya, klien ss (shadowsocks) langsung mengakses server proxy ss. Melalui Proxifier, klien ss dapat dikontrol untuk pergi ke proxy perusahaan terlebih dahulu, lalu ke server proxy ss. Proses umumnya adalah sebagai berikut

- Proses pengaturannya adalah sebagai berikut:
Buka Proxifier, pilih tab Proxy untuk mengatur proxy HTTP perusahaan dan proxy Socks5 lokal:

Port 127.0.0.1 dapat dibuka untuk melihat konfigurasi lanjutan ShadowSocks.
Saat Anda memulai klien ShadowSocks, Anda akan menemukan bahwa Proxifier secara otomatis menangkap aplikasi bernama ss-local, yang merupakan klien SS yang dibuka oleh ShadowSocks, dan menetapkan aturan proksinya ke proksi perusahaan yang dibuat sebelumnya:
Lalu biarkan Localhost dan Default pergi ke ss-local (dua item terakhir pada gambar).
Anda dapat melihat bahwa tiga konfigurasi pertama adalah Direct. Beberapa website atau aplikasi yang tidak memerlukan proxy dapat diatur seperti ini. Jika Anda menemukan beberapa aplikasi mengalami masalah setelah mengaktifkan Proxifier, kemungkinan besar disebabkan oleh proxy. Misalnya, setelah memulai Proxifier, saya menemukan bahwa Proxifier macet ketika saya menggunakan Xcode untuk menjalankan program C. Kemudian, saya menemukan bahwa ketika Xcode menjalankan program C, secara otomatis akan memulai layanan debugserver lokal. Karena saya menyetel proxy default, layanan tidak dapat berkomunikasi secara normal. Saya mengubah server debug menjadi Direct dan dapat berjalan normal. Anda dapat melihat bahwa Proxifier dapat secara langsung menentukan apakah suatu nama aplikasi menggunakan proxy atau apakah IP tertentu menggunakan proxy. Memang sangat nyaman digunakan.
Artikel referensi: http://www.devtalking.com/articles/shadowsocks-guide/ http://blackwolfsec.cc/2016/09/19/Proxifier_Shadowshocks/ https://github.com/cyfdecyf/cow/blob/master/doc/sample-config/rc https://www.latoooo.com/xia_zhe_teng/179.htm http://haoweiguang.me/2017/05/08/Mac下shadowsocks全自动地代理翻墙/ https://blog.e9china.net/tufan/macshanganzhuangcowproxyfanqiangjiaocheng.html
Bagikan
Saya baru saja berganti perusahaan, perusahaan dengan kerja lembur yang serius. Ketika saya pertama kali datang ke sini, saya selalu ingin pergi, tetapi setelah memikirkannya, saya memutuskan untuk tidak pergi. Sebuah perusahaan yang bisa sebesar itu (saya dengar ada hampir 20.000 orang di R&D) pasti memiliki sesuatu yang berharga untuk dipelajari, jadi saya memutuskan untuk tenang dan belajar. Sedangkan untuk kerja lembur, Anda bisa belajar dan meningkatkan diri saat bekerja lembur. Kemampuan, alasan saya datang ke perusahaan ini bukan karena tingkat teknis saya kurang baik, jadi saya harus meningkatkan diri secepatnya. Saya tidak tahu di mana saya melihat kalimat: “Anda harus menanggungnya atau keluar dari sini.”
Faktanya, banyak hal yang seperti ini. Ketika kemampuan Anda tidak sesuai dengan ambisi Anda, yang harus Anda lakukan adalah meningkatkan kemampuan Anda daripada mengeluh tentang lingkungan.
What to read next
Want more posts about ARTS?
Posts in the same category are usually the best next step for reading more on this topic.
View same categoryWant to keep following #iOS?
Tags are useful for related tools, specific problems, and similar troubleshooting notes.
View same tagWant to explore another direction?
If you are not sure what to read next, return to the homepage and start from categories, topics, or latest updates.
Back home