├── .gitbook └── assets │ ├── IMG_5080 (1).gif │ ├── JavaGuide面试突击版.pdf │ ├── Xnip2021-02-04_19-53-57.jpg │ ├── Xnip2021-02-04_19-54-31.jpg │ ├── image (1).png │ ├── image (10).png │ ├── image (11).png │ ├── image (12).png │ ├── image (13).png │ ├── image (14).png │ ├── image (15).png │ ├── image (16).png │ ├── image (17).png │ ├── image (18).png │ ├── image (19) (1).png │ ├── image (19) (2).png │ ├── image (19) (3).png │ ├── image (19).png │ ├── image (2).png │ ├── image (20).png │ ├── image (21).png │ ├── image (22).png │ ├── image (23).png │ ├── image (24).png │ ├── image (25).png │ ├── image (26).png │ ├── image (27).png │ ├── image (28) (1).png │ ├── image (28) (2).png │ ├── image (28).png │ ├── image (29) (1).png │ ├── image (29).png │ ├── image (3).png │ ├── image (30).png │ ├── image (31).png │ ├── image (32).png │ ├── image (33).png │ ├── image (34).png │ ├── image (35) (1).png │ ├── image (35) (2).png │ ├── image (35).png │ ├── image (36).png │ ├── image (37) (1).png │ ├── image (37).png │ ├── image (38).png │ ├── image (39).png │ ├── image (4).png │ ├── image (40).png │ ├── image (41).png │ ├── image (42).png │ ├── image (43).png │ ├── image (44).png │ ├── image (45).png │ ├── image (46).png │ ├── image (47).png │ ├── image (48).png │ ├── image (49) (1).png │ ├── image (49).png │ ├── image (5).png │ ├── image (50).png │ ├── image (51).png │ ├── image (52).png │ ├── image (53) (1).png │ ├── image (53).png │ ├── image (54).png │ ├── image (55).png │ ├── image (56).png │ ├── image (57).png │ ├── image (58).png │ ├── image (59).png │ ├── image (6) (1).png │ ├── image (6).png │ ├── image (60).png │ ├── image (61).png │ ├── image (62).png │ ├── image (63).png │ ├── image (64).png │ ├── image (65).png │ ├── image (66).png │ ├── image (67).png │ ├── image (68).png │ ├── image (69).png │ ├── image (7).png │ ├── image (70).png │ ├── image (71).png │ ├── image (72).png │ ├── image (73).png │ ├── image (74).png │ ├── image (75).png │ ├── image (76).png │ ├── image (77).png │ ├── image (78).png │ ├── image (79).png │ ├── image (8).png │ ├── image (80).png │ ├── image (81).png │ ├── image (82).png │ ├── image (9) (1).png │ ├── image (9) (2).png │ ├── image (9).png │ ├── image.png │ ├── img_5080-1-.gif │ ├── javaguide-mian-shi-tu-ji-ban-.pdf │ ├── xnip2021-02-04_19-53-57.jpg │ └── xnip2021-02-04_19-54-31.jpg ├── .gitignore ├── README.md ├── SUMMARY.md ├── algorithm ├── common-question │ ├── README.md │ ├── algorithm-bytedance.md │ ├── algorithm-tencent.md │ └── sort.md ├── lcof │ ├── README.md │ ├── lcof-03.md │ ├── lcof-04.md │ ├── lcof-05.md │ ├── lcof-06.md │ ├── lcof-07.md │ ├── lcof-09.md │ ├── lcof-10-1.md │ ├── lcof-10-2.md │ ├── lcof-11.md │ ├── lcof-12.md │ ├── lcof-13.md │ ├── lcof-14-2.md │ ├── lcof-14.md │ ├── lcof-15.md │ ├── lcof-16.md │ ├── lcof-17.md │ ├── lcof-18.md │ ├── lcof-19.md │ ├── lcof-20.md │ ├── lcof-21.md │ ├── lcof-22.md │ ├── lcof-24.md │ ├── lcof-25.md │ ├── lcof-26.md │ ├── lcof-27.md │ ├── lcof-28.md │ ├── lcof-29.md │ ├── lcof-30.md │ ├── lcof-31.md │ ├── lcof-32-1.md │ ├── lcof-32-2.md │ ├── lcof-32-3.md │ ├── lcof-33.md │ ├── lcof-34.md │ ├── lcof-35.md │ ├── lcof-36.md │ ├── lcof-37.md │ ├── lcof-38.md │ ├── lcof-39.md │ ├── lcof-40.md │ ├── lcof-41.md │ ├── lcof-42.md │ ├── lcof-43.md │ ├── lcof-44.md │ ├── lcof-45.md │ ├── lcof-46.md │ ├── lcof-47.md │ ├── lcof-48.md │ ├── lcof-49.md │ ├── lcof-50.md │ ├── lcof-51.md │ ├── lcof-52.md │ ├── lcof-53-1.md │ ├── lcof-53-2.md │ ├── lcof-54.md │ ├── lcof-55-1.md │ ├── lcof-55-2.md │ ├── lcof-56-1.md │ ├── lcof-56-2.md │ ├── lcof-57-2.md │ ├── lcof-57.md │ ├── lcof-58-1.md │ ├── lcof-58-2.md │ ├── lcof-59-1.md │ ├── lcof-59-2.md │ ├── lcof-60.md │ ├── lcof-61.md │ ├── lcof-62.md │ ├── lcof-63.md │ ├── lcof-64.md │ ├── lcof-65.md │ ├── lcof-66.md │ ├── lcof-67.md │ ├── lcof-68-1.md │ └── lcof-68-2.md ├── readme.md └── tag │ ├── README.md │ ├── array │ ├── README.md │ ├── leetcode-189.-xuan-zhuan-shu-zu.md │ ├── leetcode-189.md │ ├── leetcode-228.md │ ├── leetcode-31.-xia-yi-ge-pai-lie.md │ ├── leetcode-442.-shu-zu-zhong-zhong-fu-de-shu-ju.md │ ├── leetcode-448.md │ ├── leetcode-560.md │ └── leetcode-75.md │ ├── backtrack │ ├── README.md │ ├── lcof-34.md │ ├── lcof-38.md │ ├── leetcode-17.md │ └── leetcode-46.-quan-pai-lie.md │ ├── bfs │ ├── README.md │ ├── lcof-32-1.md │ ├── lcof-32-2.md │ ├── lcof-32-3.md │ ├── lcof-55-1.md │ └── leetcode-547.md │ ├── bignum.md │ ├── binarysearch │ ├── README.md │ ├── lcof-11.md │ ├── lcof-53-1.md │ ├── lcof-53-2.md │ ├── leetcode-153.md │ ├── leetcode-154.md │ ├── leetcode-278.md │ ├── leetcode-33.md │ ├── leetcode-34.md │ ├── leetcode-4.md │ ├── leetcode-704.md │ ├── leetcode-744.md │ └── leetcode-852.md │ ├── binarytree │ ├── README.md │ ├── lcof-07.md │ ├── lcof-26.md │ ├── lcof-27.md │ ├── lcof-28.md │ ├── lcof-32-1.md │ ├── lcof-32-2.md │ ├── lcof-32-3.md │ ├── lcof-33.md │ ├── lcof-34.md │ ├── lcof-36.md │ ├── lcof-37.md │ ├── lcof-54.md │ ├── lcof-55-1.md │ ├── lcof-55-2.md │ ├── lcof-68-1.md │ ├── lcof-68-2.md │ ├── leetcode-104.md │ ├── leetcode-108.md │ ├── leetcode-112.md │ ├── leetcode-144.-er-cha-shu-de-qian-xu-bian-li.md │ ├── leetcode-543.md │ ├── leetcode-617.-he-bing-er-cha-shu.md │ ├── leetcode-617.md │ ├── leetcode-94.md │ ├── leetcode-95.md │ ├── leetcode-958.md │ ├── leetcode-96.md │ └── leetcode-98.-yan-zheng-er-cha-sou-suo-shu.md │ ├── bit │ ├── README.md │ ├── lcof-15.md │ ├── lcof-56-1.md │ ├── lcof-56-2.md │ ├── leetcode-338.md │ └── leetcode-461.md │ ├── design │ ├── README.md │ ├── lcof-30.md │ ├── lcof-37.md │ ├── lcof-41.md │ ├── lcof-59-2.md │ └── leetcode-146.-lru-huan-cun-ji-zhi.md │ ├── dfs │ ├── README.md │ ├── lcof-12.md │ ├── lcof-13.md │ ├── lcof-34.md │ ├── lcof-38.md │ ├── lcof-54.md │ ├── lcof-55-1.md │ ├── lcof-55-2.md │ ├── lcof-68-2.md │ ├── leetcode-207.-ke-cheng-biao.md │ ├── leetcode-210.-ke-cheng-biao-ii.md │ ├── leetcode-329.md │ ├── leetcode-547.md │ └── leetcode-785.md │ ├── divide │ ├── README.md │ ├── lcof-16.md │ ├── lcof-17.md │ ├── lcof-33.md │ ├── lcof-36.md │ ├── lcof-40.md │ └── lcof-51.md │ ├── dp │ ├── README.md │ ├── lcof-10-2.md │ ├── lcof-14-1.md │ ├── lcof-19.md │ ├── lcof-42.md │ ├── lcof-46.md │ ├── lcof-47.md │ ├── lcof-48.md │ ├── lcof-49.md │ ├── lcof-63.md │ ├── leetcode-1014.md │ ├── leetcode-120.md │ ├── leetcode-122.md │ ├── leetcode-139.md │ ├── leetcode-174.md │ ├── leetcode-188.md │ ├── leetcode-222.md │ ├── leetcode-309.md │ ├── leetcode-32.md │ ├── leetcode-343.md │ ├── leetcode-44.md │ ├── leetcode-494.md │ ├── leetcode-5.md │ ├── leetcode-62.md │ ├── leetcode-63.md │ ├── leetcode-64.md │ ├── leetcode-718.md │ ├── leetcode-837.md │ └── leetcode-97.md │ ├── greedy │ ├── README.md │ ├── lcof-14-1.md │ ├── lcof-14-2.md │ ├── leetcode-1046.md │ ├── leetcode-12.md │ ├── leetcode-122.md │ ├── leetcode-316.md │ ├── leetcode-435.md │ ├── leetcode-455.md │ ├── leetcode-605.md │ └── leetcode-860.md │ ├── hashmap │ ├── README.md │ ├── lcof-03.md │ ├── lcof-35.md │ ├── lcof-50.md │ ├── leetcode-128.md │ ├── leetcode-242.md │ ├── leetcode-350.md │ └── leetcode-560.md │ ├── hashset │ ├── README.md │ ├── lcof-61.md │ └── leetcode-888.md │ ├── heap │ ├── README.md │ ├── lcof-40.md │ ├── lcof-41.md │ ├── leetcode-1046.md │ └── leetcode-215.md │ ├── link │ ├── README.md │ ├── lcof-06.md │ ├── lcof-18.md │ ├── lcof-22.md │ ├── lcof-24.md │ ├── lcof-25.md │ ├── lcof-35.md │ ├── lcof-36.md │ ├── lcof-52.md │ ├── leetcode-19.md │ ├── leetcode-234.-hui-wen-lian-biao.md │ ├── leetcode-237.md │ └── leetcode-86.md │ ├── math │ ├── README.md │ ├── lcof-43.md │ ├── lcof-44.md │ ├── lcof-62.md │ ├── lcof-67.md │ ├── leetcode-16.md │ ├── leetcode-2-1.md │ ├── leetcode-238.md │ ├── leetcode-9.md │ └── leetcode-990.md │ ├── package.md │ ├── package │ ├── README.md │ └── leetcode-494.-mu-biao-he.md │ ├── pointer │ ├── README.md │ ├── lcof-04.md │ ├── lcof-21.md │ ├── lcof-24.md │ ├── lcof-52.md │ ├── lcof-57.md │ ├── lcof-58-1.md │ ├── leetcode-19.md │ ├── leetcode-4.md │ ├── leetcode-424.md │ ├── leetcode-75.md │ └── leetcode-86.md │ ├── presum.md │ ├── presum │ ├── README.md │ └── leetcode-560.md │ ├── queue │ ├── README.md │ ├── lcof-59-1.md │ └── lcof-59-2.md │ ├── recur │ ├── README.md │ ├── lcof-06.md │ ├── lcof-07.md │ ├── lcof-10-1.md │ ├── lcof-16.md │ ├── lcof-24.md │ ├── lcof-25.md │ ├── lcof-26.md │ ├── lcof-27.md │ ├── lcof-28.md │ └── lcof-64.md │ ├── simulation │ ├── README.md │ ├── lcof-29.md │ ├── lcof-31.md │ └── leetcode-860.md │ ├── slidewindow │ ├── README.md │ ├── lcof-59-1.md │ ├── leetcode-1208.md │ ├── leetcode-1423.md │ ├── leetcode-239.md │ ├── leetcode-424.md │ └── leetcode-643.md │ ├── sort │ ├── README.md │ ├── lcof-45.md │ └── lcof-51.md │ ├── stack │ ├── README.md │ ├── lcof-06.md │ ├── lcof-09.md │ ├── lcof-27.md │ └── leetcode-32.md │ ├── string │ ├── README.md │ ├── lcof-05.md │ ├── lcof-20.md │ ├── lcof-38.md │ ├── lcof-45.md │ ├── lcof-58-1.md │ ├── lcof-58-2.md │ ├── lcof-67.md │ ├── leetcode-165.md │ ├── leetcode-205.md │ ├── leetcode-242.md │ ├── leetcode-5.-zui-chang-hui-wen-zi-chuan.md │ ├── leetcode-5.md │ ├── leetcode-678.-you-xiao-de-kuo-hao-zi-fu-chuan.md │ └── leetcode-830.md │ ├── template.md │ └── thread.md ├── android ├── basic │ ├── README.md │ ├── activity.md │ ├── android-advance.md │ ├── android-basic.md │ ├── four.md │ ├── kai-yuan-kuang-jia.md │ ├── simulate.md │ └── ui.md ├── interview-question.md ├── interview-question │ ├── README.md │ └── question-draft.md └── readme.md ├── computer-network ├── basic │ ├── README.md │ ├── cn-application-layer │ │ ├── README.md │ │ └── http.md │ ├── cn-link-layer.md │ ├── cn-network-layer.md │ ├── cn-physical-layer.md │ ├── cn-summary.md │ └── cn-transport-layer.md ├── interview-question.md ├── interview-question │ ├── README.md │ └── interview-question-a.md └── readme.md ├── database ├── basic.md ├── basic │ ├── README.md │ ├── database-basics.md │ └── sql.md ├── interview-question.md └── readme.md ├── docs └── images │ └── logo.png ├── interview ├── alibaba │ ├── README.md │ ├── hr.md │ └── other.md ├── bytedance-collect │ ├── README.md │ ├── algorithm.md │ ├── android.md │ ├── computer-network.md │ ├── database.md │ ├── ios.md │ ├── java.md │ ├── os.md │ ├── other.md │ └── xiang-mu.md ├── bytedance-interview-collect │ ├── README.md │ ├── before │ │ ├── README.md │ │ ├── zi-jie-ke-hu-duan-kai-fa-mian-jing.md │ │ ├── zi-jie-ti-qian-pi-an-zhuo-ke-hu-duan-jia-mian-si-mian.md │ │ ├── zi-jie-ti-qian-pi-ke-hu-duan-android-yi-mian-mian-jing.md │ │ ├── zi-jie-ti-qian-pi-ke-hu-duan-kai-fa-yi-mian-er-mian.md │ │ ├── zi-jie-ti-qian-pi-ke-hu-duan-yi-er-san-mian-mian-jing-yi-liang.md │ │ ├── zi-jie-ti-qian-pi-yi-dong-duan-mian-jing-13-mian-yi-na-yi-xiang-shu.md │ │ ├── zi-jie-tiao-dong-de-xiao-zhao-mian-shi-jing-sui-ti-qian-pi-mian-bi-shi.md │ │ ├── zi-jie-tiao-dong-dou-yin-android-ke-hu-duan-yi-er-san-mian-mian-jing.md │ │ ├── zi-jie-tiao-dong-ke-hu-duan-kai-fa-liang-ci-yi-lun-you-21-jie-qiu-zhao.md │ │ ├── zi-jie-tiao-dong-ke-hu-duan-kai-fa-ti-qian-pi-yi-mian-liang-jing.md │ │ ├── zi-jie-tiao-dong-ti-qian-pi-an-zhuo-ke-hu-duan-yi-er-san-si-+hr-mian-yi-yi-xiang-shu.md │ │ └── zi-jie-tiao-dong-ti-qian-pi-ke-hu-duan-zhi-er-mian-liang-tou-jing.md │ ├── intern │ │ ├── README.md │ │ ├── android │ │ │ ├── 2019-chun-zhao-shi-xi-android-mian-shi-zong-jie-hou-xu-zai-fa-qiu-zhao-zong-jie.md │ │ │ ├── 2020-ji-shu-kai-fa-gang-mian-jing-teng-xun-zi-jie-tiao-dong-yi-offer.md │ │ │ ├── 21-jie-qiu-zhao-zi-jie-an-zhuo-kai-fa-shi-xi-sheng-mian-jing.md │ │ │ ├── README.md │ │ │ ├── bat-ji-qi-java-an-zhuo-shu-qi-shi-xi-mian-jing-hui-zong.md │ │ │ ├── tou-tiao-san-mian-mian-jin-+hr-yi-shang-an-gan-xie-ge-wei-niu-you-de-bang-zhu.md │ │ │ ├── xi-gua-shi-pin-yi-mian.md │ │ │ ├── yi-dong-ke-hu-duan-kai-fa-dou-yin-mian-jing.md │ │ │ ├── zi-jie-an-zhuo-shi-xi-yi-mian.md │ │ │ ├── zi-jie-an-zhuo-yi-mian-mian-jing.md │ │ │ ├── zi-jie-dou-yin-yi-mian-ke-hu-duan-kai-fa.md │ │ │ ├── zi-jie-ke-hu-duan-an-zhuo-kai-fa-san-mian-mian-jing.md │ │ │ ├── zi-jie-ke-hu-duan-kai-fa-yi-mian.md │ │ │ ├── zi-jie-ke-hu-duan-shen-qi-er-mian.md │ │ │ ├── zi-jie-ke-hu-duan-shu-qi-shi-xi-yi-mian-mian-jing.md │ │ │ ├── zi-jie-ke-hu-duan-yi-er-mian-mian-jing-xia-zhou-san-mian.md │ │ │ ├── zi-jie-shi-xi-mian-jin.md │ │ │ ├── zi-jie-tiao-dong-an-zhuo-hou-duan-shi-xi-5-lun-mian-jing.md │ │ │ ├── zi-jie-tiao-dong-an-zhuo-ke-hu-duan-mian-jing-an-zhuo-kai-fa-ling-jing-yan.md │ │ │ ├── zi-jie-tiao-dong-an-zhuo-ke-hu-duan-mian-jing.md │ │ │ ├── zi-jie-tiao-dong-an-zhuo-ri-chang-shi-xi-sheng-liang-jing.md │ │ │ ├── zi-jie-tiao-dong-an-zhuo-shi-xi-yi-er-mian-mian-jing.md │ │ │ ├── zi-jie-tiao-dong-an-zhuo-shu-jia-shi-xi-yi-mian.md │ │ │ ├── zi-jie-tiao-dong-andriod-fang-xiang-er-mian-mian-jing.md │ │ │ ├── zi-jie-tiao-dong-android-ke-hu-duan-yi-mian-liang-jing.md │ │ │ ├── zi-jie-tiao-dong-android-ke-hu-duan-yi-san-mian-yi-shou-dao-offer.md │ │ │ ├── zi-jie-tiao-dong-android-shi-xi-mian-jing.md │ │ │ ├── zi-jie-tiao-dong-android-shi-xi-sheng-yi-mian-er-mian.md │ │ │ ├── zi-jie-tiao-dong-ke-hu-duan-mian-shi-jing-li.md │ │ │ ├── zi-jie-tiao-dong-ke-hu-duan-shi-xi-sheng-15-mian-mian-jing.md │ │ │ ├── zi-jie-tiao-dong-ke-hu-duan-yi-er-mian-mian-jing.md │ │ │ ├── zi-jie-tiao-dong-ke-hu-duan-yi-mian-mian-jing.md │ │ │ ├── zi-jie-tiao-dong-shu-qi-shi-xi-android-yi-er-san-hr-mian-jing-offer.md │ │ │ ├── zi-jie-tiao-dong-tou-tiao-android-kai-fa-shi-xi-sheng-mian-shi.md │ │ │ └── zi-jie-tiao-dong-xiao-lv-gong-cheng-ti-qian-pi-android-shi-xi-mian-jing.md │ │ └── ios │ │ │ ├── 21-jie-da-san-dou-yin-ios-yi-mian-er-mian-san-mian-mian-jing-gua-hr.md │ │ │ ├── 21-jie-zi-jie-ios-kai-fa-ri-chang-shi-xi-yi-er-san-mian-mian-jing-yi-na-offer.md │ │ │ ├── README.md │ │ │ ├── dou-yin-ios-shu-qi-shi-xi-guo-jing-wen-le-an-zhuo.md │ │ │ ├── ios-shi-xi-mian-jing-zi-jie-mei-tuaneli-mo-gu-jie.md │ │ │ ├── zi-jie-dong-che-di-ios-shi-xi-yi-mian-mian-jing.md │ │ │ ├── zi-jie-fei-shu-ios-ke-hu-duan-er-mian-mian-jing-yi-oc.md │ │ │ ├── zi-jie-fei-shu-ios-ke-hu-duan-ri-chang-shi-xi-mian-jing-yi-er-mian-+hr-mian.md │ │ │ ├── zi-jie-fei-shu-ios-ke-hu-duan-shi-xi-yi-mian-mian-jing.md │ │ │ ├── zi-jie-ios-dong-che-di-shi-xi-san-mian-yi-guo.md │ │ │ ├── zi-jie-ios-ke-hu-duan-shi-xi-123-mian-jing.md │ │ │ ├── zi-jie-ios-ke-hu-duan-shi-xi-mian-jing.md │ │ │ ├── zi-jie-ios-ke-hu-duan-shi-xi-san-ci-ji-shu-mian-mian-jing.md │ │ │ ├── zi-jie-ios-shen-zhen-shi-xi-yi-mian-mian-jing.md │ │ │ ├── zi-jie-ke-hu-duan-san-mian-wan-cheng-hou-liang-tian-jie-dao-hr-dian-hua-xu-yuan-offer.md │ │ │ ├── zi-jie-san-mian-wen-ti-zheng-li.md │ │ │ ├── zi-jie-tiao-dong-fei-shu-ios-kai-fa-yi-er-mian.md │ │ │ ├── zi-jie-tiao-dong-ios-kai-fa-shi-xi-mian-jing-nei-fu-tou-di-jing-yan-yu-zong-jie.md │ │ │ ├── zi-jie-tiao-dong-ios-ke-hu-duan-ri-chang-shi-xi-yi-er-san-mian-liang-jing.md │ │ │ ├── zi-jie-tiao-dong-ios-ke-hu-duan-shi-xi-3+hr-mian-jing-yi-na-offer.md │ │ │ ├── zi-jie-tiao-dong-ios-ke-hu-duan-shi-xi-mian-jing.md │ │ │ ├── zi-jie-tiao-dong-ios-ke-hu-duan-shi-xi-sheng-mian-jing.md │ │ │ ├── zi-jie-tiao-dong-ios-ke-hu-duan-yi-er-san-si-+hr-mian-yi-shou-dao-offer.md │ │ │ ├── zi-jie-tiao-dong-ios-ri-chang-shi-xi-san-mian-+hr-mian-gua.md │ │ │ └── zi-jie-tiao-dong-mian-jing-ios-kai-fa-da-san-shu-qi-shi-xi-yi-shou-offer.md │ └── official │ │ ├── 2020-nian-zi-jie-tiao-dong-qiu-zhao-mian-jing-dou-yin-quan-zhan-yi-oc.md │ │ ├── README.md │ │ ├── pyer-ling-ji-chu-zi-jie-tiao-dong-ke-hu-duan-mian-shi.md │ │ ├── shang-hai-dou-yin-ke-hu-duan-kai-fa-mian-jing.md │ │ ├── untitled.md │ │ ├── zi-jie-jiao-yu-ke-hu-duan-yi-er-mian-qiu-ge-offer.md │ │ ├── zi-jie-ke-hu-duan-dou-yin-yi-er-san-mian-liang-jing.md │ │ ├── zi-jie-ke-hu-duan-ji-hu-wu-an-zhuo-ji-chu-san-mian-mian-jing.md │ │ ├── zi-jie-ke-hu-duan-san-mian-mian-jing-fen-xiang-qiu-yi-ge-yi-xiang-shu-yi-shou-dao-yi-xiang-shu.md │ │ ├── zi-jie-ke-hu-duan-san-si-mian-mian-jing-yi-oc-geng-xin-yi-you-jian.md │ │ ├── zi-jie-ke-hu-duan-yi-er-mian-mian-jing-xu-yuan-san-mian.md │ │ ├── zi-jie-ke-hu-duan-yi-er-san-mian-mian-jing-yi-shou-dao-yi-xiang-shu.md │ │ ├── zi-jie-shang-hai-dou-yin-ke-hu-duan.md │ │ ├── zi-jie-shi-pin-jia-gou-yi-mian-liang-jing-an-zhuo.md │ │ ├── zi-jie-tiao-dong-an-zhuo-gong-cheng-shi-yi-mian-liang.md │ │ ├── zi-jie-tiao-dong-ke-hu-duan-kai-fa-yi-mian-+-er-mian.md │ │ └── zi-jie-tiao-dong-ke-hu-duan-yi-mian-er-mian-liang-jing.md ├── readme.md ├── readme │ ├── 777-interview.md │ ├── 777-interview │ │ ├── README.md │ │ ├── alibaba.md │ │ ├── bytedance.md │ │ ├── meituan.md │ │ └── tencent.md │ └── README.md └── tencent │ ├── README.md │ ├── before.md │ ├── intern.md │ └── official.md ├── java ├── basics │ ├── README.md │ ├── basic.md │ ├── concurrence.md │ ├── container.md │ ├── io.md │ └── jvm.md ├── interview-question.md ├── ji-chu-zhi-shi.md └── readme.md ├── javascript ├── chang-jian-wen-ti.md ├── ji-chu-zhi-shi.md └── jian-jie.md ├── moon └── shang-hai-wai-qi-hui-zong.md ├── os ├── basic │ ├── README.md │ ├── deadlock.md │ ├── device.md │ ├── link.md │ ├── memory.md │ ├── process.md │ └── summary.md ├── interview-question.md └── readme.md ├── other ├── design-patterns.md ├── design-patterns │ ├── README.md │ ├── mvc-mvp-mvvm.md │ └── singleton.md ├── git.md ├── resume.md └── zhi-li-ti.md ├── resume ├── readme.md └── resume.md └── site ├── 404.html ├── Android └── index.html ├── Java └── index.html ├── Kotlin └── index.html ├── assets ├── images │ └── favicon.png ├── javascripts │ ├── bundle.b39636ac.min.js │ ├── bundle.b39636ac.min.js.map │ ├── lunr │ │ ├── min │ │ │ ├── lunr.ar.min.js │ │ │ ├── lunr.da.min.js │ │ │ ├── lunr.de.min.js │ │ │ ├── lunr.du.min.js │ │ │ ├── lunr.es.min.js │ │ │ ├── lunr.fi.min.js │ │ │ ├── lunr.fr.min.js │ │ │ ├── lunr.hu.min.js │ │ │ ├── lunr.it.min.js │ │ │ ├── lunr.ja.min.js │ │ │ ├── lunr.jp.min.js │ │ │ ├── lunr.multi.min.js │ │ │ ├── lunr.nl.min.js │ │ │ ├── lunr.no.min.js │ │ │ ├── lunr.pt.min.js │ │ │ ├── lunr.ro.min.js │ │ │ ├── lunr.ru.min.js │ │ │ ├── lunr.stemmer.support.min.js │ │ │ ├── lunr.sv.min.js │ │ │ ├── lunr.tr.min.js │ │ │ └── lunr.vi.min.js │ │ └── tinyseg.min.js │ ├── vendor.d710d30a.min.js │ ├── vendor.d710d30a.min.js.map │ └── worker │ │ ├── search.a68abb33.min.js │ │ └── search.a68abb33.min.js.map └── stylesheets │ ├── main.fe0cca5b.min.css │ ├── main.fe0cca5b.min.css.map │ ├── palette.a46bcfb3.min.css │ └── palette.a46bcfb3.min.css.map ├── images └── logo.png ├── index.html ├── search └── search_index.json ├── sitemap.xml ├── sitemap.xml.gz ├── 操作系统 └── index.html ├── 数据库 └── index.html ├── 数据结构与算法 ├── index.html ├── 剑指Offer │ ├── lcof-03 │ │ └── index.html │ ├── lcof-04 │ │ └── index.html │ ├── lcof-05 │ │ └── index.html │ ├── lcof-06 │ │ └── index.html │ ├── lcof-07 │ │ └── index.html │ ├── lcof-09 │ │ └── index.html │ ├── lcof-10-1 │ │ └── index.html │ ├── lcof-10-2 │ │ └── index.html │ ├── lcof-11 │ │ └── index.html │ ├── lcof-12 │ │ └── index.html │ ├── lcof-13 │ │ └── index.html │ ├── lcof-14-2 │ │ └── index.html │ ├── lcof-14 │ │ └── index.html │ ├── lcof-15 │ │ └── index.html │ ├── lcof-16 │ │ └── index.html │ ├── lcof-17 │ │ └── index.html │ ├── lcof-18 │ │ └── index.html │ ├── lcof-19 │ │ └── index.html │ ├── lcof-20 │ │ └── index.html │ ├── lcof-21 │ │ └── index.html │ ├── lcof-22 │ │ └── index.html │ ├── lcof-24 │ │ └── index.html │ ├── lcof-25 │ │ └── index.html │ ├── lcof-26 │ │ └── index.html │ ├── lcof-27 │ │ └── index.html │ ├── lcof-28 │ │ └── index.html │ ├── lcof-29 │ │ └── index.html │ ├── lcof-30 │ │ └── index.html │ ├── lcof-31 │ │ └── index.html │ ├── lcof-32-1 │ │ └── index.html │ ├── lcof-32-2 │ │ └── index.html │ ├── lcof-32-3 │ │ └── index.html │ ├── lcof-33 │ │ └── index.html │ ├── lcof-34 │ │ └── index.html │ ├── lcof-46 │ │ └── index.html │ └── lcof-54 │ │ └── index.html ├── 力扣-中等 │ ├── leetcode-1014 │ │ └── index.html │ ├── leetcode-120 │ │ └── index.html │ ├── leetcode-139 │ │ └── index.html │ ├── leetcode-153 │ │ └── index.html │ ├── leetcode-16 │ │ └── index.html │ ├── leetcode-2 │ │ └── index.html │ ├── leetcode-215 │ │ └── index.html │ ├── leetcode-238 │ │ └── index.html │ ├── leetcode-309 │ │ └── index.html │ ├── leetcode-338 │ │ └── index.html │ ├── leetcode-343 │ │ └── index.html │ ├── leetcode-63 │ │ └── index.html │ ├── leetcode-64 │ │ └── index.html │ ├── leetcode-718 │ │ └── index.html │ ├── leetcode-785 │ │ └── index.html │ ├── leetcode-837 │ │ └── index.html │ ├── leetcode-95 │ │ └── index.html │ ├── leetcode-96 │ │ └── index.html │ └── leetcode-990 │ │ └── index.html ├── 力扣-困难 │ ├── leetcode-128 │ │ └── index.html │ ├── leetcode-154 │ │ └── index.html │ ├── leetcode-174 │ │ └── index.html │ ├── leetcode-32 │ │ └── index.html │ ├── leetcode-329 │ │ └── index.html │ ├── leetcode-44 │ │ └── index.html │ └── leetcode-97 │ │ └── index.html └── 力扣-简单 │ ├── leetcode-104 │ └── index.html │ ├── leetcode-108 │ └── index.html │ ├── leetcode-112 │ └── index.html │ ├── leetcode-350 │ └── index.html │ └── leetcode-9 │ └── index.html ├── 简历 └── index.html ├── 计算机网络 ├── 1. 综述 │ └── index.html ├── 2. 物理层 │ └── index.html ├── 3. 链路层 │ └── index.html ├── 4. 网络层 │ └── index.html ├── 5. 传输层 │ └── index.html ├── 6. 应用层 │ └── index.html └── index.html └── 面经 ├── index.html └── 模拟面试 └── Interview 1 └── index.html /.gitbook/assets/IMG_5080 (1).gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/IMG_5080 (1).gif -------------------------------------------------------------------------------- /.gitbook/assets/JavaGuide面试突击版.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/JavaGuide面试突击版.pdf -------------------------------------------------------------------------------- /.gitbook/assets/Xnip2021-02-04_19-53-57.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/Xnip2021-02-04_19-53-57.jpg -------------------------------------------------------------------------------- /.gitbook/assets/Xnip2021-02-04_19-54-31.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/Xnip2021-02-04_19-54-31.jpg -------------------------------------------------------------------------------- /.gitbook/assets/image (1).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (1).png -------------------------------------------------------------------------------- /.gitbook/assets/image (10).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (10).png -------------------------------------------------------------------------------- /.gitbook/assets/image (11).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (11).png -------------------------------------------------------------------------------- /.gitbook/assets/image (12).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (12).png -------------------------------------------------------------------------------- /.gitbook/assets/image (13).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (13).png -------------------------------------------------------------------------------- /.gitbook/assets/image (14).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (14).png -------------------------------------------------------------------------------- /.gitbook/assets/image (15).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (15).png -------------------------------------------------------------------------------- /.gitbook/assets/image (16).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (16).png -------------------------------------------------------------------------------- /.gitbook/assets/image (17).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (17).png -------------------------------------------------------------------------------- /.gitbook/assets/image (18).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (18).png -------------------------------------------------------------------------------- /.gitbook/assets/image (19) (1).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (19) (1).png -------------------------------------------------------------------------------- /.gitbook/assets/image (19) (2).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (19) (2).png -------------------------------------------------------------------------------- /.gitbook/assets/image (19) (3).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (19) (3).png -------------------------------------------------------------------------------- /.gitbook/assets/image (19).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (19).png -------------------------------------------------------------------------------- /.gitbook/assets/image (2).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (2).png -------------------------------------------------------------------------------- /.gitbook/assets/image (20).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (20).png -------------------------------------------------------------------------------- /.gitbook/assets/image (21).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (21).png -------------------------------------------------------------------------------- /.gitbook/assets/image (22).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (22).png -------------------------------------------------------------------------------- /.gitbook/assets/image (23).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (23).png -------------------------------------------------------------------------------- /.gitbook/assets/image (24).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (24).png -------------------------------------------------------------------------------- /.gitbook/assets/image (25).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (25).png -------------------------------------------------------------------------------- /.gitbook/assets/image (26).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (26).png -------------------------------------------------------------------------------- /.gitbook/assets/image (27).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (27).png -------------------------------------------------------------------------------- /.gitbook/assets/image (28) (1).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (28) (1).png -------------------------------------------------------------------------------- /.gitbook/assets/image (28) (2).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (28) (2).png -------------------------------------------------------------------------------- /.gitbook/assets/image (28).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (28).png -------------------------------------------------------------------------------- /.gitbook/assets/image (29) (1).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (29) (1).png -------------------------------------------------------------------------------- /.gitbook/assets/image (29).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (29).png -------------------------------------------------------------------------------- /.gitbook/assets/image (3).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (3).png -------------------------------------------------------------------------------- /.gitbook/assets/image (30).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (30).png -------------------------------------------------------------------------------- /.gitbook/assets/image (31).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (31).png -------------------------------------------------------------------------------- /.gitbook/assets/image (32).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (32).png -------------------------------------------------------------------------------- /.gitbook/assets/image (33).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (33).png -------------------------------------------------------------------------------- /.gitbook/assets/image (34).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (34).png -------------------------------------------------------------------------------- /.gitbook/assets/image (35) (1).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (35) (1).png -------------------------------------------------------------------------------- /.gitbook/assets/image (35) (2).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (35) (2).png -------------------------------------------------------------------------------- /.gitbook/assets/image (35).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (35).png -------------------------------------------------------------------------------- /.gitbook/assets/image (36).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (36).png -------------------------------------------------------------------------------- /.gitbook/assets/image (37) (1).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (37) (1).png -------------------------------------------------------------------------------- /.gitbook/assets/image (37).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (37).png -------------------------------------------------------------------------------- /.gitbook/assets/image (38).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (38).png -------------------------------------------------------------------------------- /.gitbook/assets/image (39).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (39).png -------------------------------------------------------------------------------- /.gitbook/assets/image (4).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (4).png -------------------------------------------------------------------------------- /.gitbook/assets/image (40).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (40).png -------------------------------------------------------------------------------- /.gitbook/assets/image (41).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (41).png -------------------------------------------------------------------------------- /.gitbook/assets/image (42).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (42).png -------------------------------------------------------------------------------- /.gitbook/assets/image (43).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (43).png -------------------------------------------------------------------------------- /.gitbook/assets/image (44).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (44).png -------------------------------------------------------------------------------- /.gitbook/assets/image (45).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (45).png -------------------------------------------------------------------------------- /.gitbook/assets/image (46).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (46).png -------------------------------------------------------------------------------- /.gitbook/assets/image (47).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (47).png -------------------------------------------------------------------------------- /.gitbook/assets/image (48).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (48).png -------------------------------------------------------------------------------- /.gitbook/assets/image (49) (1).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (49) (1).png -------------------------------------------------------------------------------- /.gitbook/assets/image (49).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (49).png -------------------------------------------------------------------------------- /.gitbook/assets/image (5).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (5).png -------------------------------------------------------------------------------- /.gitbook/assets/image (50).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (50).png -------------------------------------------------------------------------------- /.gitbook/assets/image (51).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (51).png -------------------------------------------------------------------------------- /.gitbook/assets/image (52).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (52).png -------------------------------------------------------------------------------- /.gitbook/assets/image (53) (1).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (53) (1).png -------------------------------------------------------------------------------- /.gitbook/assets/image (53).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (53).png -------------------------------------------------------------------------------- /.gitbook/assets/image (54).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (54).png -------------------------------------------------------------------------------- /.gitbook/assets/image (55).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (55).png -------------------------------------------------------------------------------- /.gitbook/assets/image (56).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (56).png -------------------------------------------------------------------------------- /.gitbook/assets/image (57).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (57).png -------------------------------------------------------------------------------- /.gitbook/assets/image (58).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (58).png -------------------------------------------------------------------------------- /.gitbook/assets/image (59).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (59).png -------------------------------------------------------------------------------- /.gitbook/assets/image (6) (1).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (6) (1).png -------------------------------------------------------------------------------- /.gitbook/assets/image (6).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (6).png -------------------------------------------------------------------------------- /.gitbook/assets/image (60).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (60).png -------------------------------------------------------------------------------- /.gitbook/assets/image (61).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (61).png -------------------------------------------------------------------------------- /.gitbook/assets/image (62).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (62).png -------------------------------------------------------------------------------- /.gitbook/assets/image (63).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (63).png -------------------------------------------------------------------------------- /.gitbook/assets/image (64).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (64).png -------------------------------------------------------------------------------- /.gitbook/assets/image (65).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (65).png -------------------------------------------------------------------------------- /.gitbook/assets/image (66).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (66).png -------------------------------------------------------------------------------- /.gitbook/assets/image (67).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (67).png -------------------------------------------------------------------------------- /.gitbook/assets/image (68).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (68).png -------------------------------------------------------------------------------- /.gitbook/assets/image (69).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (69).png -------------------------------------------------------------------------------- /.gitbook/assets/image (7).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (7).png -------------------------------------------------------------------------------- /.gitbook/assets/image (70).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (70).png -------------------------------------------------------------------------------- /.gitbook/assets/image (71).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (71).png -------------------------------------------------------------------------------- /.gitbook/assets/image (72).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (72).png -------------------------------------------------------------------------------- /.gitbook/assets/image (73).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (73).png -------------------------------------------------------------------------------- /.gitbook/assets/image (74).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (74).png -------------------------------------------------------------------------------- /.gitbook/assets/image (75).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (75).png -------------------------------------------------------------------------------- /.gitbook/assets/image (76).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (76).png -------------------------------------------------------------------------------- /.gitbook/assets/image (77).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (77).png -------------------------------------------------------------------------------- /.gitbook/assets/image (78).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (78).png -------------------------------------------------------------------------------- /.gitbook/assets/image (79).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (79).png -------------------------------------------------------------------------------- /.gitbook/assets/image (8).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (8).png -------------------------------------------------------------------------------- /.gitbook/assets/image (80).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (80).png -------------------------------------------------------------------------------- /.gitbook/assets/image (81).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (81).png -------------------------------------------------------------------------------- /.gitbook/assets/image (82).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (82).png -------------------------------------------------------------------------------- /.gitbook/assets/image (9) (1).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (9) (1).png -------------------------------------------------------------------------------- /.gitbook/assets/image (9) (2).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (9) (2).png -------------------------------------------------------------------------------- /.gitbook/assets/image (9).png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image (9).png -------------------------------------------------------------------------------- /.gitbook/assets/image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/image.png -------------------------------------------------------------------------------- /.gitbook/assets/img_5080-1-.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/img_5080-1-.gif -------------------------------------------------------------------------------- /.gitbook/assets/javaguide-mian-shi-tu-ji-ban-.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/javaguide-mian-shi-tu-ji-ban-.pdf -------------------------------------------------------------------------------- /.gitbook/assets/xnip2021-02-04_19-53-57.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/xnip2021-02-04_19-53-57.jpg -------------------------------------------------------------------------------- /.gitbook/assets/xnip2021-02-04_19-54-31.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/.gitbook/assets/xnip2021-02-04_19-54-31.jpg -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | */.DS_Store 3 | */*/.DS_Store -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 关于这个仓库 3 | --- 4 | 5 | # 🎯 ᐕ)୨ 戳我戳我 6 | 7 | ![](<.gitbook/assets/IMG\_5080 (1).gif>) 8 | 9 | 仓库启动时间:2020年6月29日 10 | 11 | 这里是777的2021年校招准备仓库,由于手上有活,没有完整的时间块用于准备校招,正处于断断续续的复习整理阶段,本笔记还不太完善,希望到2021年6月能比较丰满啦! 12 | 13 | [点击此处在线阅读校招笔记](https://hishark777.gitbook.io/777-interview-notes/) 14 | 15 | ## 1. 时间节点 16 | 17 | 本人是 ECNU 2019级软件工程专硕,学制2.5年,秋招时间是2021年6月—10月。 字节跳动等互联网厂子的提前批招聘在6月中旬就会开始,持续一到两个月。 18 | 19 | 春招找实习2021年3月—4月,已去阿里实习,[点击查看面筋](interview/readme/777-interview.md)。 20 | 21 | Update:阿里转正过了懒得面了,秋招拜拜。 22 | 23 | ### 1.1 重磅更新 2023/06/25 24 | 25 | 一年互联网打工人已萌生跑路想法,所以本仓库重启,准备加入外企社招面试模块,哦嚯嚯。 26 | 27 | ## 2. 开库目的 28 | 29 | 准备了一遭校招总要留下点东西,给自己以后复盘也好,给同样在准备校招的朋友们用以参考也好,总会创造一点价值的吧。 30 | 31 | ## 3. 帮忙捉虫 32 | 33 | 如果发现了什么错误麻烦[提个issue](https://github.com/hishark/Android-Interview/issues/new)哦,阿里嘎多~:partying\_face: 34 | -------------------------------------------------------------------------------- /algorithm/common-question/README.md: -------------------------------------------------------------------------------- 1 | # 常见问题 2 | 3 | 感觉每个厂子的风格还是有点不一样的。 4 | 5 | 像字节基本不问智力题,腾讯还挺喜欢问。 6 | 7 | 一道的题目解法不一定要求全部掌握,当然知道的越多越好,但是面试时能无 bug 的写出一种就差不多了,总比写不出来要好嘛,面试结果还是会综合整场面试表现来判定的。 8 | 9 | {% content-ref url="algorithm-tencent.md" %} 10 | [algorithm-tencent.md](algorithm-tencent.md) 11 | {% endcontent-ref %} 12 | 13 | {% content-ref url="algorithm-bytedance.md" %} 14 | [algorithm-bytedance.md](algorithm-bytedance.md) 15 | {% endcontent-ref %} 16 | 17 | LeetCode 企业题库: 18 | 19 | {% embed url="https://blog.nowcoder.net/lingo/20178" %} 20 | 21 | -------------------------------------------------------------------------------- /algorithm/lcof/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: (4/5) 3 | --- 4 | 5 | # 剑指Offer 6 | 7 | -------------------------------------------------------------------------------- /algorithm/lcof/lcof-10-1.md: -------------------------------------------------------------------------------- 1 | # 10-I. 斐波那契数列【DP】 2 | 3 | ## 1. [问题](https://leetcode-cn.com/problems/fei-bo-na-qi-shu-lie-lcof/) 4 | 5 | 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下: 6 | 7 | F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 N > 1. 斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。 8 | 9 | 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。 10 | 11 | 示例 1: 12 | 13 | ``` 14 | 输入:n = 2 15 | 输出:1 16 | ``` 17 | 18 | 示例 2: 19 | 20 | ``` 21 | 输入:n = 5 22 | 输出:5 23 | ``` 24 | 25 | 提示: 26 | 27 | * 0 <= n <= 100 28 | 29 | ## 2. 解法 - DP 30 | 31 | ### 2.1 Java 32 | 33 | ```java 34 | class Solution { 35 | public int fib(int n) { 36 | if (n==0 || n==1) 37 | return n; 38 | int[] res = new int[n+1]; 39 | res[0] = 0; 40 | res[1] = 1; 41 | for(int i=2;i<=n;i++) 42 | res[i] = (res[i-1] + res[i-2]) % 1000000007; 43 | return res[n]; 44 | } 45 | } 46 | ``` 47 | 48 | ### 2.2 Kotlin 49 | 50 | ```kotlin 51 | class Solution { 52 | fun fib(n: Int): Int { 53 | if (n == 0 || n == 1) 54 | return n 55 | val res = IntArray(n + 1) 56 | res[0] = 0 57 | res[1] = 1 58 | for (i in 2..n) 59 | res[i] = (res[i - 1] + res[i - 2]) % 1000000007 60 | return res[n] 61 | } 62 | } 63 | ``` 64 | 65 | ## 3. 参考 66 | 67 | * [https://leetcode-cn.com/problems/fei-bo-na-qi-shu-lie-lcof/](https://leetcode-cn.com/problems/fei-bo-na-qi-shu-lie-lcof/) 68 | -------------------------------------------------------------------------------- /algorithm/lcof/lcof-10-2.md: -------------------------------------------------------------------------------- 1 | # 10-II. 青蛙跳台阶问题【DP】 2 | 3 | ## 1. [问题](https://leetcode-cn.com/problems/qing-wa-tiao-tai-jie-wen-ti-lcof/) 4 | 5 | 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 6 | 7 | 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。 8 | 9 | 示例 1: 10 | 11 | ``` 12 | 输入:n = 2 13 | 输出:2 14 | ``` 15 | 16 | 示例 2: 17 | 18 | ``` 19 | 输入:n = 7 20 | 输出:21 21 | ``` 22 | 23 | 示例 3: 24 | 25 | ``` 26 | 输入:n = 0 27 | 输出:1 28 | ``` 29 | 30 | 提示: 31 | 32 | * 0 <= n <= 100 33 | 34 | ## 2. 解法 - DP 35 | 36 | ### 2.1 Java 37 | 38 | ```java 39 | // dp 40 | class Solution { 41 | public int numWays(int n) { 42 | // 状态数组 43 | int[] dp = new int[n+1]; 44 | 45 | // 边界值 46 | if (n==0 || n==1) 47 | return 1; 48 | 49 | dp[0] = 1; 50 | dp[1] = 1; 51 | 52 | // 状态转移方程 53 | for (int i=2;i<=n;i++) { 54 | dp[i] = (dp[i-1] + dp[i-2]) % 1000000007; 55 | } 56 | 57 | return dp[n]; 58 | } 59 | } 60 | ``` 61 | 62 | ### 2.2 Kotlin 63 | 64 | ```kotlin 65 | // dp 66 | class Solution { 67 | fun numWays(n: Int): Int { 68 | // 状态数组 69 | val dp = IntArray(n + 1) 70 | 71 | // 边界值 72 | if (n == 0 || n == 1) 73 | return 1 74 | 75 | dp[0] = 1 76 | dp[1] = 1 77 | 78 | // 状态转移方程 79 | for (i in 2..n) { 80 | dp[i] = (dp[i - 1] + dp[i - 2]) % 1000000007 81 | } 82 | 83 | return dp[n] 84 | } 85 | } 86 | ``` 87 | 88 | ## 3. 参考 89 | 90 | * [https://leetcode-cn.com/problems/qing-wa-tiao-tai-jie-wen-ti-lcof/](https://leetcode-cn.com/problems/qing-wa-tiao-tai-jie-wen-ti-lcof/) 91 | -------------------------------------------------------------------------------- /algorithm/lcof/lcof-17.md: -------------------------------------------------------------------------------- 1 | # \*17. 打印从1到最大的n位数 2 | 3 | ## 1. [问题](https://leetcode-cn.com/problems/da-yin-cong-1dao-zui-da-de-nwei-shu-lcof/) 4 | 5 | 输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。 6 | 7 | 示例 1: 8 | 9 | ``` 10 | 输入: n = 1 11 | 输出: [1,2,3,4,5,6,7,8,9] 12 | ``` 13 | 14 | 说明: 15 | 16 | * 用返回一个整数列表来代替打印 17 | * n 为正整数 18 | 19 | ## 2. 解法 - 无脑法 20 | 21 | > 考虑大数好复杂哦现在不想看,先搁置:[分治解法/全排列 清晰图解](https://leetcode-cn.com/problems/da-yin-cong-1dao-zui-da-de-nwei-shu-lcof/solution/mian-shi-ti-17-da-yin-cong-1-dao-zui-da-de-n-wei-2/) 22 | 23 | ### 2.1 Java 24 | 25 | ```java 26 | class Solution { 27 | public int[] printNumbers(int n) { 28 | int max = 0; 29 | while (n != 0) { 30 | max = max * 10 + 9; // 直接 10^n-1就好啦 31 | n--; 32 | } 33 | int[] ans = new int[max]; 34 | for (int i=1;i<=max;i++) { 35 | ans[i-1] = i; 36 | } 37 | return ans; 38 | } 39 | } 40 | ``` 41 | 42 | ### 2.2 Kotlin 43 | 44 | ```kotlin 45 | class Solution { 46 | fun printNumbers(n: Int): IntArray { 47 | var n = n 48 | var max = 0 49 | while (n != 0) { 50 | max = max * 10 + 9 51 | n-- 52 | } 53 | val ans = IntArray(max) 54 | for (i in 1..max) { 55 | ans[i - 1] = i 56 | } 57 | return ans 58 | } 59 | } 60 | ``` 61 | 62 | ## 3. 参考 63 | 64 | * [https://leetcode-cn.com/problems/da-yin-cong-1dao-zui-da-de-nwei-shu-lcof/](https://leetcode-cn.com/problems/da-yin-cong-1dao-zui-da-de-nwei-shu-lcof/) 65 | -------------------------------------------------------------------------------- /algorithm/lcof/lcof-44.md: -------------------------------------------------------------------------------- 1 | # 44. 数字序列中某一位的数字【找规律】 2 | 3 | ## 1. [问题](https://leetcode-cn.com/problems/shu-zi-xu-lie-zhong-mou-yi-wei-de-shu-zi-lcof/) 4 | 5 | 数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。 6 | 7 | 请写一个函数,求任意第n位对应的数字。 8 | 9 | **示例 1:** 10 | 11 | ``` 12 | 输入:n = 3 13 | 输出:3 14 | ``` 15 | 16 | **示例 2:** 17 | 18 | ``` 19 | 输入:n = 11 20 | 输出:0 21 | ``` 22 | 23 | **限制:** 24 | 25 | * `0 <= n < 2^31` 26 | 27 | ## 2. 标签 28 | 29 | * 数学 30 | * 找规律 31 | 32 | ## 3. 解法 33 | 34 | > 吐了,找规律我阵亡。 35 | 36 | ### 3.1 Java 37 | 38 | ```java 39 | class Solution { 40 | public int findNthDigit(int n) { 41 | // 数字的位数,比如 777 的位数为 3 42 | int digit = 1; 43 | 44 | // 放弃了,为什么要有找规律这种玩意- - 45 | } 46 | } 47 | ``` 48 | 49 | ### 3.2 Kotlin 50 | 51 | ```kotlin 52 | class Solution { 53 | fun findNthDigit(n: Int): Int { 54 | // 数字的位数,比如 777 的位数为 3 55 | val digit = 1 56 | 57 | // 放弃了,为什么要有找规律这种玩意- - 58 | } 59 | } 60 | ``` 61 | 62 | ### 3.3 复杂度分析 63 | 64 | * 时间复杂度 `O(?)` :你猜。 65 | * 空间复杂度 `O(?)` :你再猜。 66 | 67 | ## 4. 参考 68 | 69 | * [https://leetcode-cn.com/problems/shu-zi-xu-lie-zhong-mou-yi-wei-de-shu-zi-lcof/](https://leetcode-cn.com/problems/shu-zi-xu-lie-zhong-mou-yi-wei-de-shu-zi-lcof/) 70 | * [https://leetcode-cn.com/problems/shu-zi-xu-lie-zhong-mou-yi-wei-de-shu-zi-lcof/solution/mian-shi-ti-44-shu-zi-xu-lie-zhong-mou-yi-wei-de-6/](https://leetcode-cn.com/problems/shu-zi-xu-lie-zhong-mou-yi-wei-de-shu-zi-lcof/solution/mian-shi-ti-44-shu-zi-xu-lie-zhong-mou-yi-wei-de-6/) 71 | -------------------------------------------------------------------------------- /algorithm/lcof/lcof-58-2.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: test 3 | --- 4 | 5 | # 58 - II. 左旋转字符串【字符串】 6 | 7 | ## 1. [问题](https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/) 8 | 9 | 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。 10 | 11 | **示例 1:** 12 | 13 | ``` 14 | 输入: s = "abcdefg", k = 2 15 | 输出: "cdefgab" 16 | ``` 17 | 18 | **示例 2:** 19 | 20 | ``` 21 | 输入: s = "lrloseumgh", k = 6 22 | 输出: "umghlrlose" 23 | ``` 24 | 25 | **限制:** 26 | 27 | * `1 <= k < s.length <= 10000` 28 | 29 | ## 2. 标签 30 | 31 | * 字符串 32 | 33 | ## 3. 解法 34 | 35 | ### 3.1 Java 36 | 37 | > 用 StringBuilder 或者 String 都一个路子。 38 | 39 | ```java 40 | class Solution { 41 | public String reverseLeftWords(String s, int n) { 42 | String ans = ""; 43 | for (int i = n; i < s.length(); i++) { 44 | ans += s.charAt(i); 45 | } 46 | for (int i = 0; i < n; i++) { 47 | ans += s.charAt(i); 48 | } 49 | return ans; 50 | } 51 | } 52 | ``` 53 | 54 | 两个循环可以用一个求余操作写在一起: 55 | 56 | ```java 57 | for(int i = n; i < n + s.length(); i++) 58 | ans += s.charAt(i % s.length()); 59 | ``` 60 | 61 | ### 3.2 Kotlin 62 | 63 | ```kotlin 64 | class Solution { 65 | fun reverseLeftWords(s: String, n: Int): String { 66 | var ans = "" 67 | for (i in n until s.length) { 68 | ans += s[i] 69 | } 70 | for (i in 0 until n) { 71 | ans += s[i] 72 | } 73 | return ans 74 | } 75 | } 76 | ``` 77 | 78 | ### 3.3 复杂度分析 79 | 80 | * 时间复杂度 `O(N)` :线性遍历字符串。 81 | * 空间复杂度 `O(N)` :字符串至少占用 `O(N)` 的额外存储 82 | 83 | ## 4. 参考 84 | 85 | * [https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/](https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/) 86 | * [https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/solution/mian-shi-ti-58-ii-zuo-xuan-zhuan-zi-fu-chuan-qie-p/](https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/solution/mian-shi-ti-58-ii-zuo-xuan-zhuan-zi-fu-chuan-qie-p/) 87 | -------------------------------------------------------------------------------- /algorithm/lcof/lcof-62.md: -------------------------------------------------------------------------------- 1 | # 62. 圆圈中最后剩下的数字【约瑟夫环】 2 | 3 | ## 1. [问题](https://leetcode-cn.com/problems/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-lcof/) 4 | 5 | 0,1,...,n - 1 这 n 个数字排成一个圆圈,从数字 0 开始,每次从这个圆圈里删除第 m 个数字。求出这个圆圈里剩下的最后一个数字。 6 | 7 | 例如,0、1、2、3、4 这 5 个数字组成一个圆圈,从数字 0 开始每次删除第 3 个数字,则删除的前 4 个数字依次是 2、0、4、1,因此最后剩下的数字是 3。 8 | 9 | **示例 1:** 10 | 11 | ``` 12 | 输入: n = 5, m = 3 13 | 输出: 3 14 | ``` 15 | 16 | **示例 2:** 17 | 18 | ``` 19 | 输入: n = 10, m = 17 20 | 输出: 2 21 | ``` 22 | 23 | **限制:** 24 | 25 | * `1 <= n <= 10^5` 26 | * `1 <= m <= 10^6` 27 | 28 | ## 2. 标签 29 | 30 | * 数学 31 | 32 | ## 3. 解法 - 约瑟夫环 33 | 34 | ### 3.1 Java 35 | 36 | ```java 37 | class Solution { 38 | public int lastRemaining(int n, int m) { 39 | // 倒推 40 | // 最后一轮只剩下一个元素了,它的下标一定为0 41 | int res = 0; 42 | // 最后一轮只剩下两个人,所以从 2 开始反推 43 | for (int i = 2; i <= n; i++) { 44 | res = (res + m) % i; 45 | } 46 | return res; 47 | } 48 | } 49 | ``` 50 | 51 | ### 3.2 Kotlin 52 | 53 | ```kotlin 54 | class Solution { 55 | fun lastRemaining(n: Int, m: Int): Int { 56 | var res = 0 57 | // 最后一轮只剩下两个人,所以从 2 开始反推 58 | for (i in 2..n) { 59 | res = (res + m) % i 60 | } 61 | return res 62 | } 63 | } 64 | ``` 65 | 66 | ### 3.3 复杂度分析 67 | 68 | * 时间复杂度 `O(n)` :循环花费了 `O(n)` 的时间。 69 | * 空间复杂度 `O(1)` :变量只占用了常数大小的额外存储空间。 70 | 71 | ## 4. 参考 72 | 73 | * [https://leetcode-cn.com/problems/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-lcof/](https://leetcode-cn.com/problems/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-lcof/) 74 | * [https://leetcode-cn.com/problems/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-lcof/solution/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-by-lee/](https://leetcode-cn.com/problems/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-lcof/solution/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-by-lee/) 75 | -------------------------------------------------------------------------------- /algorithm/lcof/lcof-64.md: -------------------------------------------------------------------------------- 1 | # 64. 求1+2+…+n【短路】 2 | 3 | ## 1. [问题](https://leetcode-cn.com/problems/qiu-12n-lcof/) 4 | 5 | 求 `1+2+...+n` ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 6 | 7 | **示例 1:** 8 | 9 | ``` 10 | 输入: n = 3 11 | 输出: 6 12 | ``` 13 | 14 | **示例 2:** 15 | 16 | ``` 17 | 输入: n = 9 18 | 输出: 45 19 | ``` 20 | 21 | **限制:** 22 | 23 | * `1 <= n <= 10000` 24 | 25 | ## 2. 标签 26 | 27 | * 位运算 28 | * 递归 29 | 30 | ## 3. 解法 31 | 32 | > 递归时一般都会使用条件判断语句来决定递归的出口,由于题目限制无法使用,我们可以使用逻辑运算符的短路性质来决定递归的出口。 33 | 34 | ### 3.1 Java 35 | 36 | ```java 37 | class Solution { 38 | public int sumNums(int n) { 39 | /** 40 | * A && B 41 | * A: n > 0 42 | * B: n += sumNums(n - 1) 43 | * 可以将判断是否为递归的出口看作 A 部分 44 | * 将递归的主体函数看作 B 部分 45 | * 1. 如果不是递归出口,也就是 n > 0,那么返回 True,继续执行 B 部分,进行递归 46 | * 2. 如果是递归出口,也就是 n == 0,那么返回 False,短路,不再执行 B 部分,结束递归 47 | */ 48 | boolean flag = n > 0 && (n += sumNums(n - 1)) > 0; // 这里其实 >0 <0 ==0 都可以,只是为了凑出一个表达式然后语法报错 49 | return n; 50 | } 51 | } 52 | ``` 53 | 54 | ### 3.2 Kotlin 55 | 56 | ```kotlin 57 | ? 58 | ``` 59 | 60 | ### 3.3 复杂度分析 61 | 62 | * 时间复杂度 `O(n)` :递归函数总共递归了 n 次,每次递归中计算操作的时间复杂度为 `O(1)`,因此总时间复杂度为 `O(n)`。 63 | * 空间复杂度 `O(n)` :递归函数的空间复杂度取决于递归调用栈的深度,这里深度为 `O(n)`。 64 | 65 | ## 4. 参考 66 | 67 | * [https://leetcode-cn.com/problems/qiu-12n-lcof/](https://leetcode-cn.com/problems/qiu-12n-lcof/) 68 | * [https://leetcode-cn.com/problems/qiu-12n-lcof/solution/qiu-12n-by-leetcode-solution/](https://leetcode-cn.com/problems/qiu-12n-lcof/solution/qiu-12n-by-leetcode-solution/) 69 | * [https://leetcode-cn.com/problems/qiu-12n-lcof/solution/mian-shi-ti-64-qiu-1-2-nluo-ji-fu-duan-lu-qing-xi-/](https://leetcode-cn.com/problems/qiu-12n-lcof/solution/mian-shi-ti-64-qiu-1-2-nluo-ji-fu-duan-lu-qing-xi-/) 70 | -------------------------------------------------------------------------------- /algorithm/readme.md: -------------------------------------------------------------------------------- 1 | # 简介 2 | 3 | ## 算法 4 | 5 | 本部分中汇总了我刷题期间的笔记以及解题代码,总共包括两部分: 6 | 7 | 1. 按照题型刷题 8 | 2. 《剑指Offer》 9 | 10 | 我的笔记中没有**纯文字的题解**,只有实现代码以及详细的代码注释,每一题末尾都附上了参考链接,想要看纯文字题解可以直接点击参考链接查看大佬们的详细解析。 11 | 12 | ## 刷题网站 13 | 14 | * [力扣](https://leetcode-cn.com) 15 | * [牛客](https://www.nowcoder.com/activity/oj) 16 | 17 | ## 参考 18 | 19 | * [《剑指Offer》第2版](https://book.douban.com/subject/27008702/) 20 | * [力扣万能的题解区](https://leetcode-cn.com) 21 | 22 | ## 注意事项 23 | 24 | * 力扣所有的题目不需要用户自己处理输入输出,能够实现函数功能即可,然而目前大多数互联网公司都在牛客上进行笔试以及面试,笔试中许多题目需要自己来处理输入输出,这个问题需要注意,别等开始校招都忘记 Scanner 要怎么用了。面试的时候比较随机,根据面试官的面试风格视情况而定,总而言之必须熟悉掌握如何处理输入输出的问题。 25 | -------------------------------------------------------------------------------- /algorithm/tag/README.md: -------------------------------------------------------------------------------- 1 | # 题型 2 | 3 | -------------------------------------------------------------------------------- /algorithm/tag/array/README.md: -------------------------------------------------------------------------------- 1 | # 数组 2 | 3 | -------------------------------------------------------------------------------- /algorithm/tag/array/leetcode-442.-shu-zu-zhong-zhong-fu-de-shu-ju.md: -------------------------------------------------------------------------------- 1 | # LEETCODE 442. 数组中重复的数据 2 | 3 | ## [题目](https://leetcode-cn.com/problems/find-all-duplicates-in-an-array/) 4 | 5 | 略 6 | 7 | ## 解法 8 | 9 | ```java 10 | import java.util.List; 11 | 12 | class Solution { 13 | public List findDuplicates(int[] nums) { 14 | /** 15 | * 由条件1 ≤ a[i] ≤ n,可知出 nums 中的所有值可以和其索引有对应关系 16 | * nums[i] 的正负值可表示数字 i+1 是否出现,若出现则将其变为负数,即 nums[i] = -nums[i]。默认为正整数,即未出现。 17 | */ 18 | List res = new ArrayList<>(); 19 | for (int num: nums) { 20 | int absNum = Math.abs(num); 21 | // 当 nums[ absNum - 1]为负数时,表示 absNum 已经出现过一次了 22 | if (nums[absNum-1] < 0) { 23 | res.add(absNum); 24 | } else { 25 | // 当 nums[ abdNum - 1]为正数时,表示 absNum 还没有出现过 26 | nums[absNum-1] *= -1; 27 | } 28 | } 29 | return res; 30 | } 31 | } 32 | ``` 33 | 34 | ## 参考 35 | 36 | * [https://leetcode-cn.com/problems/find-all-duplicates-in-an-array/solution/you-ya-shi-xian-yuan-di-ha-xi-qiao-yong-p8p43/](https://leetcode-cn.com/problems/find-all-duplicates-in-an-array/solution/you-ya-shi-xian-yuan-di-ha-xi-qiao-yong-p8p43/) 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /algorithm/tag/backtrack/README.md: -------------------------------------------------------------------------------- 1 | # 回溯 2 | 3 | 维基百科:[回溯法](https://zh.wikipedia.org/wiki/%E5%9B%9E%E6%BA%AF%E6%B3%95) 4 | 5 | 百度百科:[回溯法](https://baike.baidu.com/item/%E5%9B%9E%E6%BA%AF%E6%B3%95/86074) 6 | 7 | 回溯法(英语:backtracking)是暴力搜索法中的一种。 8 | 9 | 回溯法采用试错的思想,它尝试分步的去解决一个问题。在分步解决问题的过程中,当它通过尝试发现现有的分步答案不能得到有效的正确的解答的时候,它将取消上一步甚至是上几步的计算,再通过其它的可能的分步解答再次尝试寻找问题的答案。回溯法通常用最简单的递归方法来实现,在反复重复上述的步骤后可能出现两种情况: 10 | 11 | * 找到一个可能存在的正确的答案 12 | * 在尝试了所有可能的分步方法后宣告该问题没有答案 13 | 14 | 在最坏的情况下,回溯法会导致一次复杂度为指数时间的计算。\ 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /algorithm/tag/bfs/README.md: -------------------------------------------------------------------------------- 1 | # 广度优先搜索 2 | 3 | -------------------------------------------------------------------------------- /algorithm/tag/bignum.md: -------------------------------------------------------------------------------- 1 | # 大数 2 | 3 | -------------------------------------------------------------------------------- /algorithm/tag/binarysearch/README.md: -------------------------------------------------------------------------------- 1 | # 二分查找 2 | 3 | -------------------------------------------------------------------------------- /algorithm/tag/binarytree/README.md: -------------------------------------------------------------------------------- 1 | # 二叉树 2 | 3 | -------------------------------------------------------------------------------- /algorithm/tag/binarytree/leetcode-108.md: -------------------------------------------------------------------------------- 1 | # LEETCODE 108. 将有序数组转换为二叉搜索树 2 | 3 | ## [1. 问题](https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree/) 4 | 5 | 将一个按照升序排列的有序数组,转换为一棵高度平衡二叉搜索树。 6 | 7 | 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。 8 | 9 | 示例: 10 | 11 | ``` 12 | 给定有序数组: [-10,-3,0,5,9], 13 | 一个可能的答案是:[0,-3,9,-10,null,5],它可以表示下面这个高度平衡二叉搜索树: 14 | 0 15 | / \ 16 | -3 9 17 | / / 18 | -10 5 19 | ``` 20 | 21 | ## 2. 解法 - DFS 22 | 23 | ```java 24 | /** 25 | * Definition for a binary tree node. 26 | * public class TreeNode { 27 | * int val; 28 | * TreeNode left; 29 | * TreeNode right; 30 | * TreeNode(int x) { val = x; } 31 | * } 32 | */ 33 | class Solution { 34 | public TreeNode sortedArrayToBST(int[] nums) { 35 | return dfs(nums, 0, nums.length - 1); 36 | } 37 | 38 | public TreeNode dfs(int[] nums, int left, int right) { 39 | // 如果左大于右,返回null 40 | if (left>right) 41 | return null; 42 | 43 | // 找中点 44 | int mid = left + (right - left) / 2; 45 | 46 | // 中点位置的元素作为根结点 47 | TreeNode root = new TreeNode(nums[mid]); 48 | 49 | // 递归构建左子树 50 | root.left = dfs(nums, left, mid - 1); 51 | 52 | // 递归构建右子树 53 | root.right = dfs(nums, mid + 1, right); 54 | 55 | // 返回根结点 56 | return root; 57 | } 58 | } 59 | ``` 60 | 61 | ## 3. 参考 62 | 63 | * [https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree/](https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree/) 64 | * [https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree/solution/jian-dan-di-gui-bi-xu-miao-dong-by-sweetiee/](https://leetcode-cn.com/problems/convert-sorted-array-to-binary-search-tree/solution/jian-dan-di-gui-bi-xu-miao-dong-by-sweetiee/) 65 | * [https://leetcode-cn.com/problems/convert-sorted-list-to-binary-search-tree/solution/you-xu-lian-biao-zhuan-huan-er-cha-sou-suo-shu-by-/](https://leetcode-cn.com/problems/convert-sorted-list-to-binary-search-tree/solution/you-xu-lian-biao-zhuan-huan-er-cha-sou-suo-shu-by-/) 66 | 67 | ## 4. 笔记 68 | 69 | ![](https://777blog.oss-cn-shanghai.aliyuncs.com/blog%20pic/leetcode-108.jpg) 70 | -------------------------------------------------------------------------------- /algorithm/tag/binarytree/leetcode-144.-er-cha-shu-de-qian-xu-bian-li.md: -------------------------------------------------------------------------------- 1 | # # LEETCODE 144. 二叉树的前序遍历 2 | 3 | {% embed url="https://leetcode-cn.com/problems/binary-tree-preorder-traversal/" %} 4 | 5 | -------------------------------------------------------------------------------- /algorithm/tag/binarytree/leetcode-543.md: -------------------------------------------------------------------------------- 1 | # LEETCODE 543. 二叉树的直径 2 | 3 | ## 1. [问题](https://leetcode-cn.com/problems/diameter-of-binary-tree/) 4 | 5 | 给定一棵二叉树,你需要计算它的直径长度。一棵二叉树的直径长度是任意两个结点路径长度中的最大值。这条路径可能穿过也可能不穿过根结点。 6 | 7 | 示例 : 给定二叉树 8 | 9 | ``` 10 | 1 11 | / \ 12 | 2 3 13 | / \ 14 | 4 5 15 | ``` 16 | 17 | 返回 **3**, 它的长度是路径 \[4,2,1,3] 或者 \[5,2,1,3]。 18 | 19 | **注意:**两结点之间的路径长度是以它们之间边的数目表示。 20 | 21 | ## 2. 标签 22 | 23 | * 二叉树 24 | * DFS 25 | 26 | ## 3. 解法 - DFS 27 | 28 | ### 3.1 Java 29 | 30 | ```java 31 | /** 32 | * Definition for a binary tree node. 33 | * public class TreeNode { 34 | * int val; 35 | * TreeNode left; 36 | * TreeNode right; 37 | * TreeNode(int x) { val = x; } 38 | * } 39 | */ 40 | class Solution { 41 | // 二叉树的直径 42 | int maxNodeNum; 43 | 44 | public int diameterOfBinaryTree(TreeNode root) { 45 | // 最开始的时候只有根结点,所以为1 46 | maxNodeNum = 1; 47 | // 深度优先搜索整棵树 48 | dfs(root); 49 | // 结点数减去 1 就是路径长度啦 50 | return maxNodeNum - 1; 51 | } 52 | 53 | // 求二叉树的直径 54 | public int dfs(TreeNode root) { 55 | // 判空 56 | if (root == null) { 57 | return 0; 58 | } 59 | // 左子树的直径 60 | int left = dfs(root.left); 61 | // 右子树的直径 62 | int right = dfs(root.right); 63 | // 更新当前的最大直径 64 | maxNodeNum = Math.max(maxNodeNum, left + right + 1); 65 | // 当前树的直径即左右子树的较大者 + 1 66 | return Math.max(left, right) + 1; 67 | } 68 | } 69 | ``` 70 | 71 | ### 3.2 复杂度分析 72 | 73 | * 时间复杂度 `O(N)` :其中 N 为二叉树的节点数,即遍历一棵二叉树的时间复杂度,每个结点只被访问一次。 74 | * 空间复杂度 `O(H)` :其中 H 为二叉树的高度。由于递归函数在递归过程中需要为每一层递归函数分配栈空间,所以这里需要额外的空间且该空间取决于递归的深度,而递归的深度显然为二叉树的高度,并且每次递归调用的函数里又只用了常数个变量,所以所需空间复杂度为 `O(H)`。 75 | 76 | ## 4. 参考 77 | 78 | * [https://leetcode-cn.com/problems/diameter-of-binary-tree/](https://leetcode-cn.com/problems/diameter-of-binary-tree/) 79 | * [https://leetcode-cn.com/problems/diameter-of-binary-tree/solution/er-cha-shu-de-zhi-jing-by-leetcode-solution/](https://leetcode-cn.com/problems/diameter-of-binary-tree/solution/er-cha-shu-de-zhi-jing-by-leetcode-solution/) 80 | -------------------------------------------------------------------------------- /algorithm/tag/binarytree/leetcode-617.-he-bing-er-cha-shu.md: -------------------------------------------------------------------------------- 1 | # LEETCODE 617. 合并二叉树 2 | 3 | ## 1. [问题](https://leetcode-cn.com/problems/merge-two-binary-trees/) 4 | 5 | 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。 6 | 7 | 你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。 8 | 9 | 示例1: 10 | 11 | ```text 12 | 输入: 13 | Tree 1 Tree 2 14 | 1 2 15 | / \ / \ 16 | 3 2 1 3 17 | / \ \ 18 | 5 4 7 19 | 输出: 20 | 合并后的树: 21 | 3 22 | / \ 23 | 4 5 24 | / \ \ 25 | 5 4 7 26 | ``` 27 | 28 | **注意:** 合并必须从两个树的根节点开始。 29 | 30 | ## 2. 标签 31 | 32 | * 二叉树 33 | * DFS 34 | 35 | ## 3. 解法 - DFS 36 | 37 | ### 3.1 Java 38 | 39 | ```java 40 | class Solution { 41 | public TreeNode mergeTrees(TreeNode t1, TreeNode t2) { 42 | // 有一个结点为空,就返回另一个结点 43 | if (t1 == null) { 44 | return t2; 45 | } 46 | if (t2 == null) { 47 | return t1; 48 | } 49 | // 两个结点都不为空,将两个结点的值相加即可 50 | TreeNode root = new TreeNode(t1.val + t2.val); 51 | // 合并了当前结点后,还要对该结点的左右子树分别进行合并 52 | root.left = mergeTrees(t1.left, t2.left); 53 | root.right = mergeTrees(t1.right, t2.right); 54 | // 返回根结点 55 | return root; 56 | } 57 | } 58 | ``` 59 | 60 | ### 3.2 复杂度分析 61 | 62 | * 时间复杂度 `O(min(m,n))` :其中 m 和 n 分别是两个二叉树的节点个数。 63 | * 空间复杂度 `O(min(m,n))` :其中 m 和 n 分别是两个二叉树的节点个数。 64 | 65 | ## 4. 参考 66 | 67 | * [https://leetcode-cn.com/problems/merge-two-binary-trees/](https://leetcode-cn.com/problems/merge-two-binary-trees/) 68 | * [https://leetcode-cn.com/problems/merge-two-binary-trees/solution/he-bing-er-cha-shu-by-leetcode-solution/](https://leetcode-cn.com/problems/merge-two-binary-trees/solution/he-bing-er-cha-shu-by-leetcode-solution/) 69 | 70 | -------------------------------------------------------------------------------- /algorithm/tag/binarytree/leetcode-617.md: -------------------------------------------------------------------------------- 1 | # LEETCODE 617. 合并二叉树 2 | 3 | ## 1. [问题](https://leetcode-cn.com/problems/merge-two-binary-trees/) 4 | 5 | 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。 6 | 7 | 你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。 8 | 9 | 示例1: 10 | 11 | ``` 12 | 输入: 13 | Tree 1 Tree 2 14 | 1 2 15 | / \ / \ 16 | 3 2 1 3 17 | / \ \ 18 | 5 4 7 19 | 输出: 20 | 合并后的树: 21 | 3 22 | / \ 23 | 4 5 24 | / \ \ 25 | 5 4 7 26 | ``` 27 | 28 | **注意:** 合并必须从两个树的根节点开始。 29 | 30 | ## 2. 标签 31 | 32 | * 二叉树 33 | * DFS 34 | 35 | ## 3. 解法 - DFS 36 | 37 | ### 3.1 Java 38 | 39 | ```java 40 | class Solution { 41 | public TreeNode mergeTrees(TreeNode t1, TreeNode t2) { 42 | // 有一个结点为空,就返回另一个结点 43 | if (t1 == null) { 44 | return t2; 45 | } 46 | if (t2 == null) { 47 | return t1; 48 | } 49 | // 两个结点都不为空,将两个结点的值相加即可 50 | TreeNode root = new TreeNode(t1.val + t2.val); 51 | // 合并了当前结点后,还要对该结点的左右子树分别进行合并 52 | root.left = mergeTrees(t1.left, t2.left); 53 | root.right = mergeTrees(t1.right, t2.right); 54 | // 返回根结点 55 | return root; 56 | } 57 | } 58 | ``` 59 | 60 | ### 3.2 复杂度分析 61 | 62 | * 时间复杂度 `O(min(m,n))` :其中 m 和 n 分别是两个二叉树的节点个数。 63 | * 空间复杂度 `O(min(m,n))` :其中 m 和 n 分别是两个二叉树的节点个数。 64 | 65 | ## 4. 参考 66 | 67 | * [https://leetcode-cn.com/problems/merge-two-binary-trees/](https://leetcode-cn.com/problems/merge-two-binary-trees/) 68 | * [https://leetcode-cn.com/problems/merge-two-binary-trees/solution/he-bing-er-cha-shu-by-leetcode-solution/](https://leetcode-cn.com/problems/merge-two-binary-trees/solution/he-bing-er-cha-shu-by-leetcode-solution/) 69 | -------------------------------------------------------------------------------- /algorithm/tag/binarytree/leetcode-96.md: -------------------------------------------------------------------------------- 1 | # LEETCODE 96. 不同的二叉搜索树 2 | 3 | ## 1. [问题](https://leetcode-cn.com/problems/unique-binary-search-trees) 4 | 5 | 给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种? 6 | 7 | 示例: 8 | 9 | ``` 10 | 输入: 3 11 | 输出: 5 12 | 解释: 13 | 给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 14 | 15 | 1 3 3 2 1 16 | \ / / / \ \ 17 | 3 2 1 1 3 2 18 | / / \ \ 19 | 2 1 2 3 20 | ``` 21 | 22 | ## 2. 解法 - 动态规划 23 | 24 | ### 2.1 Java 25 | 26 | ```java 27 | class Solution { 28 | public int numTrees(int n) { 29 | // 状态数组 30 | int[] dp = new int[n+1]; 31 | // 边界条件 32 | dp[0] = 1; 33 | dp[1] = 1; 34 | 35 | // 状态转移方程 36 | for(int i = 2; i <= n; i++) 37 | for(int j = 1; j <= i; j++) 38 | dp[i] += dp[j-1] * dp[i-j]; 39 | 40 | return dp[n]; 41 | } 42 | } 43 | ``` 44 | 45 | ## 3. 参考 46 | 47 | * [https://leetcode-cn.com/problems/unique-binary-search-trees/](https://leetcode-cn.com/problems/unique-binary-search-trees/) 48 | * [https://leetcode-cn.com/problems/unique-binary-search-trees/solution/bu-tong-de-er-cha-sou-suo-shu-by-leetcode-solution/](https://leetcode-cn.com/problems/unique-binary-search-trees/solution/bu-tong-de-er-cha-sou-suo-shu-by-leetcode-solution/) 49 | 50 | ## 4. 笔记 51 | 52 | ![](https://777blog.oss-cn-shanghai.aliyuncs.com/leetcode/leetcode-96-1.jpg) ![](https://777blog.oss-cn-shanghai.aliyuncs.com/leetcode/leetcode-96-2.jpg) 53 | -------------------------------------------------------------------------------- /algorithm/tag/binarytree/leetcode-98.-yan-zheng-er-cha-sou-suo-shu.md: -------------------------------------------------------------------------------- 1 | # # LEETCODE 98. 验证二叉搜索树 2 | 3 | [题目](https://leetcode-cn.com/problems/validate-binary-search-tree/) 4 | -------------------------------------------------------------------------------- /algorithm/tag/bit/README.md: -------------------------------------------------------------------------------- 1 | # 位运算 2 | 3 | -------------------------------------------------------------------------------- /algorithm/tag/bit/leetcode-338.md: -------------------------------------------------------------------------------- 1 | # LEETCODE 338. 比特位计数 2 | 3 | ## [1. 问题](https://leetcode-cn.com/problems/counting-bits/) 4 | 5 | 给定一个非负整数 num。对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数目并将它们作为数组返回。 6 | 7 | 示例 1: 8 | 9 | > 输入: 2 输出: \[0,1,1] 10 | 11 | 示例 2: 12 | 13 | > 输入: 5 输出: \[0,1,1,2,1,2] 14 | 15 | 进阶: 16 | 17 | * 给出时间复杂度为O(n\*sizeof(integer))的解答非常容易。但你可以在线性时间O(n)内用一趟扫描做到吗? 18 | * 要求算法的空间复杂度为O(n)。 19 | * 你能进一步完善解法吗?要求在C++或任何其他语言中不使用任何内置函数(如 C++ 中的 \__builtin_popcount)来执行此操作。 20 | 21 | ## 2. 解法-位运算 22 | 23 | ### Java 24 | 25 | ```java 26 | class Solution { 27 | public int[] countBits(int num) { 28 | int[] ans = new int[num+1]; 29 | ans[0] = 0; 30 | 31 | for (int i=1;i<=num;i++) { 32 | ans[i] = count(i); 33 | } 34 | return ans; 35 | } 36 | 37 | public int count(int n) { 38 | int cnt = 0; 39 | while (n!=0) { 40 | n = n & (n-1); 41 | cnt++; 42 | } 43 | return cnt; 44 | } 45 | } 46 | ``` 47 | 48 | ## 3. 参考 49 | 50 | * [https://leetcode-cn.com/problems/counting-bits/](https://leetcode-cn.com/problems/counting-bits/) 51 | * [https://leetcode-cn.com/problems/counting-bits/solution/bi-te-wei-ji-shu-by-leetcode/](https://leetcode-cn.com/problems/counting-bits/solution/bi-te-wei-ji-shu-by-leetcode/) 52 | 53 | ## 4. 笔记 54 | 55 | ![](https://777blog.oss-cn-shanghai.aliyuncs.com/blog%20pic/leetcode338.JPEG) 56 | -------------------------------------------------------------------------------- /algorithm/tag/bit/leetcode-461.md: -------------------------------------------------------------------------------- 1 | # LEETCODE 461. 汉明距离 2 | 3 | ## 1. [问题](https://leetcode-cn.com/problems/hamming-distance/) 4 | 5 | 两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。 6 | 7 | 给出两个整数 x 和 y,计算它们之间的汉明距离。 8 | 9 | 注意: 0 ≤ x, y < 231. 10 | 11 | 示例: 12 | 13 | ``` 14 | 输入: x = 1, y = 4 15 | 16 | 输出: 2 17 | 18 | 解释: 19 | 1 (0 0 0 1) 20 | 4 (0 1 0 0) 21 | ↑ ↑ 22 | 23 | 上面的箭头指出了对应二进制位不同的位置。 24 | ``` 25 | 26 | ## 2. 标签 27 | 28 | * 位运算 29 | 30 | ## 3. 解法 - 位运算 31 | 32 | ### 3.1 Java 33 | 34 | ```java 35 | class Solution { 36 | public int hammingDistance(int x, int y) { 37 | // 异或值 38 | int xor = x ^ y; 39 | // 汉明距离 40 | int distance = 0; 41 | // 如果异或值为0,那么两个数字完全一致,不需要再计算 42 | while (xor != 0) { 43 | // 逐位判断异或值的每一位 44 | // 如果是1,说明原来两个数字的对应二进制位不同 45 | if (xor % 2 == 1) 46 | distance += 1; 47 | // 每判断完一位就右移一位 48 | xor = xor >> 1; 49 | } 50 | // 返回即可 51 | return distance; 52 | } 53 | } 54 | ``` 55 | 56 | ### 3.2 复杂度分析 57 | 58 | * 时间复杂度 `O(1)` 59 | * 空间复杂度 `O(1)` 60 | 61 | ## 4. 参考 62 | 63 | * [https://leetcode-cn.com/problems/hamming-distance/](https://leetcode-cn.com/problems/hamming-distance/) 64 | * [https://leetcode-cn.com/problems/hamming-distance/solution/yi-ming-ju-chi-by-leetcode/](https://leetcode-cn.com/problems/hamming-distance/solution/yi-ming-ju-chi-by-leetcode/) 65 | -------------------------------------------------------------------------------- /algorithm/tag/design/README.md: -------------------------------------------------------------------------------- 1 | # 设计 2 | 3 | -------------------------------------------------------------------------------- /algorithm/tag/dfs/README.md: -------------------------------------------------------------------------------- 1 | # 深度优先搜索 2 | 3 | -------------------------------------------------------------------------------- /algorithm/tag/dfs/leetcode-207.-ke-cheng-biao.md: -------------------------------------------------------------------------------- 1 | # LEETCODE 207. 课程表 2 | 3 | ## 1. [问题](https://leetcode-cn.com/problems/course-schedule/) 4 | 5 | 你这个学期必须选修 numCourse 门课程,记为 0 到 numCourse-1 。 6 | 7 | 在选修某些课程之前需要一些先修课程。 例如,想要学习课程 0 ,你需要先完成课程 1 ,我们用一个匹配来表示他们:\[0,1] 8 | 9 | 给定课程总量以及它们的先决条件,请你判断是否可能完成所有课程的学习? 10 | 11 | 示例 1: 12 | 13 | ``` 14 | 输入: 2, [[1,0]] 15 | 输出: true 16 | 解释: 总共有 2 门课程。学习课程 1 之前,你需要完成课程 0。所以这是可能的。 17 | ``` 18 | 19 | 示例 2: 20 | 21 | ``` 22 | 输入: 2, [[1,0],[0,1]] 23 | 输出: false 24 | 解释: 总共有 2 门课程。学习课程 1 之前,你需要先完成​课程 0;并且学习课程 0 之前,你还应先完成课程 1。这是不可能的。 25 | ``` 26 | 27 | 提示: 28 | 29 | * 输入的先决条件是由 边缘列表 表示的图形,而不是 邻接矩阵 。详情请参见图的表示法。 30 | * 你可以假定输入的先决条件中没有重复的边。 31 | * 1 <= numCourses <= 10^5 32 | 33 | ## 2. 标签 34 | 35 | * 1 36 | * 2 37 | 38 | ## 3. 解法 39 | 40 | ### 3.1 Java 41 | 42 | ```java 43 | ``` 44 | 45 | ### 3.2 复杂度分析 46 | 47 | * 时间复杂度 `O()` : 48 | * 空间复杂度 `O()` : 49 | 50 | ## 4. 参考 51 | 52 | * [https://leetcode-cn.com/problems/course-schedule/](https://leetcode-cn.com/problems/course-schedule/) 53 | * 2 54 | -------------------------------------------------------------------------------- /algorithm/tag/divide/README.md: -------------------------------------------------------------------------------- 1 | # 分治 2 | 3 | -------------------------------------------------------------------------------- /algorithm/tag/divide/lcof-17.md: -------------------------------------------------------------------------------- 1 | # LCOF 17. 打印从1到最大的n位数 2 | 3 | ## 1. [问题](https://leetcode-cn.com/problems/da-yin-cong-1dao-zui-da-de-nwei-shu-lcof/) 4 | 5 | 输入数字 n,按顺序打印出从 1 到最大的 n 位十进制数。比如输入 3,则打印出 1、2、3 一直到最大的 3 位数 999。 6 | 7 | 示例 1: 8 | 9 | ``` 10 | 输入: n = 1 11 | 输出: [1,2,3,4,5,6,7,8,9] 12 | ``` 13 | 14 | 说明: 15 | 16 | * 用返回一个整数列表来代替打印 17 | * n 为正整数 18 | 19 | ## 2. 解法 - 无脑法 20 | 21 | > 考虑大数好复杂哦现在不想看,先搁置:[分治解法/全排列 清晰图解](https://leetcode-cn.com/problems/da-yin-cong-1dao-zui-da-de-nwei-shu-lcof/solution/mian-shi-ti-17-da-yin-cong-1-dao-zui-da-de-n-wei-2/) 22 | 23 | ### 2.1 Java 24 | 25 | ```java 26 | class Solution { 27 | public int[] printNumbers(int n) { 28 | int max = 0; 29 | while (n != 0) { 30 | max = max * 10 + 9; 31 | n--; 32 | } 33 | int[] ans = new int[max]; 34 | for (int i=1;i<=max;i++) { 35 | ans[i-1] = i; 36 | } 37 | return ans; 38 | } 39 | } 40 | ``` 41 | 42 | ### 2.2 Kotlin 43 | 44 | ```kotlin 45 | class Solution { 46 | fun printNumbers(n: Int): IntArray { 47 | var n = n 48 | var max = 0 49 | while (n != 0) { 50 | max = max * 10 + 9 51 | n-- 52 | } 53 | val ans = IntArray(max) 54 | for (i in 1..max) { 55 | ans[i - 1] = i 56 | } 57 | return ans 58 | } 59 | } 60 | ``` 61 | 62 | ## 3. 参考 63 | 64 | * [https://leetcode-cn.com/problems/da-yin-cong-1dao-zui-da-de-nwei-shu-lcof/](https://leetcode-cn.com/problems/da-yin-cong-1dao-zui-da-de-nwei-shu-lcof/) 65 | -------------------------------------------------------------------------------- /algorithm/tag/dp/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 这里之后总结一下方法论啥的,暂时搁置。 3 | --- 4 | 5 | # 动态规划 6 | 7 | -------------------------------------------------------------------------------- /algorithm/tag/dp/lcof-10-2.md: -------------------------------------------------------------------------------- 1 | # LCOF 10-II. 青蛙跳台阶问题 2 | 3 | ## 1. [问题](https://leetcode-cn.com/problems/qing-wa-tiao-tai-jie-wen-ti-lcof/) 4 | 5 | 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。 6 | 7 | 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。 8 | 9 | 示例 1: 10 | 11 | ``` 12 | 输入:n = 2 13 | 输出:2 14 | ``` 15 | 16 | 示例 2: 17 | 18 | ``` 19 | 输入:n = 7 20 | 输出:21 21 | ``` 22 | 23 | 示例 3: 24 | 25 | ``` 26 | 输入:n = 0 27 | 输出:1 28 | ``` 29 | 30 | 提示: 31 | 32 | * 0 <= n <= 100 33 | 34 | ## 2. 解法 - 动态规划 35 | 36 | ### 2.1 Java 37 | 38 | ```java 39 | // dp 40 | class Solution { 41 | public int numWays(int n) { 42 | // 状态数组 43 | int[] dp = new int[n+1]; 44 | 45 | // 边界值 46 | if (n==0 || n==1) 47 | return 1; 48 | 49 | dp[0] = 1; 50 | dp[1] = 1; 51 | 52 | // 状态转移方程 53 | for (int i=2;i<=n;i++) { 54 | dp[i] = (dp[i-1] + dp[i-2]) % 1000000007; 55 | } 56 | 57 | return dp[n]; 58 | } 59 | } 60 | ``` 61 | 62 | ### 2.2 Kotlin 63 | 64 | ```kotlin 65 | // dp 66 | class Solution { 67 | fun numWays(n: Int): Int { 68 | // 状态数组 69 | val dp = IntArray(n + 1) 70 | 71 | // 边界值 72 | if (n == 0 || n == 1) 73 | return 1 74 | 75 | dp[0] = 1 76 | dp[1] = 1 77 | 78 | // 状态转移方程 79 | for (i in 2..n) { 80 | dp[i] = (dp[i - 1] + dp[i - 2]) % 1000000007 81 | } 82 | 83 | return dp[n] 84 | } 85 | } 86 | ``` 87 | 88 | ## 3. 参考 89 | 90 | * [https://leetcode-cn.com/problems/qing-wa-tiao-tai-jie-wen-ti-lcof/](https://leetcode-cn.com/problems/qing-wa-tiao-tai-jie-wen-ti-lcof/) 91 | -------------------------------------------------------------------------------- /algorithm/tag/dp/leetcode-1014.md: -------------------------------------------------------------------------------- 1 | # LEETCODE 1014. 最佳观光组合 2 | 3 | ## [1. 问题](https://leetcode-cn.com/problems/best-sightseeing-pair/) 4 | 5 | 给定正整数数组 A,A\[i] 表示第 i 个观光景点的评分,并且两个景点 i 和 j 之间的距离为 j - i。 6 | 7 | 一对景点(i < j)组成的观光组合的得分为(A\[i] + A\[j] + i - j):景点的评分之和减去它们两者之间的距离。 8 | 9 | 返回一对观光景点能取得的最高分。 10 | 11 | 示例: 12 | 13 | > 输入:\[8,1,5,2,6] 输出:11 解释:i = 0, j = 2, A\[i] + A\[j] + i - j = 8 + 5 + 0 - 2 = 11 14 | 15 | 提示: 16 | 17 | * 2 <= A.length <= 50000 18 | * 1 <= A\[i] <= 1000 19 | 20 | ## 2. 解法 21 | 22 | ### 2.1 Java 23 | 24 | ```java 25 | class Solution { 26 | public int maxScoreSightseeingPair(int[] A) { 27 | int res = 0; 28 | int preMax = A[0] + 0; //preMax = A[i] + i; 29 | for (int j=1;j 输入: s = "leetcode", wordDict = \["leet", "code"] 输出: true 解释: 返回 true 因为 "leetcode" 可以被拆分成 "leet code"。 15 | 16 | 示例 2: 17 | 18 | > 输入: s = "applepenapple", wordDict = \["apple", "pen"] 输出: true 解释: 返回 true 因为 "applepenapple" 可以被拆分成 "apple pen apple"。注意你可以重复使用字典中的单词。 19 | 20 | 示例 3: 21 | 22 | > 输入: s = "catsandog", wordDict = \["cats", "dog", "sand", "and", "cat"] 输出: false 23 | 24 | ## 2. 解法 25 | 26 | ```java 27 | class Solution { 28 | public boolean wordBreak(String s, List wordDict) { 29 | int length = s.length(); 30 | Set dictSet = new HashSet(wordDict); 31 | 32 | // 状态数组 33 | boolean[] dp = new boolean[length+1]; 34 | 35 | // 边界条件 36 | dp[0] = true; 37 | 38 | // 状态方程 39 | for (int i=1;i<=length;i++) { 40 | for (int j=0;j) 12 | 13 | 示例 1: 14 | 15 | ``` 16 | 输入:m = 3, n = 7 17 | 输出:28 18 | ``` 19 | 20 | 示例 2: 21 | 22 | ``` 23 | 输入:m = 3, n = 2 24 | 输出:3 25 | 解释: 26 | 从左上角开始,总共有 3 条路径可以到达右下角。 27 | 1. 向右 -> 向右 -> 向下 28 | 2. 向右 -> 向下 -> 向右 29 | 3. 向下 -> 向右 -> 向右 30 | ``` 31 | 32 | 示例 3: 33 | 34 | ``` 35 | 输入:m = 7, n = 3 36 | 输出:28 37 | ``` 38 | 39 | 示例 4: 40 | 41 | ``` 42 | 输入:m = 3, n = 3 43 | 输出:6 44 | ``` 45 | 46 | **提示:** 47 | 48 | * `1 <= m, n <= 100` 49 | * 题目数据保证答案小于等于 `2 * 109` 50 | 51 | ## 2. 标签 52 | 53 | * 数组 54 | * 动态规划 55 | 56 | ## 3. 解法 - 动态规划 57 | 58 | ### 3.1 Java 59 | 60 | ```java 61 | class Solution { 62 | public int uniquePaths(int m, int n) { 63 | // 状态数组 64 | // dp[i][j] 表示从左上角走到 [i,j] 的路径总数 65 | int[][] dp = new int[m][n]; 66 | // 初始化第一行,第一行的格子只能通过右移得到 67 | for (int i = 0; i < m; ++i) { 68 | dp[i][0] = 1; 69 | } 70 | // 初始化第一列,第一列的格子只能通过下移得到 71 | for (int j = 0; j < n; ++j) { 72 | dp[0][j] = 1; 73 | } 74 | // 遍历余下的所有格子 75 | for (int i = 1; i < m; ++i) { 76 | for (int j = 1; j < n; ++j) { 77 | // 从左上角走到 [i,j] 的路径数 = 左边的格子的路径数 + 上面的格子的路径数 78 | dp[i][j] = dp[i - 1][j] + dp[i][j - 1]; 79 | } 80 | } 81 | // 返回右下角的路径数即可 82 | return dp[m - 1][n - 1]; 83 | } 84 | } 85 | ``` 86 | 87 | ### 3.2 复杂度分析 88 | 89 | * 时间复杂度 `O(mn)` :双重循环。 90 | * 空间复杂度 `O(mn)` :即为存储所有状态需要的空间 91 | 92 | ## 4. 参考 93 | 94 | * [https://leetcode-cn.com/problems/unique-paths/](https://leetcode-cn.com/problems/unique-paths/) 95 | * [https://leetcode-cn.com/problems/unique-paths/solution/bu-tong-lu-jing-by-leetcode-solution-hzjf/](https://leetcode-cn.com/problems/unique-paths/solution/bu-tong-lu-jing-by-leetcode-solution-hzjf/) 96 | -------------------------------------------------------------------------------- /algorithm/tag/greedy/README.md: -------------------------------------------------------------------------------- 1 | # 贪心 2 | 3 | -------------------------------------------------------------------------------- /algorithm/tag/greedy/leetcode-1046.md: -------------------------------------------------------------------------------- 1 | # LEETCODE 1046. 最后一块石头的重量 2 | 3 | ## 1. [问题](https://leetcode-cn.com/problems/last-stone-weight/) 4 | 5 | 有一堆石头,每块石头的重量都是正整数。 6 | 7 | 每一回合,从中选出两块最重的石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下: 8 | 9 | * 如果 x == y,那么两块石头都会被完全粉碎; 10 | * 如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。 11 | 12 | 最后,最多只会剩下一块石头。返回此石头的重量。如果没有石头剩下,就返回 0。 13 | 14 | **示例:** 15 | 16 | ``` 17 | 输入:[2,7,4,1,8,1] 18 | 输出:1 19 | 解释: 20 | 先选出 7 和 8,得到 1,所以数组转换为 [2,4,1,1,1], 21 | 再选出 2 和 4,得到 2,所以数组转换为 [2,1,1,1], 22 | 接着是 2 和 1,得到 1,所以数组转换为 [1,1,1], 23 | 最后选出 1 和 1,得到 0,最终数组转换为 [1],这就是最后剩下那块石头的重量。 24 | ``` 25 | 26 | **提示:** 27 | 28 | 1. `1 <= stones.length <= 30` 29 | 2. `1 <= stones[i] <= 1000` 30 | 31 | ## 2. 标签 32 | 33 | * 贪心 34 | * 堆 35 | 36 | ## 3. 解法 - 堆 37 | 38 | ### 3.1 Java 39 | 40 | ```java 41 | class Solution { 42 | public int lastStoneWeight(int[] stones) { 43 | // PriorityQueue 默认为小顶堆,所以需要重写 Comparator,变成大顶堆 44 | PriorityQueue queue = new PriorityQueue((x, y) -> y - x); 45 | // 把所有石头塞进大顶堆里 46 | for (int stone : stones) { 47 | queue.offer(stone); 48 | } 49 | // 堆里小于等于1个石头时,停止循环 50 | while (queue.size() > 1) { 51 | // 取出堆顶石头,也就是最重的石头 52 | int stone1 = queue.poll(); 53 | // 取出堆顶石头,也就是次重的石头 54 | int stone2 = queue.poll(); 55 | // 如果二者不相等,把差值再放回堆里 56 | // 如果二者相等,都扔出去 57 | if (stone1 > stone2) { 58 | queue.offer(stone1 - stone2); 59 | } 60 | } 61 | // 此时判断堆是否为空即可 62 | return queue.isEmpty() ? 0 : queue.poll(); 63 | } 64 | } 65 | ``` 66 | 67 | ### 3.2 复杂度分析 68 | 69 | * 时间复杂度 `O(nlogn)` :其中 n 是石头数量。每次从队列中取出元素需要花费 `O(logn)` 的时间,最多共需要粉碎 n 次石头。 70 | * 空间复杂度 `O(n)` :使用了一个 `PriorityQueue` 存放所有石头。 71 | 72 | ## 4. 参考 73 | 74 | * [https://leetcode-cn.com/problems/last-stone-weight](https://leetcode-cn.com/problems/last-stone-weight) 75 | * [https://leetcode-cn.com/problems/last-stone-weight/solution/zui-hou-yi-kuai-shi-tou-de-zhong-liang-b-xgsx/](https://leetcode-cn.com/problems/last-stone-weight/solution/zui-hou-yi-kuai-shi-tou-de-zhong-liang-b-xgsx/) 76 | -------------------------------------------------------------------------------- /algorithm/tag/greedy/leetcode-455.md: -------------------------------------------------------------------------------- 1 | # LEETCODE 455. 分发饼干 2 | 3 | ## 1. [问题](https://leetcode-cn.com/problems/assign-cookies/) 4 | 5 | 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 6 | 7 | 对每个孩子 i,都有一个胃口值 g\[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j,都有一个尺寸 s\[j] 。如果 s\[j] >= g\[i],我们可以将这个饼干 j 分配给孩子 i ,这个孩子会得到满足。你的目标是尽可能满足越多数量的孩子,并输出这个最大数值。 8 | 9 | **示例 1:** 10 | 11 | ``` 12 | 输入: g = [1,2,3], s = [1,1] 13 | 输出: 1 14 | 解释: 15 | 你有三个孩子和两块小饼干,3个孩子的胃口值分别是:1,2,3。 16 | 虽然你有两块小饼干,由于他们的尺寸都是1,你只能让胃口值是1的孩子满足。 17 | 所以你应该输出1。 18 | ``` 19 | 20 | **示例 2:** 21 | 22 | ``` 23 | 输入: g = [1,2], s = [1,2,3] 24 | 输出: 2 25 | 解释: 26 | 你有两个孩子和三块小饼干,2个孩子的胃口值分别是1,2。 27 | 你拥有的饼干数量和尺寸都足以让所有孩子满足。 28 | 所以你应该输出2. 29 | ``` 30 | 31 | 提示: 32 | 33 | * `1 <= g.length <= 3 * 104` 34 | * `0 <= s.length <= 3 * 104` 35 | * `1 <= g[i], s[j] <= 231 - 1` 36 | 37 | ## 2. 标签 38 | 39 | * 贪心 40 | * 排序 41 | 42 | ## 3. 解法 - 贪心 43 | 44 | ### 3.1 Java 45 | 46 | ```java 47 | ``` 48 | 49 | ### 3.2 复杂度分析 50 | 51 | * 时间复杂度 `O()` : 52 | * 空间复杂度 `O()` : 53 | 54 | ## 4. 参考 55 | 56 | * [https://leetcode-cn.com/problems/assign-cookies/](https://leetcode-cn.com/problems/assign-cookies/) 57 | * 2 58 | -------------------------------------------------------------------------------- /algorithm/tag/greedy/leetcode-605.md: -------------------------------------------------------------------------------- 1 | # LEETCODE 605. 种花问题 2 | 3 | ## 1. [问题](https://leetcode-cn.com/problems/can-place-flowers/) 4 | 5 | 假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有。可是,花卉不能种植在相邻的地块上,它们会争夺水源,两者都会死去。 6 | 7 | 给定一个花坛(表示为一个数组包含0和1,其中0表示没种植花,1表示种植了花),和一个数 n 。能否在不打破种植规则的情况下种入 n 朵花?能则返回True,不能则返回False。 8 | 9 | **示例 1:** 10 | 11 | ``` 12 | 输入: flowerbed = [1,0,0,0,1], n = 1 13 | 输出: True 14 | ``` 15 | 16 | **示例 2:** 17 | 18 | ``` 19 | 输入: flowerbed = [1,0,0,0,1], n = 2 20 | 输出: False 21 | ``` 22 | 23 | **注意:** 24 | 25 | 1. 数组内已种好的花不会违反种植规则。 26 | 2. 输入的数组长度范围为 \[1, 20000]。 27 | 3. **n** 是非负整数,且不会超过输入数组的大小。 28 | 29 | ## 2. 标签 30 | 31 | * 贪心 32 | 33 | ## 3. 解法 - 贪心 34 | 35 | ### 3.1 Java 36 | 37 | ```java 38 | public class Solution { 39 | public boolean canPlaceFlowers(int[] flowerbed, int n) { 40 | // 可以种花的数目 41 | int count = 0; 42 | // 从左到右扫描数组 43 | for (int i=0;i= n; 54 | } 55 | } 56 | ``` 57 | 58 | ### 3.2 复杂度分析 59 | 60 | * 时间复杂度 `O(N)` :其中 N 是数组的长度。 61 | * 空间复杂度 `O(1)` :仅使用常数大小的空间。 62 | 63 | ## 4. 参考 64 | 65 | * [https://leetcode-cn.com/problems/can-place-flowers/](https://leetcode-cn.com/problems/can-place-flowers/) 66 | * [https://leetcode-cn.com/problems/can-place-flowers/solution/chong-hua-wen-ti-by-leetcode/](https://leetcode-cn.com/problems/can-place-flowers/solution/chong-hua-wen-ti-by-leetcode/) 67 | -------------------------------------------------------------------------------- /algorithm/tag/hashmap/README.md: -------------------------------------------------------------------------------- 1 | # HashMap 2 | 3 | -------------------------------------------------------------------------------- /algorithm/tag/hashset/README.md: -------------------------------------------------------------------------------- 1 | # HashSet 2 | 3 | -------------------------------------------------------------------------------- /algorithm/tag/heap/README.md: -------------------------------------------------------------------------------- 1 | # 堆 2 | 3 | -------------------------------------------------------------------------------- /algorithm/tag/heap/leetcode-1046.md: -------------------------------------------------------------------------------- 1 | # LEETCODE 1046. 最后一块石头的重量 2 | 3 | ## 1. [问题](https://leetcode-cn.com/problems/last-stone-weight/) 4 | 5 | 有一堆石头,每块石头的重量都是正整数。 6 | 7 | 每一回合,从中选出两块最重的石头,然后将它们一起粉碎。假设石头的重量分别为 x 和 y,且 x <= y。那么粉碎的可能结果如下: 8 | 9 | * 如果 x == y,那么两块石头都会被完全粉碎; 10 | * 如果 x != y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。 11 | 12 | 最后,最多只会剩下一块石头。返回此石头的重量。如果没有石头剩下,就返回 0。 13 | 14 | **示例:** 15 | 16 | ``` 17 | 输入:[2,7,4,1,8,1] 18 | 输出:1 19 | 解释: 20 | 先选出 7 和 8,得到 1,所以数组转换为 [2,4,1,1,1], 21 | 再选出 2 和 4,得到 2,所以数组转换为 [2,1,1,1], 22 | 接着是 2 和 1,得到 1,所以数组转换为 [1,1,1], 23 | 最后选出 1 和 1,得到 0,最终数组转换为 [1],这就是最后剩下那块石头的重量。 24 | ``` 25 | 26 | **提示:** 27 | 28 | 1. `1 <= stones.length <= 30` 29 | 2. `1 <= stones[i] <= 1000` 30 | 31 | ## 2. 标签 32 | 33 | * 贪心 34 | * 堆 35 | 36 | ## 3. 解法 - 堆 37 | 38 | ### 3.1 Java 39 | 40 | ```java 41 | class Solution { 42 | public int lastStoneWeight(int[] stones) { 43 | // PriorityQueue 默认为小顶堆,所以需要重写 Comparator,变成大顶堆 44 | PriorityQueue queue = new PriorityQueue((x, y) -> y - x); 45 | // 把所有石头塞进大顶堆里 46 | for (int stone : stones) { 47 | queue.offer(stone); 48 | } 49 | // 堆里小于等于1个石头时,停止循环 50 | while (queue.size() > 1) { 51 | // 取出堆顶石头,也就是最重的石头 52 | int stone1 = queue.poll(); 53 | // 取出堆顶石头,也就是次重的石头 54 | int stone2 = queue.poll(); 55 | // 如果二者不相等,把差值再放回堆里 56 | // 如果二者相等,都扔出去 57 | if (stone1 > stone2) { 58 | queue.offer(stone1 - stone2); 59 | } 60 | } 61 | // 此时判断堆是否为空即可 62 | return queue.isEmpty() ? 0 : queue.poll(); 63 | } 64 | } 65 | ``` 66 | 67 | ### 3.2 复杂度分析 68 | 69 | * 时间复杂度 `O(nlogn)` :其中 n 是石头数量。每次从队列中取出元素需要花费 `O(logn)` 的时间,最多共需要粉碎 n 次石头。 70 | * 空间复杂度 `O(n)` :使用了一个 `PriorityQueue` 存放所有石头。 71 | 72 | ## 4. 参考 73 | 74 | * [https://leetcode-cn.com/problems/last-stone-weight](https://leetcode-cn.com/problems/last-stone-weight) 75 | * [https://leetcode-cn.com/problems/last-stone-weight/solution/zui-hou-yi-kuai-shi-tou-de-zhong-liang-b-xgsx/](https://leetcode-cn.com/problems/last-stone-weight/solution/zui-hou-yi-kuai-shi-tou-de-zhong-liang-b-xgsx/) 76 | -------------------------------------------------------------------------------- /algorithm/tag/link/README.md: -------------------------------------------------------------------------------- 1 | # 链表 2 | 3 | -------------------------------------------------------------------------------- /algorithm/tag/link/leetcode-19.md: -------------------------------------------------------------------------------- 1 | # LEETCODE 19. 删除链表的倒数第N个节点 2 | 3 | ## 1. [问题](https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/) 4 | 5 | 给定一个链表,删除链表的倒数第 _n _个节点,并且返回链表的头结点。 6 | 7 | **示例:** 8 | 9 | ``` 10 | 给定一个链表: 1->2->3->4->5, 和 n = 2. 11 | 当删除了倒数第二个节点后,链表变为 1->2->3->5. 12 | ``` 13 | 14 | **说明:** 15 | 16 | 给定的 _n_ 保证是有效的。 17 | 18 | **进阶:** 19 | 20 | 你能尝试使用一趟扫描实现吗? 21 | 22 | ## 2. 标签 23 | 24 | * 链表 25 | * 双指针 26 | 27 | ## 3. 解法 - 双指针 28 | 29 | > 快慢指针 30 | 31 | ### 3.1 Java 32 | 33 | ```java 34 | class Solution { 35 | public ListNode removeNthFromEnd(ListNode head, int n) { 36 | // 在 head 前面添加一个空的头结点 37 | ListNode preHead = new ListNode(0, head); 38 | // 快慢指针 39 | ListNode fast = head; 40 | ListNode slow = preHead; 41 | // 快指针先单独移动 n 步 42 | for (int i = 0; i < n; ++i) { 43 | fast = fast.next; 44 | } 45 | // 然后快慢指针一起移动,直到快指针指向空 46 | while (fast != null) { 47 | fast = fast.next; 48 | slow = slow.next; 49 | } 50 | // 此时慢指针的下一个结点就是要删去的结点 51 | // 调整 next 的指向即可删去下一个结点 52 | slow.next = slow.next.next; 53 | // 返回链表 54 | return preHead.next; 55 | } 56 | } 57 | ``` 58 | 59 | ### 3.2 复杂度分析 60 | 61 | * 时间复杂度 `O(n)` :其中 n 是链表的长度。 62 | * 空间复杂度 `O(1)` :原地算法,未占用额外的存储空间。 63 | 64 | ## 4. 参考 65 | 66 | * [https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/](https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/) 67 | * [https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/solution/shan-chu-lian-biao-de-dao-shu-di-nge-jie-dian-b-61/](https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/solution/shan-chu-lian-biao-de-dao-shu-di-nge-jie-dian-b-61/) 68 | -------------------------------------------------------------------------------- /algorithm/tag/link/leetcode-234.-hui-wen-lian-biao.md: -------------------------------------------------------------------------------- 1 | # # LEETCODE 234. 回文链表 2 | 3 | [题目](https://leetcode-cn.com/problems/palindrome-linked-list/) 4 | 5 | 使用快慢指针找到链表中点后,反转后半段链表,再进行比较即可 6 | -------------------------------------------------------------------------------- /algorithm/tag/link/leetcode-237.md: -------------------------------------------------------------------------------- 1 | # LEETCODE 237. 删除链表中的节点 2 | 3 | ## 1. [问题](https://leetcode-cn.com/problems/delete-node-in-a-linked-list/) 4 | 5 | 请编写一个函数,使其可以删除某个链表中给定的(非末尾)节点。传入函数的唯一参数为 要被删除的节点 。 6 | 7 | 现有一个链表 -- head = \[4,5,1,9],它可以表示为: 8 | 9 | ![](<../../../.gitbook/assets/image (55).png>) 10 | 11 | **示例 1:** 12 | 13 | ``` 14 | 输入:head = [4,5,1,9], node = 5 15 | 输出:[4,1,9] 16 | 解释:给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9. 17 | ``` 18 | 19 | **示例 2:** 20 | 21 | ``` 22 | 输入:head = [4,5,1,9], node = 1 23 | 输出:[4,5,9] 24 | 解释:给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链表应变为 4 -> 5 -> 9. 25 | ``` 26 | 27 | **提示:** 28 | 29 | * 链表至少包含两个节点。 30 | * 链表中所有节点的值都是唯一的。 31 | * 给定的节点为非末尾节点并且一定是链表中的一个有效节点。 32 | * 不要从你的函数中返回任何结果。 33 | 34 | ## 2. 标签 35 | 36 | * 链表 37 | 38 | ## 3. 解法 39 | 40 | ### 3.1 Java 41 | 42 | ```java 43 | /** 44 | * Definition for singly-linked list. 45 | * public class ListNode { 46 | * int val; 47 | * ListNode next; 48 | * ListNode(int x) { val = x; } 49 | * } 50 | */ 51 | class Solution { 52 | public void deleteNode(ListNode node) { 53 | node.val = node.next.val; 54 | node.next = node.next.next; 55 | } 56 | } 57 | ``` 58 | 59 | ### 3.2 复杂度分析 60 | 61 | * 时间复杂度 `O(1)` 62 | * 空间复杂度 `O(1)` 63 | 64 | ## 4. 参考 65 | 66 | * [https://leetcode-cn.com/problems/delete-node-in-a-linked-list/](https://leetcode-cn.com/problems/delete-node-in-a-linked-list/) 67 | * [https://leetcode-cn.com/problems/delete-node-in-a-linked-list/solution/shan-chu-lian-biao-zhong-de-jie-dian-by-leetcode/](https://leetcode-cn.com/problems/delete-node-in-a-linked-list/solution/shan-chu-lian-biao-zhong-de-jie-dian-by-leetcode/) 68 | -------------------------------------------------------------------------------- /algorithm/tag/link/leetcode-86.md: -------------------------------------------------------------------------------- 1 | # LEETCODE 86. 分隔链表 2 | 3 | ## 1. [问题](https://leetcode-cn.com/problems/partition-list/) 4 | 5 | 给你一个链表和一个特定值 x ,请你对链表进行分隔,使得所有小于 x 的节点都出现在大于或等于 x 的节点之前。 6 | 7 | 你应当保留两个分区中每个节点的初始相对位置。 8 | 9 | 示例: 10 | 11 | ``` 12 | 输入:head = 1->4->3->2->5->2, x = 3 13 | 输出:1->2->2->4->3->5 14 | ``` 15 | 16 | ## 2. 标签 17 | 18 | * 链表 19 | * 双指针 20 | 21 | ## 3. 解法 - 双指针 22 | 23 | ### 3.1 Java 24 | 25 | ```java 26 | class Solution { 27 | public ListNode partition(ListNode head, int x) { 28 | // 双指针 29 | // left 链表储存小于 x 的结点 30 | ListNode left = new ListNode(0); 31 | // left 会不停地移动,由于后面还需要用到所以使用 leftTmp 记下初始位置 32 | ListNode leftTmp = left; 33 | // right 链表储存大于等于 x 的结点 34 | ListNode right = new ListNode(0); 35 | // right 会不停地移动,由于后面还需要用到所以使用 rightTmp 记下初始位置 36 | ListNode rightTmp = right; 37 | // 遍历链表 38 | while (head != null) { 39 | // 小于 x 的结点全部放到 left 链表中 40 | if (head.val < x) { 41 | left.next = head; 42 | left = left.next; 43 | } else { 44 | // 大于等于 x 的结点全部放到 right 链表中 45 | right.next = head; 46 | right = right.next; 47 | } 48 | // head 移向下一个结点 49 | head = head.next; 50 | } 51 | // 把两个链表串起来即可 52 | right.next = null; 53 | left.next = rightTmp.next; 54 | return leftTmp.next; 55 | } 56 | } 57 | ``` 58 | 59 | ### 3.2 复杂度分析 60 | 61 | * 时间复杂度 `O(n)` :其中 n 是原链表的长度。对该链表进行了一次遍历。 62 | * 空间复杂度 `O(1)` :未开辟新的空间。 63 | 64 | ## 4. 参考 65 | 66 | * [https://leetcode-cn.com/problems/partition-list/](https://leetcode-cn.com/problems/partition-list/) 67 | * [https://leetcode-cn.com/problems/partition-list/solution/fen-ge-lian-biao-by-leetcode-solution-7ade/](https://leetcode-cn.com/problems/partition-list/solution/fen-ge-lian-biao-by-leetcode-solution-7ade/) 68 | -------------------------------------------------------------------------------- /algorithm/tag/math/README.md: -------------------------------------------------------------------------------- 1 | # 数学 2 | 3 | -------------------------------------------------------------------------------- /algorithm/tag/math/lcof-44.md: -------------------------------------------------------------------------------- 1 | # LCOF 44. 数字序列中某一位的数字 2 | 3 | ## 1. [问题](https://leetcode-cn.com/problems/shu-zi-xu-lie-zhong-mou-yi-wei-de-shu-zi-lcof/) 4 | 5 | 数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中,第5位(从下标0开始计数)是5,第13位是1,第19位是4,等等。 6 | 7 | 请写一个函数,求任意第n位对应的数字。 8 | 9 | **示例 1:** 10 | 11 | ``` 12 | 输入:n = 3 13 | 输出:3 14 | ``` 15 | 16 | **示例 2:** 17 | 18 | ``` 19 | 输入:n = 11 20 | 输出:0 21 | ``` 22 | 23 | **限制:** 24 | 25 | * `0 <= n < 2^31` 26 | 27 | ## 2. 标签 28 | 29 | * 数学 30 | * 找规律 31 | 32 | ## 3. 解法 33 | 34 | > 吐了,找规律我阵亡。 35 | 36 | ### 3.1 Java 37 | 38 | ```java 39 | class Solution { 40 | public int findNthDigit(int n) { 41 | // 数字的位数,比如 777 的位数为 3 42 | int digit = 1; 43 | 44 | // 放弃了,为什么要有找规律这种玩意- - 45 | } 46 | } 47 | ``` 48 | 49 | ### 3.2 Kotlin 50 | 51 | ```kotlin 52 | class Solution { 53 | fun findNthDigit(n: Int): Int { 54 | // 数字的位数,比如 777 的位数为 3 55 | val digit = 1 56 | 57 | // 放弃了,为什么要有找规律这种玩意- - 58 | } 59 | } 60 | ``` 61 | 62 | ### 3.3 复杂度分析 63 | 64 | * 时间复杂度 `O(?)` :你猜。 65 | * 空间复杂度 `O(?)` :你再猜。 66 | 67 | ## 4. 参考 68 | 69 | * [https://leetcode-cn.com/problems/shu-zi-xu-lie-zhong-mou-yi-wei-de-shu-zi-lcof/](https://leetcode-cn.com/problems/shu-zi-xu-lie-zhong-mou-yi-wei-de-shu-zi-lcof/) 70 | * [https://leetcode-cn.com/problems/shu-zi-xu-lie-zhong-mou-yi-wei-de-shu-zi-lcof/solution/mian-shi-ti-44-shu-zi-xu-lie-zhong-mou-yi-wei-de-6/](https://leetcode-cn.com/problems/shu-zi-xu-lie-zhong-mou-yi-wei-de-shu-zi-lcof/solution/mian-shi-ti-44-shu-zi-xu-lie-zhong-mou-yi-wei-de-6/) 71 | -------------------------------------------------------------------------------- /algorithm/tag/math/lcof-62.md: -------------------------------------------------------------------------------- 1 | # LCOF 62. 圆圈中最后剩下的数字 2 | 3 | ## 1. [问题](https://leetcode-cn.com/problems/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-lcof/) 4 | 5 | 0,1,...,n - 1 这 n 个数字排成一个圆圈,从数字 0 开始,每次从这个圆圈里删除第 m 个数字。求出这个圆圈里剩下的最后一个数字。 6 | 7 | 例如,0、1、2、3、4 这 5 个数字组成一个圆圈,从数字 0 开始每次删除第 3 个数字,则删除的前 4 个数字依次是 2、0、4、1,因此最后剩下的数字是 3。 8 | 9 | **示例 1:** 10 | 11 | ``` 12 | 输入: n = 5, m = 3 13 | 输出: 3 14 | ``` 15 | 16 | **示例 2:** 17 | 18 | ``` 19 | 输入: n = 10, m = 17 20 | 输出: 2 21 | ``` 22 | 23 | **限制:** 24 | 25 | * `1 <= n <= 10^5` 26 | * `1 <= m <= 10^6` 27 | 28 | ## 2. 标签 29 | 30 | * 数学 31 | 32 | ## 3. 解法 - 约瑟夫环 33 | 34 | ### 3.1 Java 35 | 36 | ```java 37 | class Solution { 38 | public int lastRemaining(int n, int m) { 39 | int res = 0; 40 | // 最后一轮只剩下两个人,所以从 2 开始反推 41 | for (int i = 2; i <= n; i++) { 42 | res = (res + m) % i; 43 | } 44 | return res; 45 | } 46 | } 47 | ``` 48 | 49 | ### 3.2 Kotlin 50 | 51 | ```kotlin 52 | class Solution { 53 | fun lastRemaining(n: Int, m: Int): Int { 54 | var res = 0 55 | // 最后一轮只剩下两个人,所以从 2 开始反推 56 | for (i in 2..n) { 57 | res = (res + m) % i 58 | } 59 | return res 60 | } 61 | } 62 | ``` 63 | 64 | ### 3.3 复杂度分析 65 | 66 | * 时间复杂度 `O(n)` :循环花费了 `O(n)` 的时间。 67 | * 空间复杂度 `O(1)` :变量只占用了常数大小的额外存储空间。 68 | 69 | ## 4. 参考 70 | 71 | * [https://leetcode-cn.com/problems/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-lcof/](https://leetcode-cn.com/problems/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-lcof/) 72 | * [https://leetcode-cn.com/problems/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-lcof/solution/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-by-lee/](https://leetcode-cn.com/problems/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-lcof/solution/yuan-quan-zhong-zui-hou-sheng-xia-de-shu-zi-by-lee/) 73 | -------------------------------------------------------------------------------- /algorithm/tag/math/leetcode-16.md: -------------------------------------------------------------------------------- 1 | # LEETCODE 16. 最接近的三数之和 2 | 3 | ## [1. 问题](https://leetcode-cn.com/problems/3sum-closest/) 4 | 5 | 给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。 6 | 7 | 示例: 8 | 9 | > 输入:nums = \[-1,2,1,-4], target = 1 10 | > 11 | > 输出:2 12 | > 13 | > 解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。 14 | 15 | 提示: 16 | 17 | * 3 <= nums.length <= 10^3 18 | * \-10^3 <= nums\[i] <= 10^3 19 | * \-10^4 <= target <= 10^4 20 | 21 | ## 2. 解法 - 双指针 22 | 23 | ```java 24 | class Solution { 25 | public int threeSumClosest(int[] nums, int target) { 26 | Arrays.sort(nums); 27 | 28 | int ans = nums[0] + nums[1] + nums[2]; 29 | int sum = 0; 30 | 31 | for (int i=0;i target) { 47 | right--; 48 | } else { 49 | return sum; 50 | } 51 | } 52 | 53 | 54 | } 55 | return ans; 56 | } 57 | } 58 | ``` 59 | 60 | ## 3. 参考 61 | 62 | * [https://leetcode-cn.com/problems/3sum-closest](https://leetcode-cn.com/problems/3sum-closest) 63 | * [https://leetcode-cn.com/problems/3sum-closest/solution/zui-jie-jin-de-san-shu-zhi-he-by-leetcode-solution/](https://leetcode-cn.com/problems/3sum-closest/solution/zui-jie-jin-de-san-shu-zhi-he-by-leetcode-solution/) 64 | 65 | ## 4. 笔记 66 | 67 | ![](https://777blog.oss-cn-shanghai.aliyuncs.com/blog%20pic/leetcode16.jpg) 68 | -------------------------------------------------------------------------------- /algorithm/tag/math/leetcode-2-1.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: 16. 最接近的三数之和 3 | date: '2020-06-30T10:45:22.000Z' 4 | tags: 5 | - leetcode 6 | - java 7 | - 排序 8 | - 双指针 9 | categories: 算法笔记 10 | notshow: true 11 | --- 12 | 13 | # LEETCODE 2. 两数相加 14 | 15 | ## [1. 问题](https://leetcode-cn.com/problems/3sum-closest/) 16 | 17 | 给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。 18 | 19 | 示例: 20 | 21 | > 输入:nums = \[-1,2,1,-4\], target = 1 输出:2 解释:与 target 最接近的和是 2 \(-1 + 2 + 1 = 2\) 。 22 | 23 | 提示: 24 | 25 | * 3 <= nums.length <= 10^3 26 | * -10^3 <= nums\[i\] <= 10^3 27 | * -10^4 <= target <= 10^4 28 | 29 | ## 2. 解法 30 | 31 | ```java 32 | class Solution { 33 | public int threeSumClosest(int[] nums, int target) { 34 | Arrays.sort(nums); 35 | int ans = nums[0] + nums[1] + nums[2]; 36 | // int left = 0; 37 | int sum = 0; 38 | // int right = 0; 39 | for (int i=0;i target) { 54 | right--; 55 | } else { 56 | return sum; 57 | } 58 | } 59 | 60 | 61 | } 62 | return ans; 63 | } 64 | } 65 | ``` 66 | 67 | ## 3. 参考 68 | 69 | * [https://leetcode-cn.com/problems/3sum-closest](https://leetcode-cn.com/problems/3sum-closest) 70 | * [https://leetcode-cn.com/problems/3sum-closest/solution/zui-jie-jin-de-san-shu-zhi-he-by-leetcode-solution/](https://leetcode-cn.com/problems/3sum-closest/solution/zui-jie-jin-de-san-shu-zhi-he-by-leetcode-solution/) 71 | 72 | ## 4. 笔记 73 | 74 | ![](https://777blog.oss-cn-shanghai.aliyuncs.com/blog%20pic/leetcode16.jpg) 75 | 76 | -------------------------------------------------------------------------------- /algorithm/tag/package.md: -------------------------------------------------------------------------------- 1 | # 背包问题 2 | 3 | -------------------------------------------------------------------------------- /algorithm/tag/package/README.md: -------------------------------------------------------------------------------- 1 | # 背包问题 2 | 3 | -------------------------------------------------------------------------------- /algorithm/tag/pointer/README.md: -------------------------------------------------------------------------------- 1 | # 双指针 2 | 3 | -------------------------------------------------------------------------------- /algorithm/tag/pointer/leetcode-19.md: -------------------------------------------------------------------------------- 1 | # LEETCODE 19. 删除链表的倒数第N个节点 2 | 3 | ## 1. [问题](https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/) 4 | 5 | 给定一个链表,删除链表的倒数第 _n _个节点,并且返回链表的头结点。 6 | 7 | **示例:** 8 | 9 | ``` 10 | 给定一个链表: 1->2->3->4->5, 和 n = 2. 11 | 当删除了倒数第二个节点后,链表变为 1->2->3->5. 12 | ``` 13 | 14 | **说明:** 15 | 16 | 给定的 _n_ 保证是有效的。 17 | 18 | **进阶:** 19 | 20 | 你能尝试使用一趟扫描实现吗? 21 | 22 | ## 2. 标签 23 | 24 | * 链表 25 | * 双指针 26 | 27 | ## 3. 解法 - 双指针 28 | 29 | > 快慢指针 30 | 31 | ### 3.1 Java 32 | 33 | ```java 34 | class Solution { 35 | public ListNode removeNthFromEnd(ListNode head, int n) { 36 | // 在 head 前面添加一个空的头结点 37 | ListNode preHead = new ListNode(0, head); 38 | // 快慢指针 39 | ListNode fast = head; 40 | ListNode slow = preHead; 41 | // 快指针先单独移动 n 步 42 | for (int i = 0; i < n; ++i) { 43 | fast = fast.next; 44 | } 45 | // 然后快慢指针一起移动,直到快指针指向空 46 | while (fast != null) { 47 | fast = fast.next; 48 | slow = slow.next; 49 | } 50 | // 此时慢指针的下一个结点就是要删去的结点 51 | // 调整 next 的指向即可删去下一个结点 52 | slow.next = slow.next.next; 53 | // 返回链表 54 | return preHead.next; 55 | } 56 | } 57 | ``` 58 | 59 | ### 3.2 复杂度分析 60 | 61 | * 时间复杂度 `O()` :其中 n 是链表的长度。 62 | * 空间复杂度 `O(1)` :原地算法,未占用额外的存储空间。 63 | 64 | ## 4. 参考 65 | 66 | * [https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/](https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/) 67 | * [https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/solution/shan-chu-lian-biao-de-dao-shu-di-nge-jie-dian-b-61/](https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list/solution/shan-chu-lian-biao-de-dao-shu-di-nge-jie-dian-b-61/) 68 | -------------------------------------------------------------------------------- /algorithm/tag/pointer/leetcode-424.md: -------------------------------------------------------------------------------- 1 | # \*LEETCODE 424. 替换后的最长重复字符 2 | 3 | ## 1. [问题](https://leetcode-cn.com/problems/longest-repeating-character-replacement/) 4 | 5 | 给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次。在执行上述操作后,找到包含重复字母的最长子串的长度。 6 | 7 | 注意:字符串长度 和 k 不会超过 104。 8 | 9 | 示例 1: 10 | 11 | ```text 12 | 输入:s = "ABAB", k = 2 13 | 输出:4 14 | 解释:用两个'A'替换为两个'B',反之亦然。 15 | ``` 16 | 17 | 示例 2: 18 | 19 | ```text 20 | 输入:s = "AABABBA", k = 1 21 | 输出:4 22 | 解释: 23 | 将中间的一个'A'替换为'B',字符串变为 "AABBBBA"。 24 | 子串 "BBBB" 有最长重复字母, 答案为 4。 25 | ``` 26 | 27 | ## 2. 标签 28 | 29 | * 双指针 30 | * 滑动窗口 31 | 32 | ## 3. 解法 - 双指针 33 | 34 | ### 3.1 Java 35 | 36 | ```java 37 | 38 | ``` 39 | 40 | ### 3.2 复杂度分析 41 | 42 | * 时间复杂度 `O()` : 43 | * 空间复杂度 `O()` : 44 | 45 | ## 4. 参考 46 | 47 | * [https://leetcode-cn.com/problems/longest-repeating-character-replacement/](https://leetcode-cn.com/problems/longest-repeating-character-replacement/) 48 | * [https://leetcode-cn.com/problems/longest-repeating-character-replacement/](https://leetcode-cn.com/problems/longest-repeating-character-replacement/) 49 | 50 | -------------------------------------------------------------------------------- /algorithm/tag/pointer/leetcode-86.md: -------------------------------------------------------------------------------- 1 | # LEETCODE 86. 分隔链表 2 | 3 | ## 1. [问题](https://leetcode-cn.com/problems/partition-list/) 4 | 5 | 给你一个链表和一个特定值 x ,请你对链表进行分隔,使得所有小于 x 的节点都出现在大于或等于 x 的节点之前。 6 | 7 | 你应当保留两个分区中每个节点的初始相对位置。 8 | 9 | 示例: 10 | 11 | ``` 12 | 输入:head = 1->4->3->2->5->2, x = 3 13 | 输出:1->2->2->4->3->5 14 | ``` 15 | 16 | ## 2. 标签 17 | 18 | * 链表 19 | * 双指针 20 | 21 | ## 3. 解法 - 双指针 22 | 23 | ### 3.1 Java 24 | 25 | ```java 26 | class Solution { 27 | public ListNode partition(ListNode head, int x) { 28 | // 双指针 29 | // left 链表储存小于 x 的结点 30 | ListNode left = new ListNode(0); 31 | // left 会不停地移动,由于后面还需要用到所以使用 leftTmp 记下初始位置 32 | ListNode leftTmp = left; 33 | // right 链表储存大于等于 x 的结点 34 | ListNode right = new ListNode(0); 35 | // right 会不停地移动,由于后面还需要用到所以使用 rightTmp 记下初始位置 36 | ListNode rightTmp = right; 37 | // 遍历链表 38 | while (head != null) { 39 | // 小于 x 的结点全部放到 left 链表中 40 | if (head.val < x) { 41 | left.next = head; 42 | left = left.next; 43 | } else { 44 | // 大于等于 x 的结点全部放到 right 链表中 45 | right.next = head; 46 | right = right.next; 47 | } 48 | // head 移向下一个结点 49 | head = head.next; 50 | } 51 | // 把两个链表串起来即可 52 | right.next = null; 53 | left.next = rightTmp.next; 54 | return leftTmp.next; 55 | } 56 | } 57 | ``` 58 | 59 | ### 3.2 复杂度分析 60 | 61 | * 时间复杂度 `O(n)` :其中 n 是原链表的长度。对该链表进行了一次遍历。 62 | * 空间复杂度 `O(1)` :未开辟新的空间。 63 | 64 | ## 4. 参考 65 | 66 | * [https://leetcode-cn.com/problems/partition-list/](https://leetcode-cn.com/problems/partition-list/) 67 | * [https://leetcode-cn.com/problems/partition-list/solution/fen-ge-lian-biao-by-leetcode-solution-7ade/](https://leetcode-cn.com/problems/partition-list/solution/fen-ge-lian-biao-by-leetcode-solution-7ade/) 68 | -------------------------------------------------------------------------------- /algorithm/tag/presum.md: -------------------------------------------------------------------------------- 1 | # 前缀和 2 | 3 | -------------------------------------------------------------------------------- /algorithm/tag/presum/README.md: -------------------------------------------------------------------------------- 1 | # 前缀和 2 | 3 | -------------------------------------------------------------------------------- /algorithm/tag/queue/README.md: -------------------------------------------------------------------------------- 1 | # 队列 2 | 3 | -------------------------------------------------------------------------------- /algorithm/tag/recur/README.md: -------------------------------------------------------------------------------- 1 | # 递归 2 | 3 | -------------------------------------------------------------------------------- /algorithm/tag/recur/lcof-10-1.md: -------------------------------------------------------------------------------- 1 | # LCOF 10-I. 斐波那契数列 2 | 3 | ## 1. [问题](https://leetcode-cn.com/problems/fei-bo-na-qi-shu-lie-lcof/) 4 | 5 | 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下: 6 | 7 | F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 N > 1. 斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。 8 | 9 | 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。 10 | 11 | 示例 1: 12 | 13 | ``` 14 | 输入:n = 2 15 | 输出:1 16 | ``` 17 | 18 | 示例 2: 19 | 20 | ``` 21 | 输入:n = 5 22 | 输出:5 23 | ``` 24 | 25 | 提示: 26 | 27 | * 0 <= n <= 100 28 | 29 | ## 2. 解法 - 递归 30 | 31 | ### 2.1 Java 32 | 33 | ```java 34 | // 递归超时了 35 | class Solution { 36 | public int fib(int n) { 37 | if (n==0 || n==1) 38 | return n; 39 | int[] res = new int[n+1]; 40 | res[0] = 0; 41 | res[1] = 1; 42 | for(int i=2;i<=n;i++) 43 | res[i] = (res[i-1] + res[i-2]) % 1000000007; 44 | return res[n]; 45 | } 46 | } 47 | ``` 48 | 49 | ### 2.2 Kotlin 50 | 51 | ```kotlin 52 | // 递归超时了 53 | class Solution { 54 | fun fib(n: Int): Int { 55 | if (n == 0 || n == 1) 56 | return n 57 | val res = IntArray(n + 1) 58 | res[0] = 0 59 | res[1] = 1 60 | for (i in 2..n) 61 | res[i] = (res[i - 1] + res[i - 2]) % 1000000007 62 | return res[n] 63 | } 64 | } 65 | ``` 66 | 67 | ## 3. 参考 68 | 69 | * [https://leetcode-cn.com/problems/fei-bo-na-qi-shu-lie-lcof/](https://leetcode-cn.com/problems/fei-bo-na-qi-shu-lie-lcof/) 70 | -------------------------------------------------------------------------------- /algorithm/tag/recur/lcof-64.md: -------------------------------------------------------------------------------- 1 | # LCOF 64. 求1+2+…+n 2 | 3 | ## 1. [问题](https://leetcode-cn.com/problems/qiu-12n-lcof/) 4 | 5 | 求 `1+2+...+n` ,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 6 | 7 | **示例 1:** 8 | 9 | ``` 10 | 输入: n = 3 11 | 输出: 6 12 | ``` 13 | 14 | **示例 2:** 15 | 16 | ``` 17 | 输入: n = 9 18 | 输出: 45 19 | ``` 20 | 21 | **限制:** 22 | 23 | * `1 <= n <= 10000` 24 | 25 | ## 2. 标签 26 | 27 | * 位运算 28 | * 递归 29 | 30 | ## 3. 解法 31 | 32 | > 递归时一般都会使用条件判断语句来决定递归的出口,由于题目限制无法使用,我们可以使用逻辑运算符的短路性质来决定递归的出口。 33 | 34 | ### 3.1 Java 35 | 36 | ```java 37 | class Solution { 38 | public int sumNums(int n) { 39 | /** 40 | * A && B 41 | * A: n > 0 42 | * B: n += sumNums(n - 1) 43 | * 可以将判断是否为递归的出口看作 A 部分 44 | * 将递归的主体函数看作 B 部分 45 | * 1. 如果不是递归出口,也就是 n > 0,那么返回 True,继续执行 B 部分,进行递归 46 | * 2. 如果是递归出口,也就是 n == 0,那么返回 False,短路,不再执行 B 部分,结束递归 47 | */ 48 | boolean flag = n > 0 && (n += sumNums(n - 1)) > 0; 49 | return n; 50 | } 51 | } 52 | ``` 53 | 54 | ### 3.2 Kotlin 55 | 56 | ```kotlin 57 | ? 58 | ``` 59 | 60 | ### 3.3 复杂度分析 61 | 62 | * 时间复杂度 `O(n)` :递归函数总共递归了 n 次,每次递归中计算操作的时间复杂度为 `O(1)`,因此总时间复杂度为 `O(n)`。 63 | * 空间复杂度 `O(n)` :递归函数的空间复杂度取决于递归调用栈的深度,这里深度为 `O(n)`。 64 | 65 | ## 4. 参考 66 | 67 | * [https://leetcode-cn.com/problems/qiu-12n-lcof/](https://leetcode-cn.com/problems/qiu-12n-lcof/) 68 | * [https://leetcode-cn.com/problems/qiu-12n-lcof/solution/qiu-12n-by-leetcode-solution/](https://leetcode-cn.com/problems/qiu-12n-lcof/solution/qiu-12n-by-leetcode-solution/) 69 | * [https://leetcode-cn.com/problems/qiu-12n-lcof/solution/mian-shi-ti-64-qiu-1-2-nluo-ji-fu-duan-lu-qing-xi-/](https://leetcode-cn.com/problems/qiu-12n-lcof/solution/mian-shi-ti-64-qiu-1-2-nluo-ji-fu-duan-lu-qing-xi-/) 70 | -------------------------------------------------------------------------------- /algorithm/tag/simulation/README.md: -------------------------------------------------------------------------------- 1 | # 模拟 2 | 3 | -------------------------------------------------------------------------------- /algorithm/tag/slidewindow/README.md: -------------------------------------------------------------------------------- 1 | # 滑动窗口 2 | 3 | -------------------------------------------------------------------------------- /algorithm/tag/slidewindow/leetcode-643.md: -------------------------------------------------------------------------------- 1 | # LEETCODE 643. 子数组最大平均数 I 2 | 3 | ## 1. [问题](https://leetcode-cn.com/problems/maximum-average-subarray-i/) 4 | 5 | 给定 `n` 个整数,找出平均数最大且长度为 `k` 的连续子数组,并输出该最大平均数。 6 | 7 | **示例:** 8 | 9 | ``` 10 | 输入:[1,12,-5,-6,50,3], k = 4 11 | 输出:12.75 12 | 解释:最大平均数 (12-5-6+50)/4 = 51/4 = 12.75 13 | ``` 14 | 15 | **提示:** 16 | 17 | * 1 <= `k` <= `n` <= 30,000。 18 | * 所给数据范围 \[-10,000,10,000]。 19 | 20 | ## 2. 标签 21 | 22 | * 数组 23 | * 滑动窗口 24 | 25 | ## 3. 解法 - 滑动窗口 26 | 27 | ### 3.1 Java 28 | 29 | ```java 30 | class Solution { 31 | public double findMaxAverage(int[] nums, int k) { 32 | // 滑动窗口中的数字总和 33 | int windoSum = 0; 34 | // 数组长度 35 | int n = nums.length; 36 | // 初始化窗口 37 | for (int i = 0; i < k; i++) { 38 | windoSum += nums[i]; 39 | } 40 | // 初始化子数组最大和 41 | int maxSum = windoSum; 42 | // 遍历之后的数字,不停的向右滑动窗口 43 | for (int i = k; i < n; i++) { 44 | // 把老窗口的第一个数字删掉,再加上当前的数字,就形成了新的窗口 45 | windoSum = windoSum - nums[i - k] + nums[i]; 46 | // 更新子数组最大和 47 | maxSum = Math.max(maxSum, windoSum); 48 | } 49 | // 除一下就是最大平均数 50 | // 别忘了 1.0,返回值类型是 double 51 | return 1.0 * maxSum / k; 52 | } 53 | } 54 | ``` 55 | 56 | ### 3.2 复杂度分析 57 | 58 | * 时间复杂度 `O(n)` :其中 n 是数组 nums 的长度。遍历数组一次。 59 | * 空间复杂度 `O(1)` :几个变量仅占用常数大小的存储空间。 60 | 61 | ## 4. 参考 62 | 63 | * [https://leetcode-cn.com/problems/maximum-average-subarray-i/](https://leetcode-cn.com/problems/maximum-average-subarray-i/) 64 | * [https://leetcode-cn.com/problems/maximum-average-subarray-i/solution/zi-shu-zu-zui-da-ping-jun-shu-i-by-leetc-us1k/](https://leetcode-cn.com/problems/maximum-average-subarray-i/solution/zi-shu-zu-zui-da-ping-jun-shu-i-by-leetc-us1k/) 65 | -------------------------------------------------------------------------------- /algorithm/tag/sort/README.md: -------------------------------------------------------------------------------- 1 | # 排序 2 | 3 | -------------------------------------------------------------------------------- /algorithm/tag/stack/README.md: -------------------------------------------------------------------------------- 1 | # 栈 2 | 3 | -------------------------------------------------------------------------------- /algorithm/tag/string/README.md: -------------------------------------------------------------------------------- 1 | # 字符串 2 | 3 | -------------------------------------------------------------------------------- /algorithm/tag/string/lcof-05.md: -------------------------------------------------------------------------------- 1 | # LCOF 05. 替换空格 2 | 3 | ## 1. [问题](https://leetcode-cn.com/problems/ti-huan-kong-ge-lcof/) 4 | 5 | 请实现一个函数,把字符串 s 中的每个空格替换成"%20"。 6 | 7 | 示例 1: 8 | 9 | ``` 10 | 输入:s = "We are happy." 11 | 输出:"We%20are%20happy." 12 | ``` 13 | 14 | 限制: 15 | 16 | * 0 <= s 的长度 <= 10000 17 | 18 | ## 2. 解法 19 | 20 | ### 2.1 Java 21 | 22 | ```java 23 | class Solution { 24 | public String replaceSpace(String s) { 25 | char[] nums = new char[s.length() * 3]; 26 | int index = 0; 27 | 28 | for (int i=0;i) 76 | -------------------------------------------------------------------------------- /algorithm/tag/string/lcof-58-2.md: -------------------------------------------------------------------------------- 1 | # LCOF 58 - II. 左旋转字符串 2 | 3 | ## 1. [问题](https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/) 4 | 5 | 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。 6 | 7 | **示例 1:** 8 | 9 | ``` 10 | 输入: s = "abcdefg", k = 2 11 | 输出: "cdefgab" 12 | ``` 13 | 14 | **示例 2:** 15 | 16 | ``` 17 | 输入: s = "lrloseumgh", k = 6 18 | 输出: "umghlrlose" 19 | ``` 20 | 21 | **限制:** 22 | 23 | * `1 <= k < s.length <= 10000` 24 | 25 | ## 2. 标签 26 | 27 | * 字符串 28 | 29 | ## 3. 解法 30 | 31 | ### 3.1 Java 32 | 33 | > 用 StringBuilder 或者 String 都一个路子。 34 | 35 | ```java 36 | class Solution { 37 | public String reverseLeftWords(String s, int n) { 38 | String ans = ""; 39 | for (int i = n; i < s.length(); i++) { 40 | ans += s.charAt(i); 41 | } 42 | for (int i = 0; i < n; i++) { 43 | ans += s.charAt(i); 44 | } 45 | return ans; 46 | } 47 | } 48 | ``` 49 | 50 | 两个循环可以用一个求余操作写在一起: 51 | 52 | ``` 53 | ans += s.charAt(i % s.length()); 54 | ``` 55 | 56 | ### 3.2 Kotlin 57 | 58 | ```kotlin 59 | class Solution { 60 | fun reverseLeftWords(s: String, n: Int): String { 61 | var ans = "" 62 | for (i in n until s.length) { 63 | ans += s[i] 64 | } 65 | for (i in 0 until n) { 66 | ans += s[i] 67 | } 68 | return ans 69 | } 70 | } 71 | ``` 72 | 73 | ### 3.3 复杂度分析 74 | 75 | * 时间复杂度 `O(N)` :线性遍历字符串。 76 | * 空间复杂度 `O(N)` :字符串至少占用 `O(N)` 的额外存储 77 | 78 | ## 4. 参考 79 | 80 | * [https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/](https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/) 81 | * [https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/solution/mian-shi-ti-58-ii-zuo-xuan-zhuan-zi-fu-chuan-qie-p/](https://leetcode-cn.com/problems/zuo-xuan-zhuan-zi-fu-chuan-lcof/solution/mian-shi-ti-58-ii-zuo-xuan-zhuan-zi-fu-chuan-qie-p/) 82 | -------------------------------------------------------------------------------- /algorithm/tag/template.md: -------------------------------------------------------------------------------- 1 | # Template 2 | 3 | ## 1. 问题 4 | 5 | ## 2. 标签 6 | 7 | * 1 8 | * 2 9 | 10 | ## 3. 解法 11 | 12 | ### 3.1 Java 13 | 14 | ```java 15 | ``` 16 | 17 | ### 3.2 复杂度分析 18 | 19 | * 时间复杂度 `O()` : 20 | * 空间复杂度 `O()` : 21 | 22 | ## 4. 参考 23 | 24 | * 1 25 | * 2 26 | 27 | -------------------------------------------------------------------------------- /algorithm/tag/thread.md: -------------------------------------------------------------------------------- 1 | # 多线程 2 | 3 | -------------------------------------------------------------------------------- /android/basic/README.md: -------------------------------------------------------------------------------- 1 | # 基础知识 2 | 3 | 知识脉络待整理,挖个大坑。 4 | 5 | 暂时根据 [android_interview](https://lrh1993.gitbooks.io/android_interview_guide/content/) 和[《第一行代码》](https://book.douban.com/subject/26915433/)来复习。 6 | -------------------------------------------------------------------------------- /android/basic/kai-yuan-kuang-jia.md: -------------------------------------------------------------------------------- 1 | # 开源框架 2 | 3 | ## OkHttp 4 | 5 | 网络请求库 6 | 7 | 主要是责任链 8 | 9 | ## Retrofit 10 | 11 | 网络请求库 12 | 13 | // 没用,问我我就说没用过嘻嘻。 14 | 15 | ## Glide 16 | 17 | 图片加载库 18 | 19 | 主要是生命周期的绑定 20 | 21 | ## EventBus 22 | 23 | {% embed url="https://www.jianshu.com/p/e7d5c7bda783" %} 24 | 25 | 26 | 27 | 事件发布-订阅总线 28 | 29 | // 实话说我又没用过 - - 彩笔就是我 30 | 31 | 它简化了应用程序内各个组件之间进行通信的复杂度,尤其是碎片之间进行通信的问题,可以避免由于使用广播通信而带来的诸多不便。 32 | -------------------------------------------------------------------------------- /android/basic/simulate.md: -------------------------------------------------------------------------------- 1 | # 具体场景分析 2 | 3 | ## Activity A 跳到 Activity B 发生卡顿 4 | 5 | 如何排查是什么问题? 6 | -------------------------------------------------------------------------------- /android/basic/ui.md: -------------------------------------------------------------------------------- 1 | # UI 2 | 3 | 各种布局啥的 4 | 5 | 常用的老布局都比较熟悉了 6 | 7 | ConstraintLayout RecyclerView等等记得再学一遍 8 | 9 | -------------------------------------------------------------------------------- /android/readme.md: -------------------------------------------------------------------------------- 1 | # 简介 2 | 3 | ## 笔记内容 4 | 5 | 本部分包含对基础知识的梳理以及面经问题的整理。 6 | 7 | * 常见问题均来自于牛客网的面经,答案缓慢更新中。 8 | 9 | ## 参考 10 | 11 | [O泡笔记](https://github.com/Omooo/Android-Notes) 12 | 13 | [Android 面试QA](https://github.com/Omooo/Android_QA) 14 | 15 | [《第一行代码》](https://book.douban.com/subject/26915433/) 16 | -------------------------------------------------------------------------------- /computer-network/basic/README.md: -------------------------------------------------------------------------------- 1 | # 基础知识 2 | 3 | -------------------------------------------------------------------------------- /computer-network/basic/cn-physical-layer.md: -------------------------------------------------------------------------------- 1 | # 物理层 2 | 3 | ## 参考 4 | 5 | * [CYC CS-Notes 计算机网络 - 物理层](http://www.cyc2018.xyz/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E7%A1%80/%E7%BD%91%E7%BB%9C%E5%9F%BA%E7%A1%80/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C%20-%20%E7%89%A9%E7%90%86%E5%B1%82.html) 6 | * [《计算机网络》谢希仁](https://book.douban.com/subject/26960678/) 7 | 8 | ## 通信方式 9 | 10 | 根据信息在传输线上的传送方向,分为以下三种通信方式: 11 | 12 | _**单工通信:单向传输**_ 13 | 14 | 单向通信又称为单工通信,即只能有一个方向的通信而没有反方向的交互。无线电广播或有线电广播以及电视广播就属于这种类型。 15 | 16 | _**半双工通信:双向交替传输**_ 17 | 18 | 双向交替通信又称为半双工通信,即通信的双方都可以发送信息,但不能双方同时发送(当然也就不能同时接收)。这种通信方式是一方发送另一方接收,过一段时间后再反过来。 19 | 20 | _**全双工通信:双向同时传输**_ 21 | 22 | 双向同时通信又称为全双工通信,即通信的双方可以同时发送和接收信息。 23 | 24 | ## 调制 25 | 26 | 来自信源的信号常称为基带信号(即基本频带信号)。像计算机输出的代表各种文字或图像文件的数据信号都属于基带信号。基带信号往往包含有较多的低频成分,甚至有直流成分,而许多信道并不能传输这种低频分量或直流分量。为了解决这一问题,就必须对基带信号进行调制(modulation)。 27 | 28 | 调制可分为两大类。 29 | 30 | 一类是仅仅对基带信号的波形进行变换,使它能够与信道特性相适应。变换后的信号仍然是基带信号。这类调制称为**基带调制**。由于这种基带调制是把数字信号转换为另一种形式的数字信号,因此大家更愿意把这种过程称为**编码**(coding)。 31 | 32 | 另一类调制则需要使用载波(carrier)进行调制,把基带信号的频率范围搬移到较高的频段,并转换为模拟信号,这样就能够更好地在模拟信道中传输。经过载波调制后的信号称为**带通信号**(即仅在一段频率范围内能够通过信道),而使用载波的调制称为**带通调制**。 33 | 34 | ## 带通调制 35 | 36 | 模拟信号是连续的信号,数字信号是离散的信号。带通调制把数字信号转换为模拟信号。 37 | 38 | (1) 模拟信号,或连续信号——代表消息的参数的取值是连续的。用户家中的调制解调器到电话端局之间的用户线上传送的就是模拟信号。 39 | 40 | (2) 数字信号,或离散信号——代表消息的参数的取值是离散的。用户家中的PC到调制解调器之间,或在电话网中继线上传送的就是数字信号。在使用时间域(或简称为时域)的波形表示数字信号时,则代表不同离散数值的基本波形就称为码元。在使用二进制编码时,只有两种不同的码元,一种代表0状态而另一种代表1状态。 41 | -------------------------------------------------------------------------------- /computer-network/readme.md: -------------------------------------------------------------------------------- 1 | # 简介 2 | 3 | ## 笔记内容 4 | 5 | 本部分包含对基础知识的梳理以及面经问题的整理。 6 | 7 | * 基础知识基于 [CS-Notes](https://cyc2018.github.io/CS-Notes/#/) 进行增补,结合教材内容、查找的资料进行完善整合,每篇笔记会将引用到的文章/专栏/博客/教材链接放出。 8 | * 常见问题均来自于牛客网的面经,答案缓慢更新中。 9 | * 看面经过程中发现其实有一些很基础的知识点在面试中并不太关注,准备时间不多的时候可以直接把面经中的常见问题搞搞熟悉即可。 10 | 11 | ## 参考 12 | 13 | [《计算机网络 自顶向下方法》第6版](https://book.douban.com/subject/26176870/) 14 | 15 | [《计算机网络》谢希仁](https://book.douban.com/subject/26960678/) 16 | 17 | [CS-Notes 计算机网络](https://cyc2018.github.io/CS-Notes/#/notes/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BD%91%E7%BB%9C%20-%20%E7%9B%AE%E5%BD%951) 18 | 19 | -------------------------------------------------------------------------------- /database/basic.md: -------------------------------------------------------------------------------- 1 | # 基础知识 2 | 3 | -------------------------------------------------------------------------------- /database/basic/README.md: -------------------------------------------------------------------------------- 1 | # 基础知识 2 | 3 | -------------------------------------------------------------------------------- /database/interview-question.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 全是从面经里扒拉出来的面试题 3 | --- 4 | 5 | # 常见问题 6 | 7 | > 看面经感觉字节问数据库问得比较少 8 | 9 | ## 索引结构 10 | 11 | ## MySQL 怎么判断一条查询语句命中索引 12 | 13 | ## 索引 14 | 15 | > 相关问题: 16 | > 17 | > * 优缺点、什么场景适合等等 18 | > * 索引的作用、特点、哪种数据加索引比较好 19 | > * 什么时候索引失效 20 | 21 | ## **范式** 22 | 23 | ## **事务** 24 | 25 | ## 数据库**频繁读数据**,可以用什么方式来优化 26 | 27 | ## 手写SQL语句,分组查询 28 | 29 | ## 数据库原子性 30 | 31 | ## 数据库inner join、left join、right join分别是干嘛的 32 | 33 | ## 数据库事务 34 | 35 | ## SQL 语句,group by 36 | 37 | ## 为什么需要 rollback 38 | 39 | ## MySQL不同引擎的区别 40 | 41 | ## 不同引擎的索引区别 42 | 43 | ## 存储过程 44 | 45 | ## MySQL的多线程并发是怎么做的 46 | 47 | ## MySQL线程池怎么设计的 48 | 49 | ## 你数据库中表是怎么设计的,表与表怎么关联的 50 | 51 | 52 | 53 | Tencent 54 | 55 | 如果数据量比较大的情况下,你会怎么建索引?// 56 | 57 | 博客的正文用哪一种数据类型来存的?对这个类型建索引会遇到什么问题?// 58 | 59 | 你的 MySQL 用的什么引擎?简单介绍一下 Inno DB?Inno DB 的索引是怎么实现的? 60 | 61 | // 默认的就是innodb 62 | 63 | 了不了解主键索引和聚簇索引?// [link](https://baike.baidu.com/item/%E6%95%B0%E6%8D%AE%E5%BA%93%E7%B4%A2%E5%BC%95) 64 | 65 | 这时候另一个面试官发话了,问有没有可能一种查询不需要回表也能直接返回数据? 66 | 67 | 那这个联合索引可能有个顺序,你一般怎么设计?哪个放前面?你会基于什么考虑? 68 | 69 | 如果我想用 order by 关键字来排序,我怎么利用索引来排序?就是怎么利用这个组合索引来排序? 70 | 71 | 一条 SQL 语句可能执行比较慢,你会怎么来排查?在 explain 里面查询它的执行计划,是怎么知道它用到哪些索引? 72 | 73 | 项目用的什么数据库 //mysql 74 | 75 | 存储 sql 查询语句怎么写,两张表,左连接 76 | 77 | 有些SQL比较慢,你咋办?为什么有的SQL这么慢,说说你觉得导致SQL很慢的原因 78 | 79 | 我看你还会这个MySQL,那我们来问问MySQL中的锁。你知道有哪些锁吗? 80 | 81 | 行锁有啥用啊,相对于表锁? 82 | 83 | 知道MySQL主要的两种引擎吗,MySIAM和InnoDB的区别,使用场景?谁有表锁? 84 | 85 | 看你了解InnoDB,那你具体说说InnoDB吧。 86 | 87 | 三大范式 88 | 89 | 索引 90 | 91 | 怎么知道命中索引 92 | -------------------------------------------------------------------------------- /database/readme.md: -------------------------------------------------------------------------------- 1 | # 简介 2 | 3 | ## 笔记内容 4 | 5 | 本部分包含对基础知识的梳理以及面经问题的整理。 6 | 7 | * 基础知识基于 [CS-Notes](https://cyc2018.github.io/CS-Notes/#/) 进行增补,结合教材内容、查找的资料进行完善整合,每篇笔记会将引用到的文章/专栏/博客/教材链接放出。 8 | * 常见问题均来自于牛客网的面经,答案缓慢更新中。 9 | 10 | ## 参考 11 | 12 | [《数据库系统概念》第6版](https://book.douban.com/subject/10548379/) 13 | 14 | [CS-Notes 数据库](http://www.cyc2018.xyz/#%E6%95%B0%E6%8D%AE%E5%BA%93) 15 | 16 | [Awesome Database Learning](https://github.com/pingcap/awesome-database-learning) 17 | 18 | -------------------------------------------------------------------------------- /docs/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/docs/images/logo.png -------------------------------------------------------------------------------- /interview/alibaba/README.md: -------------------------------------------------------------------------------- 1 | # 阿里面经汇总 2 | 3 | -------------------------------------------------------------------------------- /interview/alibaba/other.md: -------------------------------------------------------------------------------- 1 | # 杂 2 | 3 | > 投了个蚂蚁的实习,牛客收集点面筋看看。 4 | 5 | {% embed url="https://www.nowcoder.com/discuss/experience?tagId=642&order=3&companyId=134&phaseId=2" %} 6 | 7 | {% embed url="https://www.nowcoder.com/discuss/72150?type=post&order=time&pos=&page=1&channel=-1&source_id=search_post_nctrack&subType=2" %} 8 | 9 | {% embed url="https://www.nowcoder.com/discuss/68744?type=post&order=time&pos=&page=1&channel=-1&source_id=search_post_nctrack&subType=2" %} 10 | 11 | {% embed url="https://www.nowcoder.com/discuss/34302?type=post&order=time&pos=&page=1&channel=-1&source_id=search_post_nctrack&subType=2" %} 12 | 13 | {% embed url="https://www.nowcoder.com/discuss/604947?source_id=profile_create_nctrack&channel=-1" %} 14 | 15 | {% embed url="https://www.nowcoder.com/discuss/369844?source_id=discuss_experience_nctrack&channel=-1" %} 16 | 17 | -------------------------------------------------------------------------------- /interview/bytedance-collect/README.md: -------------------------------------------------------------------------------- 1 | # 字节面经知识点整理 2 | 3 | 这一块是对上一块面经汇总的具体知识点整理,按需阅读。 4 | 5 | {% page-ref page="computer-network.md" %} 6 | 7 | {% page-ref page="os.md" %} 8 | 9 | {% page-ref page="database.md" %} 10 | 11 | {% page-ref page="algorithm.md" %} 12 | 13 | {% page-ref page="android.md" %} 14 | 15 | {% page-ref page="java.md" %} 16 | 17 | ## 碎碎念 18 | 19 | 1. 注意看一些场景题 20 | 2. 看面经发现有时候二三面会去问一面问过的问题,所以不管面的怎么样,面完记得及时复盘,更新自己的知识库。 21 | 22 | -------------------------------------------------------------------------------- /interview/bytedance-collect/algorithm.md: -------------------------------------------------------------------------------- 1 | # 算法题 2 | 3 | 反转链表 4 | 5 | 反转指定区间的链表 6 | 7 | 需要自定义节点,处理输入输出 8 | 9 | 10 | 11 | 排序,给一个链表,按照链表某个值排序 12 | 13 | 14 | 15 | 求二叉树叶子节点之间的最长路径 16 | 17 | 找树中有没有和为特定值的路径,返回boolean 18 | 19 | 合并两个有序链表 2;面试官让我先写函数,然后在主函数中测试运行 20 | 21 | 三个线程,线程1打印a,线程2打印b,线程3打印c,要求循环打印abc10次。 22 | 23 | 计算从一棵多叉树(节点取值不相同)的根节点走N步,能走到节点x的概率,任何一个走过的节点不能走第二次(即不能往回走),如果没路可以走可以原地走,如果有路可走,但是步数没用完需要接着走。 24 | 25 | 26 | 27 | 手写快速排序 28 | 29 | 做一道题topk的题,指定用快排的思路 30 | 31 | 32 | 33 | 给一个10,输出相加等于10的连续子数组。 34 | 35 | 双栈实现队列(口述一下过程就行) 36 | 37 | 数据结构,10大排序挑2个讲 38 | 39 | 求树的直径 40 | 41 | 给一个链表,判断链表元素是否回文,要求空间复杂度O\(1\) 42 | 43 | 如何判断一个二叉树是否是完全二叉树 44 | 45 | 手写一个堆排序 46 | 47 | 一个dp一个单调栈 48 | 49 | 将一段文本中的单词逆序输出 50 | 51 | 求解矩形起点到终点的最短路径,只能向右或者向下走 52 | 53 | ## 碎碎念 54 | 55 | 另外下面这个网站是根据牛客网等来源的面经整理出的各大公司高频考察的算法题,可以按照意向公司多刷刷,争取可以全部掌握。 56 | 57 | {% embed url="https://leetcode-cn.top/" %} 58 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /interview/bytedance-collect/android.md: -------------------------------------------------------------------------------- 1 | # Android 2 | 3 | **Handler** 4 | 5 | Handler机制,Looper.loop会不会阻塞线程,为什么? 6 | 7 | handler机制 looper,message,handler,queue 8 | 9 | handler内存泄漏,内存泄漏的引用链是啥?(looper—>messagequeue->message->handler,所以如果队列为空就不会泄露) 10 | 11 | handle作用 12 | 13 | Handler的原理。Looper,MessageQueue,Message。面试官追问在一个Handler中给另一个Handler发送消息 14 | 15 | 16 | 17 | 扯到了对象池(Message类维护,每个message有next指针) 18 | 19 | 怎么解决内存泄漏(声明static,弱引用包裹) 20 | 21 | 有没有接触过安卓,怎么看内存占用情况 22 | 23 | 框架源码(没看过,不会),**eventbus**有哪些缺点,什么类可以作为event,为什么不用广播 24 | 25 | **dex**了解吗?我答只知道65535,了解类的编译过程吗,不了解;知道源文件编译成什么吗?class文件;为什么要有dex?在dex做了优化;哪些优化?不了解 26 | 27 | dalvik和hotspot虚拟机了解吗 28 | 29 | 我做的是音乐播放器,所以面试官问音乐播放在哪里实现,activity还是**service**,用thread可以吗?为什么? 30 | 31 | Recyclerview缓存机制 32 | 33 | fragment生命周期 34 | 35 | binder机制 2 36 | 37 | 怎么学安卓 38 | 39 | 40 | 41 | **安卓多线程 2** 42 | 43 | Android中多线程使用方式。面试官追问如何停止一个线程。 44 | 45 | 有没有写过安卓的多线程 46 | 47 | 48 | 49 | 有没有用过什么框架 50 | 51 | 安卓生命周期 52 | 53 | 项目中询问一个 A Activity 跳到一个 B Activity中,生命周期的走动,点击Back返回呢。如果一个 A Activity是透明的呢?如果 B Activity是一个Dialog呢?面试官追问横竖屏切换生命周期走动,以及是否了解onConfigurationChanged。 54 | 55 | Android静态库和动态库的区别 56 | 57 | 使用addView达到弹出框的效果,但是耗时长。后来了解Fragment,使用Fragment代替addView。面试官追问你能分析为什么这么慢吗,我就说了Android的Activity->PhoneWindow->DecorView->ContentView->WindowManager->RootViewImpl的绘制流程。面试官继续追问ANR出现的类型,原因以及排查的方式。面试官继续追问Fragment和Activity的区别以及Fragment的优点。 58 | 59 | ## 碎碎念 60 | 61 | 感觉安卓会问到的问题来来回回就这么多的样子 62 | 63 | 我感觉针对简历上的项目可能会问一些想不到的点 64 | 65 | 到时候简历上项目千万别给自己挖坑啊- - 66 | 67 | 68 | 69 | handler 不同场景 70 | 71 | application 72 | 73 | anr 74 | 75 | onSaveInstanceState 76 | 77 | dex 78 | 79 | flutter dart 80 | 81 | \*eventbus 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /interview/bytedance-collect/database.md: -------------------------------------------------------------------------------- 1 | # 数据库 2 | 3 | > 字节好像不怎么问数据库的问题,大概知道一些基础应该就行,力扣上找一些数据库设计题做一做就差不多了。 4 | 5 | 虽然问的不多但是还是有几种问题的。 6 | 7 | -------------------------------------------------------------------------------- /interview/bytedance-collect/ios.md: -------------------------------------------------------------------------------- 1 | # iOS 2 | 3 | -------------------------------------------------------------------------------- /interview/bytedance-collect/java.md: -------------------------------------------------------------------------------- 1 | # Java 2 | 3 | gc算法,收集器,stop the world 4 | 5 | jvm内存区域,为什么要有jvm 6 | 7 | jvm启动过程? 验证是验证什么 8 | 9 | 类加载过程,我扯到了invokestatic,面试官问什么时候调用?我答在调用静态方法时调用 10 | 11 | 异常体系,可以catch error吗 12 | 13 | 抽象类和接口 14 | 15 | 抽象类和接口的区别 16 | 17 | 多态,有哪些实现 18 | 19 | java容器有哪些 20 | 21 | 22 | 23 | **HashMap 4** 24 | 25 | hashmap底层原理(必考)hash值的计算、为什么要重写equals和hashcode 、插入的时候会发生啥 26 | 27 | hashcode 为什么出现、是什么、equals关系 28 | 29 | hashmap的扩容机制,为什么要俩倍扩容。 30 | 31 | HashMap的源码,扩容的条件。 32 | 33 | 34 | 35 | 扯到红黑树特性(就知道什么黑节点层数一样。扯了查找树的特性,试图糊弄) 36 | 37 | 线程池介绍,任务队列如果满了怎么办; 38 | 39 | CAS介绍,CAS有什么问题,Java是否有解决方法 40 | 41 | final关键字,final常量存储位置,常量池的好处 42 | 43 | **回收 3** 44 | 45 | Java垃圾回收机制, 46 | 47 | 如何判断堆中哪些对象需要被回收 48 | 49 | Java内存,回收的搜索算法:引用计数和根搜索算法。 50 | 51 | 52 | 53 | **多线程 3** 54 | 55 | 多线程相关的几个关键字 56 | 57 | volatile关键字作用 58 | 59 | synchronized修饰代码块,方法,静态代码块的区别 60 | 61 | 线程安全。我回答了sychronized关键字(关于锁,wait,notify参考我的一篇博客---Java 多线程)。面试官追问是否了解volite关键字,我忘了没回答出来。面试官追问是否了解自旋锁,乐观锁,悲观锁等,我回答了解但是没用过。 62 | 63 | 64 | 65 | 66 | 67 | 强引用、软引用、弱引用、虚引用,是什么?分别在什么时候用 68 | 69 | 反序列和序列化 为什么要? 什么情况下要? 70 | 71 | 反射 为什么要反射? 什么时候用? 缺点? 72 | 73 | static关键字:c跟java 74 | 75 | 动态编译、静态编译 76 | 77 | 多核cpu,多线程怎么访问同一个内存 78 | 79 | 80 | 81 | 说说自旋锁,内部实现。 82 | 83 | 线程同步,我又说了sychroized 84 | 85 | 是否了解Java的atomic,以及好多很底层的东西 86 | 87 | ## 碎碎念 88 | 89 | 粗略看了一些面经,感觉字节好喜欢问乐观锁、悲观锁 90 | 91 | CAS 92 | 93 | volatile 94 | 95 | jvm gc 96 | 97 | -------------------------------------------------------------------------------- /interview/bytedance-collect/os.md: -------------------------------------------------------------------------------- 1 | # 操作系统 2 | 3 | **进程 线程** 4 | 5 | 进程和线程的区别 3 6 | 7 | 进程线程了解吗 8 | 9 | 线程通信 10 | 11 | 为什么有多进程也有多线程?我扯到了虚拟内存空间,面试官就问为什么要这样设计?解决什么问题?分段和分页有什么区别? 12 | 13 | 中断是怎么实现的 14 | 15 | 操作系统的锁底层是怎么样实现的 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /interview/bytedance-collect/other.md: -------------------------------------------------------------------------------- 1 | # 其他 2 | 3 | ## 场景设计题 4 | 5 | 有好些个场景设计题哎 6 | 7 | 1. 让你设计一个牛客网系统你会考虑什么?如何实现代码编译? 8 | 2. 如果让你做一个本机设备的百度搜索推荐,你会怎么办? 9 | 3. 如何实现牛客网的在线编程。 10 | 4. 在上述过程中,如果有多个服务器,如何平衡任务量 11 | 5. 在上述过程中,如果主服务器的请求量过大,如何解决。 12 | 6. 在上述过程中,如何实现不同地域的客户端输入同一个URL后访问不同的主服务器。 13 | 7. 如果服务器在执行一个任务时,出现了异常,比如陷入死循环,一直占用CPU资源,那么如何监测出来。 14 | 15 | ## 智力题 16 | 17 | 1. 8个物品,有一个质量较大,如何两次称出它 18 | 19 | ## Git 相关 20 | 21 | 1. git rebase git merge 的区别 22 | 2. 有没有用过GitHub 23 | 24 | 25 | 26 | ## 设计模式 27 | 28 | 手写单例 29 | 30 | 生产者消费者、工厂模式、单例模式(3种实现、为什么双验证)你会怎么设计 31 | 32 | ## HR 33 | 34 | 问了高考的情况 35 | 36 | 问了学校的竞赛经历 37 | 38 | 介绍了下最近在看的csapp这本书 39 | 40 | 问竞赛中印象深刻的事情 41 | 42 | 说说自己的亮点 43 | 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /interview/bytedance-collect/xiang-mu.md: -------------------------------------------------------------------------------- 1 | # 项目 2 | 3 | 项目介绍 4 | 5 | 项目及项目里用到的知识 6 | 7 | 项目遇到什么问题,怎么解决 8 | 9 | 项目中用到了哪些技术,除了框架 10 | 11 | 主要做了什么,是否还有可以优化的地方。 12 | 13 | 项目中出现的难处以及解决。 14 | 15 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 在这里汇总以方便查看面试题目,目前共计 62 篇面经 3 | --- 4 | 5 | # 字节跳动面经汇总 6 | 7 | 实习、提前批、秋招面试的问题可能会存在一定的差异,所以我把牛客网收集到的面经按照这三个阶段分成了三个部分。 8 | 9 | {% content-ref url="intern/" %} 10 | [intern](intern/) 11 | {% endcontent-ref %} 12 | 13 | {% content-ref url="before/" %} 14 | [before](before/) 15 | {% endcontent-ref %} 16 | 17 | {% content-ref url="official/" %} 18 | [official](official/) 19 | {% endcontent-ref %} 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/before/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 目前共计 12 篇面经 3 | --- 4 | 5 | # 提前批 6 | 7 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/before/zi-jie-ke-hu-duan-kai-fa-mian-jing.md: -------------------------------------------------------------------------------- 1 | # 字节客户端开发面经 2 | 3 | {% embed url="https://www.nowcoder.com/discuss/519698" %} 4 | 5 | **一面**\ 6 | 时间:2020.07.16 10:30 时长:48分钟 7 | 8 | * 面试官介绍面试流程 9 | * 自我介绍 10 | * 介绍[项目](https://app.gitbook.com/jump/super-jump/word?word=%E9%A1%B9%E7%9B%AE)(面试官不感兴趣,一带而过) 11 | * 四层网络协议说一下 12 | * 应用层有什么协议 13 | * 传输层有什么协议 14 | * 既然你说到TCP和UDP,那么它们两个的区别 15 | * UDP使用的场景,既然UDP既然不安全,可能发生错误为什么还要使用? 16 | * 简单介绍一下堆和栈 17 | * OOM发生的区域,调用方法次数过多,哪部分会报异常(栈,StackOverflow) 18 | * 进程调用[算法](https://app.gitbook.com/jump/super-jump/word?word=%E7%AE%97%E6%B3%95) 19 | * \== 和 equals方法区别 20 | * Object类中有哪些方法 21 | * 介绍final关键字 22 | * 常用的list有哪些 23 | * linkedList和ArrayList的区别 24 | * 你刚才说的CopyOnWriteList,简单的介绍一下 25 | * synchronied加载静态方法和非静态方法的区别(如果创建类的两个对象,分别在两个线程中,调用对应的非静态方法,会相互影响吗?如果只有一个对象,两个线程调用非静态方法,会相互影响吗) 26 | * 什么是死锁? 27 | * 死锁的条件 28 | * 如何避免和预防死锁 29 | * 让你写一个栈,你怎么使用?(使用数组) 30 | * 场景题: 31 | 32 | 地上有20枚硬币,一次只能捡一个或两个,两个人轮番减,你怎么能确保赢?如果地上是18枚硬币呢?21枚呢? 33 | * [算法题](https://app.gitbook.com/jump/super-jump/word?word=%E7%AE%97%E6%B3%95%E9%A2%98): 34 | 35 | 两个有序[链表](https://app.gitbook.com/jump/super-jump/word?word=%E9%93%BE%E8%A1%A8)合并为一个有序[链表](https://app.gitbook.com/jump/super-jump/word?word=%E9%93%BE%E8%A1%A8)? 36 | * 反问环节? 37 | 38 | 没啥问的?就问了下[客户端](https://app.gitbook.com/jump/super-jump/word?word=%E5%AE%A2%E6%88%B7%E7%AB%AF)和后端的区别? 39 | 40 | **二面**\ 41 | 时间:2020.07.21 16:00 时长:53分钟 42 | 43 | * 自我介绍 44 | * 介绍的[项目](https://app.gitbook.com/jump/super-jump/word?word=%E9%A1%B9%E7%9B%AE) 45 | * 你认为哪个[项目](https://app.gitbook.com/jump/super-jump/word?word=%E9%A1%B9%E7%9B%AE)最重要,它的难点是什么 46 | * 你为什么想转[客户端](https://app.gitbook.com/jump/super-jump/word?word=%E5%AE%A2%E6%88%B7%E7%AB%AF) 47 | * 你怎么跟认真准备学习Android的学生竞争? 48 | * OSI七层模型 49 | * 说说各层都有哪些协议 50 | * TCP和UDP的区别 51 | * 说一说拥塞控制(慢启动、拥塞避免、快重传、快恢复) 52 | * 在浏览器输入网址经历的过程 53 | * DNS解析过程、四次挥手 54 | * 浏览器渲染过程 55 | * 讲讲HashMap,为什么会扩容2倍?(因为2倍Hash冲突会降低很多) 56 | * 处理Hash冲突的方式 57 | * 介绍一下Java的锁 58 | * synchronized的原理 59 | * 讲一讲Java内存模型 60 | * 类加载机制 61 | * 如果头条APP卡了,可能发生的原因有哪些? 62 | * [算法题](https://app.gitbook.com/jump/super-jump/word?word=%E7%AE%97%E6%B3%95%E9%A2%98): 63 | 64 | 输入数据如:3,32, 321 如何使他们拼接而成的值最小:321323 65 | * 反问 66 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/before/zi-jie-ti-qian-pi-an-zhuo-ke-hu-duan-jia-mian-si-mian.md: -------------------------------------------------------------------------------- 1 | # 字节提前批 安卓客户端加面 四面 2 | 3 | {% embed url="https://www.nowcoder.com/discuss/462218?source_id=profile_create&channel=1009" %} 4 | 5 | 时间 7月27日(大约40分钟) 6 | 7 | 1、自我介绍 8 | 9 | 2、线程和进程的区别 10 | 11 | 3、进程的私有资源有哪些(我只知道线程的私有资源回答的就很模糊) 12 | 13 | 4、线程的调度方法(一下子懵了,我只知道进程的调度方法,然后就说了进程的调度方法) 14 | 15 | 5、设计一个图片库app,实现从服务端下载图片,以及本地缓存的实现。 16 | 17 | 6、使用http协议传输一个10兆的文件,中途断了,如何实现断点重传。 18 | 19 | 20 | 21 | 总结:四面面试官看前面三面已经问了很多基础也有手撕代码,所以就没问了。都是一些开放性的问题,考察如何通过现在已有的技术去实现或设计一个系统。 22 | 23 | 最后:许愿一个offer!!!!!!! 24 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/before/zi-jie-ti-qian-pi-ke-hu-duan-android-yi-mian-mian-jing.md: -------------------------------------------------------------------------------- 1 | # 字节提前批-客户端Android一面面经 2 | 3 | {% embed url="https://www.nowcoder.com/discuss/450867" %} 4 | 5 | * Activity生命周期,onSaveInstanceState()方法何时执行; 6 | * HandlerThread讲一下 7 | 8 | 可以参考IntentService[源码](https://app.gitbook.com/jump/super-jump/word?word=%E6%BA%90%E7%A0%81),我的博客: [https://blog.csdn.net/SPACESTUDIO/article/details/107302229](https://blog.csdn.net/SPACESTUDIO/article/details/107302229)\ 9 | \ 10 | 11 | 12 | * SharedPreference的commit()和apply()区别,apply()何时写磁盘,平时用哪个; 13 | 14 | apply()的注解:The framework makes sure in-flight disk writes from apply() complete before switching states。state应该是指Activity的,也就是说活动生命周期变化之前会写磁盘\ 15 | \ 16 | 17 | 18 | * ANR,系统是怎样判断的; 19 | * 访问控制符;如何在外部执行一个类的private方法; 20 | * 内部类与静态内部类区别; 21 | * sleep与wait区别,sleep如何打断; 22 | * GC; 23 | * wait实现生产者消费者问题,如何做到同步; 24 | * synchronized与lock区别; 25 | * 写一个线程安全的单例模式;volatile关键字作用; 26 | * 编程:判断两个[链表](https://app.gitbook.com/jump/super-jump/word?word=%E9%93%BE%E8%A1%A8)是否相交并返回交点; 27 | * TCP如何保证可靠; 28 | * B树介绍下;B+树的区别。 29 | 30 | 就是这些了,通过面试也了解了很多,求好运 31 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/before/zi-jie-ti-qian-pi-ke-hu-duan-kai-fa-yi-mian-er-mian.md: -------------------------------------------------------------------------------- 1 | # 字节提前批。客户端开发一面二面 2 | 3 | {% embed url="https://www.nowcoder.com/discuss/449258" %} 4 | 5 | ## 一面、二面: 6 | 7 | 1、自我介绍 8 | 9 | 2、针对项目问了些问题,手写了单例模式 10 | 11 | 3、handler机制,底层,是否会发生泄露,如何解决;如何判断收到的消息是从那个handler传来的 12 | 13 | 4、hashmap,hashtable,concurrenthashmap; 14 | 15 | 5、synchornized,还有其他的什么锁 16 | 17 | 6、view的绘制 18 | 19 | 7、AQS 20 | 21 | 8、银行家算法 22 | 23 | 9、http状态码302 24 | 25 | 10、https如何传输数据 26 | 27 | 28 | 29 | 11、让你设计一个牛客网系统你会考虑什么?如何实现代码编译? 30 | 31 | 32 | 33 | ## 编程题: 34 | 35 | 1、力扣原题113 路径综合 36 | 37 | 2、给定一个升序数组,可能会有重复的数字,将数组里的数平方后,有多少不同的数。 38 | 39 | 40 | 41 | 42 | 43 | 一面结束后10分钟就直接二面了。一面的问题还是中规中矩都一些基础问题和底层,一面感觉还是比较轻松。二面的问题会更加开放性; 44 | 45 | 更加考验平时的学习经验以及知识的广度和个人聪明了,被问题怼的不敢出声。 46 | 47 | 编程题难度都不算难,但是不能使用本地IDEA真的不太习惯。 48 | 49 | 虽然二面感觉不太好。但还是跪求一次三面的机会。许愿!!!!!!!!!!!!!!!! 50 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/before/zi-jie-ti-qian-pi-ke-hu-duan-yi-er-san-mian-mian-jing-yi-liang.md: -------------------------------------------------------------------------------- 1 | # 字节提前批客户端一二三面面经(已凉) 2 | 3 | {% embed url="https://www.nowcoder.com/discuss/465558" %} 4 | 5 | \ 6 | 7.8 一面,中间因为面试官有事跳过一个星期,7.23二面,7.29三面。 头条[客户端](https://app.gitbook.com/jump/super-jump/word?word=%E5%AE%A2%E6%88%B7%E7%AB%AF),深圳base。\ 7 | 8 | 9 | ### 一面(7.8) 10 | 11 | ![](https://uploadfiles.nowcoder.com/images/20200803/570499679\_1596435657189\_CACEBFCBFB206DB520204DBA298FCF30) 12 | 13 | 因为这是我的第二次面试,第一次[腾讯](https://app.gitbook.com/jump/super-jump/word?word=%E8%85%BE%E8%AE%AF)直接一面挂了。所以蛮紧张很多背概念。 这面面蛮差以为会挂,谢谢字节愿意捞我。 14 | 15 | ### 二面(7.23) 16 | 17 | \ 18 | 这面表现比上次好很多,因为隔了两个星期,[算法](https://app.gitbook.com/jump/super-jump/word?word=%E7%AE%97%E6%B3%95)顺利撕出来了,这面很注重实现细节,基础,再次感谢字节继续捞我。 19 | 20 | ![](https://uploadfiles.nowcoder.com/images/20200803/570499679\_1596435961908\_38D077FAA6C5091854A9ABFBC0F657D4) 21 | 22 | ### 三面(7.29) 23 | 24 | ![](https://uploadfiles.nowcoder.com/images/20200803/570499679\_1596436176607\_7AD52186DE97E029F5582D2257D1ACC6) 25 | 26 | 许愿吧offer,现在还没给感谢信,非常感谢字节给我三面的机会,因为我[腾讯](https://app.gitbook.com/jump/super-jump/word?word=%E8%85%BE%E8%AE%AF)一面挂了,字节一面也没面好一度失去面提前批的自信。 ![](https://uploadfiles.nowcoder.com/images/20191018/63\_1571399293050\_586E508F161F26CE94633729AC56C602)![](https://uploadfiles.nowcoder.com/images/20191018/63\_1571399271580\_F19C9085129709EE14D013BE869DF69B)\ 27 | 所以总结下我的字节面试: 1、 背概念是没有办法过面试的,必须去探究看到的知识点细节,去理解。 比如get和post,我从网上看来的他们区别,get是获取信息,post是提交表单,但是面试官一个反问我,get不可以提交信息吗,我就不太清楚了。 2、 语言的表达问题,很多概念我们看似理解了,但是把它说给别人听,流畅表示出来,就需要更深层次的理解。\ 28 | 路漫漫其修远兮,找工作还有很长一条路要走。\ 29 | 吐槽一下,我字节一面面的蛮痛苦的,因为面试官一直抓着一个点把我问的无言以对。以及我问他给我的建议“我们想要聪明的人,需要在开放性问题上有更好的理解”,真是把我打击到了。\ 30 | 但是[腾讯](https://app.gitbook.com/jump/super-jump/word?word=%E8%85%BE%E8%AE%AF)的面试官就直接温柔的说“好的没关系我们下一个”\ 31 | 然后[腾讯](https://app.gitbook.com/jump/super-jump/word?word=%E8%85%BE%E8%AE%AF)就直接把我挂了=-= 所以看面试官不能看表面吧。\ 32 | \ 33 | \ 34 | 更新一下后续,没过,唉。 35 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/before/zi-jie-tiao-dong-de-xiao-zhao-mian-shi-jing-sui-ti-qian-pi-mian-bi-shi.md: -------------------------------------------------------------------------------- 1 | # 字节提前批移动端面经(1-3面)已拿意向书 2 | 3 | {% embed url="https://www.nowcoder.com/discuss/486381?type=post&order=time&pos=&page=1&channel=1009&source_id=search_post" %} 4 | 5 | 碎碎念:之前在牛客许愿,后来来了offer就忘记了要发,现在赶紧补上。三次面试是一天内完成的,意向书是面试结束后过了一周拿到的。 6 | 7 | 楼主投的大方向是:抖音/抖音火山版/直播。复盘一下:其实我总共被问得问题并不多,主要是实习问的较多,所以建议大家实习做的东西一定要保证能说出目的意义,讲清楚技术实现,以及相关的技术延伸。 8 | 9 | ## 一面(1小时14分) 10 | 11 | > 主要问java,以及虚拟机,问了一点android 12 | 13 | 1.实习项目有关的介绍以及问题回答 14 | 15 | 2.反射与代理的区别,动态代理,静态代理,二者的区别,以及代理模式的UML图 16 | 17 | 3.字节码技术 18 | 19 | 4.虚拟机的双亲委派,以及好处 20 | 21 | 5.虚拟机栈的作用,以及什么情况下会发送Stack Overflow 22 | 23 | 6.谁能做GCRoot,为什么计数法不如可达性好 24 | 25 | 7.为什么要分新生代和老年代,如何区分 26 | 27 | 8.GC算法都介绍一下 28 | 29 | 9.类加载的过程,方法区中存的是什么,类型信息都包括什么,如何判断两个Class是否相等。 30 | 31 | 10.HashMap的put方法讲一下,讲一下如何扩容,讲一下一个类作为HashMap,要实现哪些方法,equals和hashCode有什么区别和联系 32 | 33 | 11.消息机制讲一下,讲一下 ThreadLocal,讲一下Handler处理信息有什么方法(除了handleMessage还有什么),MessageQueue是否有长度限制,android中Message多不多? 34 | 35 | 12.Activity A到Activity B跳转的一个生命周期的过程 36 | 37 | 13.Activity A(standard模式)跳转到B(单例模式),B再跳转到A,此时返回,会出现什么情况 38 | 39 | 14.InVisible和Gone的区别,Gone和ViewStub的区别 40 | 41 | 15.字符串第一次出现一个的字符 42 | 43 | ## 二面(34分) 44 | 45 | > 计算机网络相关 46 | 47 | 1.osi七层架构,物理层做什么的 48 | 49 | 2.输入网址之后发生的一些列事情 50 | 51 | 3.DNS用了什么协议,具体是怎么做的 52 | 53 | 4.TCP的三次握手,以及流量控制 54 | 55 | 5.HTTP报文里有什么 56 | 57 | 6.HTTP与HTTPS有什么区别,加密算法是什么 58 | 59 | 7.HTTP的响应码有哪些? 60 | 61 | 8.get与post的区别 62 | 63 | 9.两个有序数组,找到中位数 64 | 65 | ## 三面(50分钟) 66 | 67 | > 深入android方面以及实习经历 68 | 69 | 1.实习项目有关(包括一些具体实现,以及一些关键问题) 70 | 71 | 2.LayoutManager的作用 72 | 73 | 3.RecyclerView用的多么有哪些了解,如何去实现双层瀑布 74 | 75 | 4.如何去设计一个SDK(很多细节的问题) 76 | 77 | 5.扑克牌,抽五张是同花的概率,抽五张是顺子的概率 78 | 79 | 6.RN以及Redux的了解,好处,以及使用,以及工作中对于android和RN的比重 80 | 81 | 7.单例模式的好处,那么什么时候不去用单例呢? 82 | 83 | 8.SP的内部实现了解么?如何实现的序列化 84 | 85 | 9.了解注入么? 86 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/before/zi-jie-tiao-dong-ke-hu-duan-kai-fa-liang-ci-yi-lun-you-21-jie-qiu-zhao.md: -------------------------------------------------------------------------------- 1 | # 字节跳动客户端开发两次一轮游(21 届秋招) 2 | 3 | {% embed url="https://leetcode-cn.com/circle/discuss/flycQ1/" %} 4 | 5 | ## 基本情况 6 | 7 | 字节跳动的提前批是我秋招的第一次面试,时间应该是在7月中下旬,那时候刚结束完小论文,很多东西都没准备起来,发挥的不好是可想而知的。此处建议大家把理想公司的面试尽量安排在靠后的时间点,越后面发挥的会越好。 8 | 9 | 字节跳动的正式批是走朋友的内推,一个简单的编程题改造因为过于紧张再加上在文档中写,没办法debug,写了较长时间,直接就挂了。此处建议大家多多练习算法题,特别是输入输出和不同情况的变形,除了在leetcode上跑以外,还需要自己本地多跑下,字节比较注重算法题。 10 | 11 | ## 提前批(120min) 12 | 13 | (基本问题)自我介绍和项目介绍 14 | 15 | (计网)http和https的区别 16 | 17 | (计网)浏览器中输入域名(url)后发生了什么 18 | 19 | (操作系统)进程和线程的定义 20 | 21 | (操作系统)进程通信方式 22 | 23 | (安卓)Android 进程通信的方法 24 | 25 | (安卓)Intent 是怎么进程通信的 26 | 27 | (安卓)安卓四大组件 28 | 29 | (安卓)内存泄漏有哪几种情况 30 | 31 | (java)四种类型强制转换 32 | 33 | (java)数组和链表的区别 34 | 35 | (java)深拷贝和浅拷贝 36 | 37 | (jvm)如何判断堆中哪些对象需要被回收 38 | 39 | (jvm)gc回收 40 | 41 | (jvm)新生代和老年代都用什么算法 42 | 43 | (算法)计算某个字符串的所有排列组合,并且按字符串逆字典序排序的方式输出。 44 | 45 | 类似于有重复字符串的排列组合和无重复字符串的排列组合。看到题目之后先问了面试官字符串会不会有重复的字符,他说有重复。此处建议大家多跟面试官沟通需求。本人当时不太会输入输出,排列组合都弄出来了,但是按逆字典序排序的方式输出时候写错了,写代码弄了1h左右,所以面试失败了。通常面试官不会像这位面试官一样好脾气,看面试者写了一小时。。面试官说我写的思路是对的,但是不知道为啥最后通过率还是0%,可能是牛客网对输入输出有一定的规定,所以大家记得提前练习下输入输出。 46 | 47 | 本题的多种不同方式的代码在我整理的算法笔记中有写,大家可以搜索关键词(字节1面)。 48 | 49 | ## 正式批(50min) 50 | 51 | (基本问题)自我介绍和项目介绍 52 | 53 | (基本问题)学习路线 54 | 55 | (海量数据问题)从海量数据中找出最大的前K个数 56 | 57 | (安卓)Handler机制 58 | 59 | (安卓)安卓中怎么创建一个线程池 60 | 61 | (安卓)Activity A 启动 Activity B,两个Activity的生命周期顺序 62 | 63 | (安卓)关于Android Activity之间传递数据的方式 64 | 65 | (jvm)jvm中,直接内存是什么 66 | 67 | (java)final,finalize, finally有什么区别 68 | 69 | (java)HashSet类如何实现添加元素保证不重复的 70 | 71 | (算法)最长递增子数组的具体数组 72 | 73 | 类似于最长上升子序列和递增子序列,但题目要求是输出最长递增子数组(子数组连续,子序列不连续)的具体数组(不是求长度)。面试时候发挥的不是很好,再加上是在文档里面写的,没办法debug,就更紧张了。事后复盘时写出了这题的不同变型【最长递增子数组长度,最长递增子数组具体数组,最长非递减子数组长度,最长非递减子数组具体数组,最长递减子数组长度,最长递减子数组具体数组,最长非递增子数组长度,最长非递增子数组具体数组。】,在我整理的算法笔记中有写,大家可以搜索关键词(最长递增子数组) 74 | 75 | ## 结束语 76 | 77 | 字节面试的算法题不会很难,但是可能存在一些变型,所以想要面试字节的同学一定要多注意研究每道题的不同情况,除了leetcode练习以外,可以额外在本地做一些变型题和输入输出处理。在面试中,实力和运气都很重要。如果有绝对的实力的话,运气是锦上添花;如果说实力还在发展阶段,运气好的话也可以碰到自己会的题目。心灵鸡汤:面试失败并不可怕的,事后的复盘很重要,不断做更好的自己就行了,某家公司不行的话就下一家公司呗。 78 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/before/zi-jie-tiao-dong-ke-hu-duan-kai-fa-ti-qian-pi-yi-mian-liang-jing.md: -------------------------------------------------------------------------------- 1 | # 字节跳动 客户端开发提前批一面凉经 2 | 3 | {% embed url="https://www.nowcoder.com/discuss/454673" %} 4 | 5 | 字节跳动的提前批,我在7月12号,差不多是赶在了最后时间投递的岗位,原本以为我这种转专业过来的菜鸡根本在提前批不能有面试机会,没想到第二天就给了一个面试机会。HR没联系上我的手机,直接邮件安排的时间。 6 | 7 | 时间:7月17号,40mins 8 | 9 | 总体印象: 10 | 11 | 面试官人特别nice,专业问题上特别喜欢问基础概念,如果只是照科背书的话肯定不行,至少要结合自己的想法能够进行复述。 12 | 13 | 上来先自我介绍,然后开始一些计算机基础的问题。 14 | 15 | ## OS: 16 | 17 | 1\. 进程之间的通信方式(信号量和共享内存, 都没有让我答到其他的管道啥的方式,直接追问信号量的相关概念) 18 | 19 | 2\. 进程与线程工作原理以及区别 20 | 21 | 3\. 物理内存和虚拟内存的概念是否有了解(没复习到,直接不会) 22 | 23 | ## 数据库: 24 | 25 | 1\. 数据库内部数据的组织架构相关(答了MySQL组织方式主要是B+树,然后我介绍了平衡树、B树的特性,及B+树的特点相关概念,因为是突击的知识,把我会的全部说了,面试官点了点头就没深挖了) 26 | 27 | ## 计算机网络: 28 | 29 | 1\. TCP三次握手是什么(如果没有第三次握手的话,会发生什么情况,这个地方我回答的是会造成客户端可能是很久以前就发送的第一次请求,如果没有客户端再次的发送,无法保证客户端还准备发送连接请求,可能已经下线了等情况) 30 | 31 | 2\. http请求的全部过程 32 | 33 | 3\. https的工作过程 (我只描述了公钥和秘钥)然后追问了我客户端和服务器端为什么不直接互相发送公钥私钥,我扯了些别的,没答道点子上应该是,然后面试官又反问了一下,我表示真的不熟悉了,然后下一题了 34 | 35 | 4\. 栈和堆在内存上的实现方式? (内存管理这一块我真的不太会,赶紧去补了) 36 | 37 | ## 算法:(牛客网的在线编程,没有测试运行,) 38 | 39 | 1\. 栈在数据结构上的实现方式 40 | 41 | 2\. 让我设计一个单例模式, 42 | 43 | 还是我太菜了,没想到设计模式会这么样考察,挣扎了一会和面试官表示不会 44 | 45 | 3\. 换了一题最小栈的设计(LC原题 https://leetcode-cn.com/problems/min-stack/) 46 | 47 | 就不赘述了,很简单,但是面试官很看中思考的过程,然后一定要问清楚实际的时间空间复杂度要求。 48 | 49 | 然后开始问优化,(空间优化,问清要求后,说明是在最小栈上优化,原数据栈不动)我当时想到的是最小栈中在底下的数如果小于了上面的元素,那么上面的元素就可以不需要入栈了,后面就没有再说,面试官也表示理解了,时间也差不多就结束了。 50 | 51 | 52 | 53 | 反问,我问了更推荐我去ios还是安卓,面试官表示都有很好的的发展哈,然后面试考察过程也可以看到没有太多具体到客户端的知识,都是计算机基础的知识(所以大家还是多多夯实基础吧,加油!) 54 | 55 | 最后小菜鸡我许愿一下二面吧。本身自己就是生化环材出生,转行的想法真的是今年才开始,准备的很不充分,也不抱太大希望,秋招还没开始,多积累几次面试经验也是极好的。 56 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/intern/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 目前共计 57 篇面经 3 | --- 4 | 5 | # 实习 6 | 7 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/intern/android/2019-chun-zhao-shi-xi-android-mian-shi-zong-jie-hou-xu-zai-fa-qiu-zhao-zong-jie.md: -------------------------------------------------------------------------------- 1 | # 2019春招实习Android面试总结(后续再发秋招总结) 2 | 3 | 作者:heng222\ 4 | 链接:https://www.nowcoder.com/discuss/298790\ 5 | 来源:牛客网\ 6 | 7 | 8 | ## 字节跳动 9 | 10 | ### 字节一面 1h 11 | 12 | #### 项目 13 | 14 | * 介绍项目 15 | * HTTPs加密的解释 16 | * 对称/非对称加密 17 | 18 | #### Java 19 | 20 | * 深拷贝/浅拷贝,怎么实现深-浅拷贝 CopyonWrite 21 | * Java内存(分配->回收) 22 | 23 | #### 网络通信 24 | 25 | * TCP挥手 第三次不挥手会怎么样 26 | 27 | #### 算法 28 | 29 | * 数组A 数组B 计算A-B 30 | * 0-n之间所有质数(先求所有合数) 31 | 32 | ### 字节二面 1.5h 33 | 34 | #### Java 35 | 36 | * 线程同步问题(为什么需要同步&怎么实现同步) 37 | 38 | #### 设计模式 39 | 40 | * 单例模式(静态内部类) 41 | * 其他设计模式简介 42 | 43 | #### 数据结构 44 | 45 | * 排序算法 46 | * 归并/快排(实现原理/平均复杂度/能否提前结束/谁性能更优) 47 | * 堆排(怎么实现调整堆结构/k个最大的数) 48 | 49 | #### 算法题 50 | 51 | * 给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组 52 | 53 | ### 字节三面 40min (挂) 54 | 55 | #### 自我介绍 56 | 57 | * 专业课程 58 | * 看过哪些书 59 | 60 | #### 操作系统 61 | 62 | * 内存分配区域(Java层面回答?对象引用在堆和栈都有么?函数内部new的对象存放在哪?) 63 | * **用户态/内核态** 64 | * **中断** 65 | 66 | #### 计算机网络 67 | 68 | * 计算机网络有哪几层?分别对应什么协议? 69 | * IP TCP传输的都是什么数据? 70 | * DNS? 71 | 72 | #### Java 73 | 74 | * 泛型上界,下界定义/作用 75 | * Java有哪几种锁 76 | * 临界区概念 77 | * synchronized和可重入锁的区别 78 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/intern/android/21-jie-qiu-zhao-zi-jie-an-zhuo-kai-fa-shi-xi-sheng-mian-jing.md: -------------------------------------------------------------------------------- 1 | # \[21届秋招] 字节——安卓开发实习生 面经 2 | 3 | {% embed url="https://www.nowcoder.com/discuss/442244" %} 4 | 5 | ## 一面: 6 | 7 | 先自我介绍 8 | 9 | 进程线程了解吗 10 | 11 | 再浏览器中输入url回车后发生了什么 12 | 13 | TCP和UDP的区别 14 | 15 | 然后开始写题 16 | 17 | 1.求树的直径 18 | 19 | 2.给一个链表,判断链表元素是否回文,要求空间复杂度O(1) 20 | 21 | 写完接着二面 22 | 23 | ## 二面: 24 | 25 | DNS解析的过程 26 | 27 | 然后接着写题: 28 | 29 | 1.如何判断一个二叉树是否是完全二叉树 30 | 31 | 2.手写一个堆排序 32 | 33 | 然后随便聊了会儿天 34 | 35 | 36 | 37 | 感觉自己代码写得好烂,全是bug,调了好长时间,语言的基础竟然没问。 38 | 39 | 通知周日三面,许愿三面能过 40 | 41 | 2020.6.21更新 42 | 43 | ## 三面 44 | 45 | 自我介绍 46 | 47 | 问了高考的情况 48 | 49 | 问了学校的竞赛经历 50 | 51 | 然后写题,一个dp一个单调栈 52 | 53 | 很短,我都以为我要挂了,不一会hr打电话来hr面了 54 | 55 | 56 | 57 | ## hr面 58 | 59 | 自我介绍 60 | 61 | 介绍了下最近在看的csapp这本书 62 | 63 | 问竞赛中印象深刻的事情 64 | 65 | 然后随便聊聊 66 | 67 | 68 | 69 | 总共加起来一共2h40m的面试。有一说一字节的面试体验真的好,大家都很和蔼 70 | 71 | 72 | 73 | 最后许愿offer 74 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/intern/android/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 目前共计 34 篇面经 3 | --- 4 | 5 | # Android 6 | 7 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/intern/android/tou-tiao-san-mian-mian-jin-+hr-yi-shang-an-gan-xie-ge-wei-niu-you-de-bang-zhu.md: -------------------------------------------------------------------------------- 1 | # 头条三面面筋+HR(已上岸,感谢各位牛友的帮助) 2 | 3 | 作者:别催冷风 4 | 5 | 链接:https://www.nowcoder.com/discuss/384207 6 | 7 | 来源:牛客网 8 | 9 | 10 | 11 | 一面(面试官很nice,问的问题基本上宽而浅): 12 | 13 | 1、自我介绍 14 | 15 | 2、**屏幕适配**(**dp、px怎么转换,屏幕真实DPI**...) 16 | 17 | 3、**recyclerView**的复用机制 18 | 19 | 4、进程间通信 20 | 21 | 5、四种**引用** 22 | 23 | 6、**retrofit**源码 24 | 25 | 7、get\post请求的区别 26 | 27 | 8、二叉树的前序遍历,循环实现 28 | 29 | 9、反问环节 30 | 31 | 32 | 33 | 二面(二面面试官的话稍微严肃一些但是还好): 34 | 35 | 1、四种引用用法 36 | 37 | 2、手写 单例模式 38 | 39 | 3、10000个数取最大的100个(这个算法没写完,面试官见时间不够了就让我别写先了) 40 | 41 | 4、 Handler机制(**延时消息机制、handler泄漏原理**) 42 | 43 | 5、**WebView**机制 44 | 45 | 6、**线程和进程以及Android中的对应关系** 46 | 47 | 7、反问环节 48 | 49 | 50 | 51 | 三面(面试官也很nice,见我前面Android知识答得不错,就转个方向,但是我,菜鸡本菜): 52 | 53 | 1、谈谈HashMap(为什么不适用基础数据类型、添加的时候需要注意什么、添加的key有什么特殊性) 54 | 55 | 2、重写equals方法(写不出,面试官一直引导我,最后面试官区去开会去了,让我自己出去查一查,菜) 56 | 57 | 3、**数据库范式**(有印象、但答不清除,太菜了) 58 | 59 | 4、扑克牌三带二(算一算出现的概率,太菜了) 60 | 61 | 5、扑克牌五张同色的概率(降低难度,花了一会时间才算出,太菜了) 62 | 63 | 6、扑克牌乱序发牌(一开始想着交换乱序,后来想了一段时间,构造乱序数组) 64 | 65 | 7、宽泛的聊了一下之前在学校做的小项目 66 | 67 | 8、反问环节 68 | 69 | 70 | 71 | HR(HR是一个小姐姐人很好,问的都是一些基础问题,聊得很轻松) 72 | 73 | 1、自我介绍 74 | 75 | 2、在学校做过的项目 76 | 77 | 3、项目中的难点 78 | 79 | 4、开发过程中时怎么抗压的 80 | 81 | 5、怎么平衡自己的学习时间 82 | 83 | 6、为什么选择客户端方向 84 | 85 | 7、对客户端目前的状况有什么看法 86 | 87 | 8、描述一下自己是一个怎样的人 88 | 89 | 9、反问环节 90 | 91 | 92 | 93 | 总结:字节效率真的是非常高,一般内推推送一到两天就会有面试安排,面试通过的话面试官会直接跟你说通过了,然后等个二十分钟左右,下一面面试官就会向你发起面试,效率非常高 94 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/intern/android/xi-gua-shi-pin-yi-mian.md: -------------------------------------------------------------------------------- 1 | # 西瓜视频一面 2 | 3 | 作者:逆光舞 4 | 5 | 链接:https://www.nowcoder.com/discuss/387078 6 | 7 | 来源:牛客网 8 | 9 | 10 | 11 | 1\. 自我介绍 12 | 13 | 2\. 说说**人脸识别**的过程(这是我研究生搞过的,简历里写了) 14 | 15 | 3\. activity生命周期,**息屏或者按Home键的流程** 16 | 17 | 4\. HashMap原理,get、put的**时间复杂度** 18 | 19 | 5\. 手写线程安全的单例模式,**为什么要用volatile** 20 | 21 | 6\. 事件分发机制,滑动冲突处理 22 | 23 | 7.https的加解密过程 24 | 25 | 8\. 抽象类与接口的区别 26 | 27 | 9\. 对象判死的两种方法,**gc roots**有哪些 28 | 29 | 10 算法:无序数组a,找任意一个i 30 | 31 | 算法题想着用无序数组的中位数来解决,但是面试官说如果选择了数组的最小值或最大值这怎么办,经过我东扯西扯,面试官可能懂了,问了这个方法的时空复杂度。 32 | 33 | 之后面试官说可以从头找,如果当前值小于最小值,那就更新最小值,然后向后找一个比它大的就可以了,但我用了两个for循环,面试官问了下为什么用第二个循环,可能不是很满意,然后就结束了,等通知。 34 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/intern/android/yi-dong-ke-hu-duan-kai-fa-dou-yin-mian-jing.md: -------------------------------------------------------------------------------- 1 | # 移动客户端开发(抖音)面经 2 | 3 | {% embed url="https://www.nowcoder.com/discuss/439455" %} 4 | 5 | 6 | 7 | ## 一面 8 | 9 | java: 10 | 11 | 1、jvm启动过程? 验证是验证什么 12 | 13 | 14 | 15 | 2、强引用、软引用、弱引用、虚引用,是什么?分别在什么时候用 16 | 17 | 18 | 19 | 3、反序列和序列化 为什么要? 什么情况下要? 20 | 21 | 22 | 23 | 4、反射 为什么要反射? 什么时候用? 缺点? 24 | 25 | 26 | 27 | 5、hashcode 为什么出现、是什么、equals关系 28 | 29 | c语言: 30 | 31 | 6、include 作用、import作用 32 | 33 | 34 | 35 | 7、static关键字:c跟java 36 | 37 | 38 | 39 | 8、动态编译、静态编译 40 | 41 | 42 | 43 | 9、线程通信 44 | 45 | 46 | 47 | 10、设计模式:生产者消费者、工厂模式、单例模式(3种实现、为什么双验证)你会怎么设计 48 | 49 | 11、tcp和udp区别 50 | 51 | 52 | 53 | 11、做一道题topk的题,指定用快排的思路 54 | 55 | 56 | 57 | ## 二面 58 | 59 | 60 | 61 | 1、项目及项目里用到的知识 62 | 63 | 2、3次握手、4次挥手、为什么不4次、5次 64 | 65 | 3、数据结构,10大排序挑2个讲 66 | 67 | 4、计算机系统,中断是怎么实现的 68 | 69 | 5、计算机系统的锁底层是怎么样实现的 70 | 71 | 6、多核cpu,多线程怎么访问同一个内存 72 | 73 | 安卓: 74 | 75 | 7、怎么学安卓 76 | 77 | 8、handle作用,为什么 78 | 79 | 9、有没有写过安卓的多线程 80 | 81 | 还有的有点记不清了 82 | 83 | 84 | 85 | ## 三面 86 | 87 | 88 | 89 | 1、项目,项目遇到什么问题,怎么解决 90 | 91 | 2、有没有接触过安卓,怎么看内存占用情况 92 | 93 | 3、有没有用过什么框架 94 | 95 | 4、有没有用过GitHub 96 | 97 | 5、安卓生命周期 98 | 99 | c++: 100 | 101 | 6、list与vector区别 102 | 103 | 7、多态 104 | 105 | 8、能不能来实习 106 | 107 | 9、做题 108 | 109 | 排序,给一个链表,按照链表某个值排序 110 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/intern/android/zi-jie-an-zhuo-shi-xi-yi-mian.md: -------------------------------------------------------------------------------- 1 | # 字节安卓实习一面 2 | 3 | 作者:falloutboy 4 | 5 | 链接:https://www.nowcoder.com/discuss/504910 6 | 7 | 来源:牛客网 8 | 9 | 10 | 11 | activity生命周期,启动模式 12 | 13 | sync和lock区别,condition干什么 14 | 15 | eventbus实现 16 | 17 | 运行时注解和编译时注解区别(没注意过,回头看看) 18 | 19 | 线程池源码 20 | 21 | gc回收,可达性分析法, 22 | 23 | 懒汉,饿汉,dcl (大一看的,对不上号了) 24 | 25 | recyclerview缓存 26 | 27 | itemdecoration 28 | 29 | recyclerview怎么实现动画(不会,只会用属性动画) 30 | 31 | 补间动画,属性动画(没看源码说的一点) 32 | 33 | 三次握手,四次挥手 34 | 35 | 进程调度算法 36 | 37 | 38 | 39 | 一个超级简单的算法题,大数相加,开始我以为是想乘写错了,后来说了思路,还是在提醒后写好的 40 | 41 | 42 | 43 | 44 | 45 | 整个过程一个小时多一点,前面应该都挺满意,算法题是真的捞;🥶 46 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/intern/android/zi-jie-an-zhuo-yi-mian-mian-jing.md: -------------------------------------------------------------------------------- 1 | # 字节 安卓一面面经 2 | 3 | {% embed url="https://www.nowcoder.com/discuss/461299" %} 4 | 5 | 字节安卓 北京(日常实习) 6 | 7 | ## 7.26 2.10-3.40 一面 8 | 9 | 安卓: 10 | 11 | Activity生命周期 12 | 13 | 有其他活动加入时生命周期变化 14 | 15 | 若ActivityB变透明状态 ActivityA的周期变化 16 | 17 | 四大布局(主要帧布局) 18 | 19 | 线性布局组件能否覆盖 20 | 21 | 22 | 23 | java: 24 | 25 | 四大引用 26 | 27 | 设计模式 28 | 29 | 怎么绕过单例模式(反射 反序列化) 30 | 31 | 序列化和反序列化 32 | 33 | gc一整套 34 | 35 | 36 | 37 | 算法:leetcode 142 变形 求环的长度 38 | 39 | (我假装不会,和面试官推导了会怎么求...) 40 | 41 | 42 | 43 | 自我感觉回答的都不错 面试官反馈也还可以 就是到现在还没收到消息 有点慌 44 | 45 | 求个二面!!! 46 | 47 | 48 | 49 | 28号接到二面通知 50 | 51 | ## 7.30 字节安卓 二面2.00-3.00 60分钟 52 | 53 | 面试官胖胖的 看着好严肃 54 | 55 | hashmap 原理 机制 扩容(他说我扩容说太简单了。。) 56 | 57 | 单例模式 手写DCL 懒汉 58 | 59 | 然后各种问 你这个确定安全吗? 会出现什么情况?(一度被吓到 怀疑自我,最后他给我说大部分是安全的 ,感觉在压力测试) 60 | 61 | 还问我知道double check吗 62 | 63 | lock锁和sy锁 以及使用场景 64 | 65 | 安卓的 线程通信 和进程通信 机制 66 | 67 | 进程通信底层 68 | 69 | 主线程的looper.loop()是谁在调用 70 | 71 | 算法 给你数组 实现堆排序的过程(我刚开始i说 用优先队列 他说不用这么麻烦,只要给我输出是最大堆的形式,我都卡半天不知道干嘛 最后才想起来用堆的特性 父节点与子结点交换,不知道对不对) 72 | 73 | 面完面试官说我还行 安卓也太基础了 不过实习应该够 自我感觉凉凉 74 | 75 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/intern/android/zi-jie-dou-yin-yi-mian-ke-hu-duan-kai-fa.md: -------------------------------------------------------------------------------- 1 | # 字节抖音(一面客户端开发) 2 | 3 | 1、一个链表找倒数第n个元素,复杂度O(n) 4 | 5 | 2、一个链表怎么判断有没有**闭环** 6 | 7 | 3、快排 8 | 9 | 4、二分法 10 | 11 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/intern/android/zi-jie-ke-hu-duan-kai-fa-yi-mian.md: -------------------------------------------------------------------------------- 1 | # 字节 客户端开发 一面 2 | 3 | {% embed url="https://www.nowcoder.com/discuss/527225" %} 4 | 5 | 1\. 自我介绍和项目介绍 6 | 7 | 2\. MySQL 存储引擎,之间的区别; 8 | 9 | 3\. 索引结构, MySQL 怎么判断一条查询语句命中索引; 10 | 11 | 4\. Socket 创建流程 12 | 13 | 5\. CPU 调度算法,多核的情况下,操作系统怎么处理; 14 | 15 | 6\. 操作系统有哪些算法支持高效的内存的申请与释放,同时最大化的减少碎片。 16 | 17 | 7\. zero-copy 与 copy-on-write(COW); 18 | 19 | 手撕代码:a b 两个字符串,找出b中匹配a的连续子串(连续子串长度与a相同,每个字符位置可以不同) 20 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/intern/android/zi-jie-ke-hu-duan-shen-qi-er-mian.md: -------------------------------------------------------------------------------- 1 | # 字节客户端神奇二面 2 | 3 | 作者:huagua\ 4 | 链接:[https://www.nowcoder.com/discuss/408861](https://www.nowcoder.com/discuss/408861)\ 5 | 来源:牛客网\ 6 | \ 7 | 8 | 9 | > 请问各位牛友,有人面试android[客户端](https://app.gitbook.com/jump/super-jump/word?word=%E5%AE%A2%E6%88%B7%E7%AB%AF)的时候被问到过c跟c++吗? 10 | 11 | 面试官大哥全程围绕c和c++,弃我复习了那么久的java于不顾,咱越听越觉着不对,我又不是面试c++\ 12 | 开发岗,这android开发也没听说谁用c跟c++。c就仿佛是我那遥远的童年,好像知道点啥又说不出来,c++咱也才学了没多久。关键就是我看了这么多[面经](https://app.gitbook.com/jump/super-jump/word?word=%E9%9D%A2%E7%BB%8F),没人跟我说面试安卓还要准备c跟c++。。。没有一点点防备。。。。 13 | 14 | 我回味了一下,可能是刚开始的自我介绍给了他一种错误暗示:我学过c,我会c,问我c吧。\ 15 | 我应该强调我学过java,我会java,问问我java吧 16 | 17 | 下面来看一下问了些啥: 18 | 19 | 1. 内存划分 20 | 2. 形参和实参 21 | 3. 指针和引用 22 | 4. const int\* xxx和int\* const xxx 23 | 5. int、long、longlong占多少位?为什么会有long?(俺不知道为啥会有long) 24 | 6. 虚函数 25 | 7. STL(问了一嘴,说不太了解,pass) 26 | 8. C++强制类型转换,说说static_cast(我不懂。。。。) 27 | 9. 安卓都学过啥?四大组件是什么?(终于问了句android) 28 | 10. **大小端** 29 | 30 | 还有啥都记不清了,反正,我等着收感谢信了。怪只怪我自己基础不可,待我来年再来 31 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/intern/android/zi-jie-ke-hu-duan-shu-qi-shi-xi-yi-mian-mian-jing.md: -------------------------------------------------------------------------------- 1 | # 字节客户端暑期实习一面面经 2 | 3 | {% embed url="https://www.nowcoder.com/discuss/415087" %} 4 | 5 | * java容器有哪些 6 | * hashmap底层原理(必考) 7 | * hash值的计算(不知道为啥我说高16和低16位异或面试官有点犹疑的亚子。。) 8 | * 为什么要重写equals和hashcode (我说提高比较的效率) 9 | * 插入的时候会发生啥(直接插值,链表,红黑树,忘记说扩容了不过也没问) 10 | * 扯到红黑树特性(就知道什么黑节点层数一样。扯了查找树的特性,试图糊弄) 11 | * 网页中输入一个网址会发生啥(DNS,http,tcp,ip。。。) 12 | * DNS流程是怎样的(迭代和递归询问,忘说先查本地缓存了,没细究) 13 | * TCP三次握手四次挥手,为什么,和UDP的区别 14 | * handler机制 15 | * looper,message,handler,queue 16 | * handler内存泄漏,内存泄漏的引用链是啥?(looper—>messagequeue->message->handler,所以如果队列为空就不会泄露) 17 | * 扯到了对象池(Message类维护,每个message有next指针) 18 | * 怎么解决内存泄漏(声明static,弱引用包裹) 19 | * Recyclerview缓存机制 20 | * 四级缓存 21 | * attachedScrap:还在页面的viewholder 22 | * changedScrap:与view分离的viewholder 23 | * cacheView:刚移出屏幕的缓存,可直接复用 24 | * ViewCacheExtension:自己定义 25 | * RecycledViewPool:超出cachedView的viewHold,数据被清空要重新设置 26 | * fragment生命周期 27 | * 大概说了跟activity对应的流程,(方法名饶了我吧) 28 | * 说了怎么替换fragment,怎么用fragmentmanager 29 | * fragment结束的时候回调什么?(母鸡) 30 | * binder机制(跳过) 31 | * 算法题:找树中有没有和为特定值的路径,返回boolean,看错条件被提醒两次。。(人傻了当时) 32 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/intern/android/zi-jie-ke-hu-duan-yi-er-mian-mian-jing-xia-zhou-san-mian.md: -------------------------------------------------------------------------------- 1 | # 字节 客户端 一二面面经 下周三面 2 | 3 | {% embed url="https://www.nowcoder.com/discuss/189364" %} 4 | 5 | 6 | 7 | 8 | 9 | 一个JavaWeb的小白,投了客户端(Android),感觉希望不大 10 | 11 | 一面: 12 | 13 | 自我介绍 14 | 15 | Java中Thread与Runnable在线程管理上的区别 16 | 17 | 对安卓的了解 18 | 19 | 实现两个数组利用两个线程交替打印,且固定由第一个开始 20 | 21 | 你了解JVM吗(我说我了解,然后面试官不问我了。。。。。。。) 22 | 23 | 想做UI吗 不想 24 | 25 | 还有一个计算题: 26 | 27 | AB抛硬币,A先抛硬币,正面为赢,直到其中一个人抛出正面 28 | 29 | 求A赢的概率 30 | 31 | 32 | 33 | (一面我准备的所有基础知识,一点都没问。。哭了,当时感觉一面都要凉了) 34 | 35 | 36 | 37 | 二面:(面试官很好) 38 | 39 | 40 | 41 | 对安卓有多少了解 没啥了解 42 | 43 | 说说几种集合的区别 可能是我回答集合的时候顺带把所有的底层实现也都说了,没问我数据结构 44 | 45 | 讲讲排序 46 | 47 | 7我记得好像是7种排序方法,让我讲堆排序,之后又回答了一下快排(可能我写的快排和树上的不一样,面试官让我详细的讲了一下我的快排结束方法) 48 | 49 | 顺带着也说了一点点归并。 50 | 51 | 讲讲二分查找 52 | 53 | 54 | 55 | 周五HR小哥哥通知我下周三面,他说还有两次面试,我怕我应该到不了HR面。 56 | 57 | JVM啦操作系统啦数据结构啦HTTP/TCP/UDP啦,我准备的挺充分的,结构一面面试官一点都没问,二面面试官看着我的简历挑的问的。 58 | 59 | 可能是,面试官觉得太基础了。。。。。。 60 | 61 | 也许是上一次我面试的资料在那儿能看到,上次问我的一个都没有问。。 62 | 63 | 等三面 64 | 65 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/intern/android/zi-jie-shi-xi-mian-jin.md: -------------------------------------------------------------------------------- 1 | # 字节实习面筋 2 | 3 | {% embed url="https://www.nowcoder.com/discuss/436447" %} 4 | 5 | 写一下今天下午的字节面试感想吧,我在牛客上直接投的简历,java和安卓(零经验)都投了,不知道为啥面试是安卓的。 6 | 7 | 8 | 9 | 发在这里攒攒人品,我这个菜鸡,6月份才开始投实习简历,第一次投大厂,体验感还行。面试官挺温和的,面试之前我及其紧张,中午饭都吃不进去,因为我知道自己肯定过不了,我甚至都想放面试官的鸽子,但是我怕被拉入黑名单,刚好睡起来4:13(15分约好的面试)也许这就是缘分吧。 10 | 11 | 12 | 13 | 接完电话,慌得一批,赶紧打开面试链接,可能面试官看出了我的菜,考的都是基础的,没有特别难的那些东西。从四点面到六点,一共俩个面试官,一人大概一小时吧。 14 | 15 | 16 | 17 | 主要考察的就是Java基础,jvm,多线程。 18 | 19 | 20 | 21 | hashmap的扩容机制,为什么要俩倍扩容,还有其他问题记不清了 22 | 23 | Java垃圾回收机制 24 | 25 | 多线程相关的几个关键字 26 | 27 | 抽象类和接口的区别 28 | 29 | synchronized修饰代码块,方法,静态代码块的区别(还有这个单词的拼写,哈哈) 30 | 31 | 32 | 33 | 还有简单的计算机网络,访问一个页面发生了什么,http和https的区别,get和post的区别,证书 34 | 35 | 36 | 37 | 简单的操作系统,进程和线程的区别 38 | 39 | 40 | 41 | 俩道算法题 42 | 43 | 44 | 45 | 1.手写快速排序 46 | 47 | 2\. 给一个10,输出相加等于10的连续子数组。(这个我想到滑动窗口,但是最后时间复杂度还是写成o(n^2),都怪自己平时没有多练习,做了一遍也没有记模板) 48 | 49 | 50 | 51 | 3.双栈实现队列(口述一下过程就行) 52 | 53 | 54 | 55 | 项目的话,面试官就让我介绍一下我的微服务电商项目,那些简单的物联网小项目没有问。项目也没有细问,可能面试官不感兴趣,或者更看重你的基础。 56 | 57 | 58 | 59 | 算法题都是剑指offer原题,大家一定要重视起来,多加练习多做几遍,我这个菜鸡从3月份到现在才断断续续刷了80多道题,而且大部分只做了一遍,这个碰到原题要靠运气,运气给你了,你一点实力没有只能自己怪自己了。 60 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/intern/android/zi-jie-tiao-dong-an-zhuo-hou-duan-shi-xi-5-lun-mian-jing.md: -------------------------------------------------------------------------------- 1 | # 字节跳动安卓、后端实习5轮面经 2 | 3 | 作者:icdit\ 4 | 链接:[https://www.nowcoder.com/discuss/400283](https://www.nowcoder.com/discuss/400283)\ 5 | 来源:牛客网\ 6 | \ 7 | 字节日常实习,安卓+后端共面了5轮,由于安卓岗是字节来学院招工,老师收简历统一投递,所以无奈来面了下,技术面共三轮,过了后没拿offer,重新过来面后端。面试前在牛客收获不少,由衷感谢各位前人栽树、后人乘凉的精神,也来分享下[面经](https://app.gitbook.com/jump/super-jump/word?word=%E9%9D%A2%E7%BB%8F)。 不过有些问题记不清了,暂时先写这些吧。 总体感觉字节实习岗面试难度不大,[算法](https://app.gitbook.com/jump/super-jump/word?word=%E7%AE%97%E6%B3%95)也就lc medium的难度,各位好好准备,一定会拿offer的,这里先预祝大家。 8 | 9 | 安卓: 10 | 11 | TCP、UDP区别;TCP服务端能否无限等待;快排;http报文首部的User-Agent字段;线程的调度;为什么要分用户态、内核态;实现登录功能的实现流程;二分法找递增[排序](https://app.gitbook.com/jump/super-jump/word?word=%E6%8E%92%E5%BA%8F)数组中的绝对值最小的数,找数组中和为k的m个数,因为用cpp写的代码,所以还问了map的底层实现。 12 | 13 | 后端: 14 | 15 | 一面: 16 | 17 | [项目](https://app.gitbook.com/jump/super-jump/word?word=%E9%A1%B9%E7%9B%AE);数据库并发怎么实现,行锁;给一个url,分析其中的各字段的含义;输入url后到渲染出页面发生了什么;页面中的不同资源怎么异步请求(浏览器与服务端怎么协商的);https中的加密要用秘钥,它是存在浏览器中的,为什么是安全的;数组对角线遍历;实现LFU。 18 | 19 | 二面: 20 | 21 | [项目](https://app.gitbook.com/jump/super-jump/word?word=%E9%A1%B9%E7%9B%AE);数据库索引(优缺点、什么场景适合等等);**股票买卖问题**(只能买卖一次和或任意次);无数根各处粗细不均匀的绳子,烧完是一个小时,怎么计时出45分钟。 22 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/intern/android/zi-jie-tiao-dong-an-zhuo-ke-hu-duan-mian-jing.md: -------------------------------------------------------------------------------- 1 | # 字节跳动安卓客户端面经 2 | 3 | {% embed url="https://www.nowcoder.com/discuss/474864" %} 4 | 5 | 今年5月参加了字节跳动教育业务安卓客户端的实习生招聘,最终结果不错,拿到了offer,在这里记录一下整个过程,给其他有兴趣面字节的同学一点参考。 6 | 7 | 8 | 9 | 面试内容: 10 | 11 | 面试一个分三面,都是技术面,大概在一周左右就面完了,整体流程算是比较快。问的问题比较正常,属于大厂技术面都会问的,包括计算机网络,操作系统等计算机基础知识,以及一些安卓相关的问题。 12 | 13 | 我当时投简历的时候就上了一个学期的疫情\*\*\*远程安卓课程,基本算是没什么安卓基础,不过这个岗位是接受零基础的,所以安卓相关的问题不会特别难,答不出来也不会再追问,如果是和我一个没什么基础的同学也不用太担心。多刷点题以及巩固下计算机基础知识比较重要,安卓方面了解一些基础的即可,比如四大组件,生命周期函数之类的。如果能讲出view的绘制流程,事件分发机制的话就更好了。 14 | 15 | 会问一些简历上写的项目,和安卓无关也会问,所以还是要在这方面多做准备,想想自己简历的项目有没有攻克过什么难点,有没有遇到过什么问题。 16 | 17 | 语言方面熟练掌握一种即可,目前Android开发是Kotlin first,但是不会kotlin也没关系。我当时面试的时候就是Java,要对Java的一些常见问题有所准备,比如GC,面向对象的特征等等。其他语言的话对应准备一些问题就行。 18 | 19 | 算法上基本上每一面都会有一道算法题,难度在leetcode的简单到中等左右,写不出来也可以和面试官讨论讨论。 20 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/intern/android/zi-jie-tiao-dong-an-zhuo-ri-chang-shi-xi-sheng-liang-jing.md: -------------------------------------------------------------------------------- 1 | # 字节跳动安卓日常实习生凉经 2 | 3 | {% embed url="https://www.nowcoder.com/discuss/528025" %} 4 | 5 | 首先不得不说字节捞人效率真滴高,投一天就把我捞起来的,这点表示很nice。下面开始。 6 | 7 | 一面 8 | 9 | 1\. 讲解一下MVP架构。MVP和MVC的控制层有什么区别? 10 | 11 | 2\. HTTP常用状态码。 12 | 13 | 3\. **除了Json还有哪些数据传输格式。** 14 | 15 | 4\. Json解析的时候是怎么将json解析为对应的类。 16 | 17 | 5\. Java中常见的异常。 18 | 19 | 6\. **热更新**原理。 20 | 21 | 7\. APK文件里面都有些什么。 22 | 23 | 8\. 为什么是DEX文件? 24 | 25 | 9\. Android程序运行时使用的是普通的JVM吗? 26 | 27 | 10\. Flutter dart语言是在什么上运行的。 28 | 29 | 11\. Java怎么实现多线程。 30 | 31 | 12\. Java线程的管理。 32 | 33 | 13\. 线程间切换的方法。线程间通讯。 34 | 35 | 14\. 算法题(1-100建立二叉树,中序遍历输出) 36 | 37 | 38 | 39 | 二面 40 | 41 | 1.算法题:给定单链表,求离终点距离为 k 的节点,要求只扫一次且空间复杂度为O(1)? 42 | 43 | 2.已知一个model类new一个对象,并将该对象作为HashMap的key, value为Hello,修改该对象中某一个属性的值,再去HashMap中get此key,此时的value值是什么? 44 | 45 | 3\. 46 | 47 | ``` 48 | class A { 49 | private int i = 0; 50 | 51 | private void foo() { 52 | 53 | ...... 54 | 55 | new Thread(new Runnable() { @Override public void run() { 56 | 57 | ...... 58 | 59 | i = 1; 60 | 61 | ...... 62 | 63 | } 64 | 65 | }).start(); 66 | 67 | ...... 68 | 69 | System.out.print(i); 70 | 71 | ...... 72 | 73 | } 74 | 75 | } 76 | ``` 77 | 78 | 请问这段代码的输出结果是什么? 79 | 80 | 添加代码,怎么保证输出的结果为1? 81 | 82 | 4.JVM的**GC机制**。 83 | 84 | 5.http缓存了解嘛。 85 | 86 | 面试结束?凉凉 87 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/intern/android/zi-jie-tiao-dong-an-zhuo-shi-xi-yi-er-mian-mian-jing.md: -------------------------------------------------------------------------------- 1 | # 字节跳动安卓实习一二面面经 2 | 3 | 作者:春风\_化雨\ 4 | 链接:[https://www.nowcoder.com/discuss/560467?type=post\&order=create\&pos=\&page=1\&channel=1009\&source_id=search_post\&subType=2](https://www.nowcoder.com/discuss/560467?type=post\&order=create\&pos=\&page=1\&channel=1009\&source_id=search_post\&subType=2)\ 5 | 来源:牛客网\ 6 | \ 7 | 8 | 9 | #### 11.11 更新:已挂。官网状态终止 10 | 11 | #### ------------------------------------------------------------------- 12 | 13 | #### 一面:【一小时】 14 | 15 | * 自我介绍,无[项目](https://app.gitbook.com/jump/super-jump/word?word=%E9%A1%B9%E7%9B%AE) 16 | * http,https,区别 17 | * tcp是哪个层,和udp区别 18 | * http get 和 post 19 | * jvm 内存 20 | * 进程线程 21 | * cpu 调度[算法](https://app.gitbook.com/jump/super-jump/word?word=%E7%AE%97%E6%B3%95) 22 | * hashmap 扩容,为啥是 2 倍,为啥 size 是 2 的幂次方 23 | * 其他忘了……实在太混乱了,但是都是基础问题 24 | * [算法](https://app.gitbook.com/jump/super-jump/word?word=%E7%AE%97%E6%B3%95):给定一个整型数组array和一个加和 n,是否存加和为 n 的三个数,O(n2)就可以,写出来了。 25 | 26 | \ 27 | 让我等一会,二面面试官马上来。因为我很饿,又好累电脑还没电了就只能硬撑了。\ 28 | 29 | 30 | #### 二面【一小时】 31 | 32 | * 自我介绍 33 | * 先写一个[算法题](https://app.gitbook.com/jump/super-jump/word?word=%E7%AE%97%E6%B3%95%E9%A2%98),一个数组,有正有负,是否存在一个三个数的子序列,并且严格递增,解释了一下子序列,解释了一下严格递增,O(n2)写了,让优化……提示提示提示,我死活想不出来,这时候面试官的提示越来越高大上,提示包含关系,提示命题的逆否,提示到我越来越想不起来……过了很久很久。然后说我们下一个环节【此时已经知道肯定没戏了】【力扣334】 34 | * 线程池,线程池参数,从提交任务开始的过程 35 | * jvm线程怎么调度的 36 | * 线程生命周期,我说到中间他就会打断说那这个情况怎么出现呢,java怎么实现的,如何结束线程?提供了什么方法 37 | * java 的锁怎么实现的? 38 | * 显式控制各个线程竞争的有哪些对象呢? 39 | * 问操作系统一定有线程吗? 40 | * static、final、finalize、finally? 41 | * 设计题,讨论一下,如果我们要自己做一个在线合作文档,类似[腾讯](https://app.gitbook.com/jump/super-jump/word?word=%E8%85%BE%E8%AE%AF)文档,有两个需求,一个是多个人在操作的时候尽可能快的要让另一个人去看到前面人的改动;另一个需求是要处理所有人操作的竞争问题,你是怎么想的呢?excel直观,如果是一个doc类型在协作呢? 42 | * 时间差不多了,反问。 43 | 44 | \ 45 | 感觉还是不难,[算法题](https://app.gitbook.com/jump/super-jump/word?word=%E7%AE%97%E6%B3%95%E9%A2%98)也不难,但是我脑子卡了就是卡了,怪不得别人。 46 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/intern/android/zi-jie-tiao-dong-an-zhuo-shu-jia-shi-xi-yi-mian.md: -------------------------------------------------------------------------------- 1 | # 【字节跳动安卓暑假实习一面】 2 | 3 | 作者:红鲤鱼鲤驴与驴 4 | 5 | 链接:https://www.nowcoder.com/discuss/170807 6 | 7 | 来源:牛客网 8 | 9 | 10 | 11 | 讲一下https 12 | 13 | 对称加密和非对称加密 过程 14 | 15 | get post请求,除了这两个还有啥 16 | 17 | hashmap底层结构 扩容机制 查询机制 hash算法 18 | 19 | 讲一下volatile 20 | 21 | 讲一下**内存泄漏** 22 | 23 | 四种引用 **软引用和弱引用的区别 软引用和强引用的区别** 24 | 25 | **自定义布局 怎么把一个布局定义为圆形 比如qq头像** 26 | 27 | sparseArray 28 | 29 | hashmap的key可以是基本类型吗 如果一定要定义为基本类型怎么做 30 | 31 | 基本类型和**包裹类型**哪个占用资源多 为什么 32 | 33 | 手写代码 **求两个链表的交叉结点** 34 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/intern/android/zi-jie-tiao-dong-android-ke-hu-duan-yi-mian-liang-jing.md: -------------------------------------------------------------------------------- 1 | # 字节跳动Android客户端一面凉经 2 | 3 | 作者:我一定可以!! 4 | 5 | 链接:https://www.nowcoder.com/discuss/393567 6 | 7 | 来源:牛客网 8 | 9 | 10 | 11 | 40分钟 12 | 13 | 1.fragment生命周期 14 | 15 | 2.view绘制流程 16 | 17 | 3.如何去绘制一个view 18 | 19 | 4.get和post区别 20 | 21 | 5.tcp和udp区别 22 | 23 | 6.算法题:链表每隔k结点翻转一次 24 | 25 | 7.http的**八种方法**,有没有用过 26 | 27 | 8.http和https 28 | 29 | 9.对称加密和非对称加密 30 | 31 | 32 | 33 | 一紧张忘了一些,好几个没答上来,都是自己认真学过的,太委屈了吧 34 | 35 | 算法十分钟写出来了,面试官说android较为薄弱,其他还是不错的 36 | 37 | 个人感觉答的不好,应该凉了吧,不凉也太奇迹了。虽然总体都懂都有答到。 38 | 39 | 还是玄学一波吧。 40 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/intern/android/zi-jie-tiao-dong-android-ke-hu-duan-yi-san-mian-yi-shou-dao-offer.md: -------------------------------------------------------------------------------- 1 | # 字节跳动 Android客户端 一\~三面(已收到offer) 2 | 3 | 作者:进击的玉米 4 | 5 | 链接:https://www.nowcoder.com/discuss/167509 6 | 7 | 来源:牛客网 8 | 9 | 10 | 11 | 一面 (视频面 3.23 50min) 12 | 13 | 单链表倒数第k个节点 14 | 15 | 平衡二叉树判断(面试官有给思路) 16 | 17 | 堆和栈的区别(内存分配的不同?) 18 | 19 | HTTP和HTTPS区别,在哪层 20 | 21 | TCP和UDP 22 | 23 | TCP怎么可靠 24 | 25 | 线程和进程 26 | 27 | 全局变量和局部变量(分配在什么地方) 28 | 29 | 多线程有什么用,怎么处理 30 | 31 | 优先级翻转 32 | 33 | 死锁 34 | 35 | LRU怎么实现 36 | 37 | 排序中稳定和非稳定 38 | 39 | 快排是稳定还是非稳定 40 | 41 | 42 | 43 | 二面 (视频面 3.23 40min) 44 | 45 | 介绍项目 46 | 47 | 二叉树路径之和为n 48 | 49 | synchronized 50 | 51 | Handler和Looper(单个Looper和多个Handler) 52 | 53 | Handler内存泄露 54 | 55 | 四种引用 56 | 57 | 浏览器使用url整个过程 58 | 59 | volatile 60 | 61 | 单例模式(手写) 62 | 63 | 64 | 65 | 三面 (视频面 3.23 50min) 66 | 67 | 介绍项目 68 | 69 | 即时视频用什么协议:TCP、UDP的区别 70 | 71 | 网络较差用什么协议 72 | 73 | Top K问题 0-100 1000w个小数(后面改成了两位小数)(很详细) -> 桶排序 复杂度 74 | 75 | 项目有没有做什么优化 76 | 77 | 类加载 双亲 78 | 79 | 80 | 81 | 刚刚接到HR电话,已收到offer\~祝愿大家都可以收到心仪的offer呀! 82 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/intern/android/zi-jie-tiao-dong-android-shi-xi-mian-jing.md: -------------------------------------------------------------------------------- 1 | # 字节跳动Android实习面经 2 | 3 | 作者:一只挣扎的咸鱼 4 | 5 | 链接:https://www.nowcoder.com/discuss/170262 6 | 7 | 来源:牛客网 8 | 9 | 10 | 11 | .29 一面 1h 12 | 13 | 说说四大组件 14 | 15 | onpause和onstop方法 16 | 17 | Android中**多线程**实现方法(提到handler) 18 | 19 | 线程**messagequeue**关系 20 | 21 | handler 如何切换线程(handler聊了挺久) 22 | 23 | handler **如何回调** 24 | 25 | handler注意事项(**预防内存泄漏**) 26 | 27 | 四种引用 28 | 29 | **String s=new String("123");建立了几个对象** 30 | 31 | ArrayList\ 删除空字符串("")对象 32 | 33 | 算法 0123\_456\_769变成3210\_654\_967(只有数字加下划线) 其中出了个bug,重写后就正常(汗) 34 | 35 | 过几分钟后二面 36 | 37 | 38 | 39 | 3.29 二面45min 40 | 41 | 算法 二叉树中两个结点的距离(通过公共祖先结点的距离和) 42 | 43 | 先说出思路,回溯获得根到子节点的路径 44 | 45 | **git rebase 和merge** 46 | 47 | git 作用 48 | 49 | **问框架** 50 | 51 | https ssl 加密等 52 | 53 | handler封装使用(handlerThread IntentService) 54 | 55 | **retrofit**如何跨线程 56 | 57 | synchronized和lock区别 58 | 59 | 锁原理 60 | 61 | stack实现o(1)获得最小值,手写基于数组的栈,leetcode上有 62 | 63 | 64 | 65 | 表达能力太差,很多东西说不出来,希望没凉 66 | 67 | 68 | 69 | 4.1 三面40min 70 | 71 | 问我上次面试哪里答得不好,我说算法题没做出来 72 | 73 | 然后再做一次。。 74 | 75 | 之后就问些实习时间等非技术的事情了 76 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/intern/android/zi-jie-tiao-dong-android-shi-xi-sheng-yi-mian-er-mian.md: -------------------------------------------------------------------------------- 1 | # 字节跳动android实习生一面二面 2 | 3 | 作者:JFLIN 4 | 5 | 链接:https://www.nowcoder.com/discuss/366535 6 | 7 | 来源:牛客网 8 | 9 | 10 | 11 | 本人大三,在暑假的时候参加过学校与字节跳动合作的android夏令营,得到了android实习生面试的机会,刷了leetcode,看了看android和java的复习资料,就参加面试了。 12 | 13 | 一面 14 | 15 | 1\. **Parcelable和Serializable**是什么,做什么用,**谁更高效** 16 | 17 | 2\. 数据库中的**事务** 18 | 19 | 3\. 假如手机只有10M内存,**想要申请1M的内存是否一定成功** 20 | 21 | 4\. 讲一下时间片 22 | 23 | 5\. 对**线程池**的理解 24 | 25 | 6\. 想要在一个图片右上角**实现一个圆角**怎么实现 26 | 27 | 7\. Java的四种引用 28 | 29 | 8\. **抖音无限上滑**怎么实现 30 | 31 | 9\. 什么时候会发生**内存泄漏** 32 | 33 | 10\. 算法题 两数之和 时间复杂度 34 | 35 | 二面 36 | 37 | 1\. 自我介绍,做过的项目 38 | 39 | 2\. 数据库**频繁读数据**,可以用什么方式来优化(**索引**) 40 | 41 | 3\. 死锁的四个条件,开发过程中什么情况容易造成死锁 42 | 43 | 4\. 手机端应该和电脑端应用的注意事项和区别。(机型适配) 44 | 45 | 5\. C++和java如何实现多态性,public的父类中子类重写能不能用protected?反过来呢? 46 | 47 | 6\. Mini抖音中做了哪些?遇到的困难以及如何解决。 48 | 49 | 7\. 场景题 **抖音开屏广告**如何实现(包括倒计时和要播放的视频),倒计时点击跳过的时候应该如何实现?**倒计时用Handler,播放的视频url打开时存在本地文件** 50 | 51 | 8\. 算法题 **二叉树的最长路径**(DP) 52 | 53 | 总体来说面的情况不是很好,也通知了我二面没有通过,但是自己的第一次面试经历,还是值得记录下来的。个人觉得算法还是非常重要的,准备的还不够充分,抱着侥幸心理只刷了常见的算法题型。而且大学教的内容实在太局限了,需要多学一些额外的知识。 54 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/intern/android/zi-jie-tiao-dong-ke-hu-duan-yi-er-mian-mian-jing.md: -------------------------------------------------------------------------------- 1 | # 字节跳动客户端一二面面经 2 | 3 | {% embed url="https://www.nowcoder.com/discuss/415012" %} 4 | 5 | ## 4.21 下午4点 一面 6 | 7 | 1\. 自我介绍 8 | 9 | 2\. 项目难点 10 | 11 | 3\. Handler机制,Looper.loop会不会阻塞线程,为什么? 12 | 13 | [答案](broken-reference) 14 | 15 | 4\. gc算法,收集器,stop the world 16 | 17 | 5\. jvm内存区域,为什么要有jvm,我答的是为了隔离物理存储,方便移植,面试官又问会不会影响效率,答会影响,接着问怎么优化 😂,我枯了 18 | 19 | 6\. 进程和线程的区别 20 | 21 | 7\. 框架源码(没看过,不会),**eventbus**有哪些缺点,什么类可以作为event,为什么不用广播 22 | 23 | 8\. 设计模式 24 | 25 | 9\. 手写**单例** 26 | 27 | 10\. 类加载过程,我扯到了invokestatic,面试官问什么时候调用?我答在调用静态方法时调用 28 | 29 | 11\. **dex**了解吗?我答只知道65535,了解类的编译过程吗,不了解;知道源文件编译成什么吗?class文件;为什么要有dex?在dex做了优化;哪些优化?不了解 30 | 31 | 12\. dalvik和hotspot虚拟机了解吗,不了解 32 | 33 | 13\. 异常体系,可以catch error吗?我不确定,面完之后测试了,catch可以捕获thowable,所以可以catch error 34 | 35 | 13\. 算法: 36 | 37 | 反转链表; 38 | 39 | 反转指定区间的链表 40 | 41 | 需要自定义节点,处理输入输出 42 | 43 | 44 | 45 | 一面记得的 内容大致就这些了,顺序记不清 46 | 47 | 下午6点多打来电话,约的第二天下午2点二面 48 | 49 | 50 | 51 | ## 4.22 下午2点 二面 52 | 53 | 1\. 上来先强调了面试纪律,不能作弊(我可是四有青年😀) 54 | 55 | 2\. 自我介绍 56 | 57 | 3\. 项目中用到了哪些技术,除了框架 58 | 59 | 4\. 我做的是音乐播放器,所以面试官问音乐播放在哪里实现,activity还是**service**,用thread可以吗?为什么? 60 | 61 | 5\. 我简历中写到了做人脸识别,他就问有哪些网络,有哪些改进,GAN了解吗?(我又枯了) 62 | 63 | 6\. 为什么有多进程也有多线程?我扯到了虚拟内存空间,面试官就问为什么要这样设计?解决什么问题?**分段和分页**有什么区别?(我的OS都还给老师了😰) 64 | 65 | 7\. http和https区别,**CA证书怎么生成**,怎么保证安全,加密过程,对称加密怎么保证安全? 66 | 67 | 8\. 抽象类和接口 68 | 69 | 9\. **多态**,有哪些实现 70 | 71 | 10\. 算法:求二叉树叶子节点之间的最长路径,没有思路,面试官慢慢引导,最后有了思路,还没写完,面试官就说结束了 72 | 73 | 74 | 75 | 面完到现在都没消息,估计是凉了吧,感觉抖音团队面试难度明显比其他团队高,我也太菜了,希望能有三面吧 76 | 77 | 78 | 79 | 4.28 问了hr,已经凉了,唉,到现在还是0offer,太难了 80 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/intern/android/zi-jie-tiao-dong-ke-hu-duan-yi-mian-mian-jing.md: -------------------------------------------------------------------------------- 1 | # 字节跳动客户端一面面经 2 | 3 | 作者:夜阑hhhhh 4 | 5 | 链接:https://www.nowcoder.com/discuss/562544?type=post\&order=create\&pos=\&page=1\&channel=1009\&source_id=search_post\&subType=2 6 | 7 | 来源:牛客网 8 | 9 | 10 | 11 | 代码写好久,好菜。 12 | 13 | 准备了很久的C++,一点没问到。 14 | 15 | 开篇雷击: 16 | 17 | 1\. 我有一个电影资源,很大,我怎么才能把它快速下载下来? 18 | 19 | (这题被问懵了,就扯了一些,说分布式下载) 20 | 21 | > 多线程下载+断点续传 22 | 23 | 实习经历: 24 | 25 | 1\. 在上海做了什么? 26 | 27 | 2\. 你说到接口自动化,详细聊一下。 28 | 29 | 30 | 31 | 数据结构: 32 | 33 | 1\. B树 34 | 35 | 36 | 37 | 操作系统: 38 | 39 | 1\. 虚拟内存和物理内存的区别 40 | 41 | 2\. 计算机寻址的方式? 42 | 43 | 3\. 直接寻址和间接寻址谁更安全?为什么 44 | 45 | 46 | 47 | 计网: 48 | 49 | 1\. http和https的区别 50 | 51 | 2\. https是如何加密的,详细说下加密算法 52 | 53 | 3\. http1.0和http2.0的区别 54 | 55 | 56 | 57 | 算法题: 58 | 59 | 回文数出二维数组 60 | 61 | (写了一小时,楼主太菜太菜) 62 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/intern/android/zi-jie-tiao-dong-tou-tiao-android-kai-fa-shi-xi-sheng-mian-shi.md: -------------------------------------------------------------------------------- 1 | # 字节跳动-头条Android开发实习生面试 2 | 3 | {% embed url="https://www.nowcoder.com/discuss/447139" %} 4 | 5 | #### 简单的介绍 6 | 7 | 本人末流211计算机专业大三本科生,于2020年6月20日在字节跳动的官网上投递了广州的Android开发实习生。 8 | 9 | 字节跳动的面试官真的很nice,特别有耐心。 10 | 11 | #### 一面(6月24日 104min) 12 | 13 | * 自我介绍。 14 | * 线程和进程的区别。 15 | * 线程安全。我回答了sychronized关键字(关于锁,wait,notify参考我的一篇博客---Java 多线程)。面试官追问是否了解volite关键字,我忘了没回答出来。面试官追问是否了解自旋锁,乐观锁,悲观锁等,我回答了解但是没用过。 16 | * http是用什么实现的。 17 | * TCP和UDP的区别。 18 | * TCP为什么是可靠的。注意拥塞机制涉及的算法(慢开始,拥塞避难,快重传,快恢复)。 19 | * Get请求和Post请求的区别。注意Get请求比Post请求效率高,Post请求需要服务器返回100再发送数据处理,Get请求直接是通过URL。面试官追问是否知道其他请求方式,Put,Delete,Head。 20 | * 项目中询问一个 A Activity 跳到一个 B Activity中,生命周期的走动,点击Back返回呢。如果一个 A Activity是透明的呢?如果 B Activity是一个Dialog呢?面试官追问横竖屏切换生命周期走动,以及是否了解onConfigurationChanged。 21 | * HashMap的源码,扩容的条件。 22 | * 算法两道,一道是和并两个有序链表,我用的归并排序合并过程的思路写的(长时间用IDE,好多错误,但是面试官很有耐心帮我纠错)。一道是思路,将一段文本中的单词逆序输出,主要考察数据结构的知识,用到了栈和队列。 23 | * 询问我的基本情况,实习时间等。 24 | * 反问环节:其实没问,面试官建议我对常见的知识做深一步的理解,多看源码,多用记事本写代码,多看看基本的数据结构和算法。 25 | 26 | #### 二面(7月1日 57min) 27 | 28 | * 自我介绍。 29 | * 说说自己的亮点,我说了写博客。 30 | * Android静态库和动态库的区别。 31 | * Android中Binder机制。 32 | * Android进程间的通信。 33 | * 说说自旋锁,内部实现。 34 | * 问了线程同步,我又说了sychroized,还是参考那篇博客。 35 | * 是否了解Java的atomic,以及好多很底层的东西,记不清了,大部分都没有回答出来。 36 | * 算法题:求解矩形起点到终点的最短路径,只能向右或者向下走,这是一道简单的动态规划题。 37 | * 询问我的基本情况,实习时间等。 38 | * 反问环节:询问自己想要加入还需要提升那部分的知识,面试官建议多参加实际的项目。 39 | 40 | #### 三面(7月3日 40min) 41 | 42 | * 自我介绍。 43 | * 项目中出现的难处以及解决。我说的是我使用addView达到弹出框的效果,但是耗时长。后来了解Fragment,使用Fragment代替addView。面试官追问你能分析为什么这么慢吗,我就说了Android的Activity->PhoneWindow->DecorView->ContentView->WindowManager->RootViewImpl的绘制流程。面试官继续追问ANR出现的类型,原因以及排查的方式。面试官继续追问Fragment和Activity的区别以及Fragment的优点。 44 | * 说一下Android中多线程使用方式。面试官追问如何停止一个线程。 45 | * Handler的原理。Looper,MessageQueue,Message。面试官追问在一个Handler中给另一个Handler发送消息,我没太理解其实。 46 | * Java内存,回收的搜索算法:引用计数和根搜索算法。 47 | * 算法题:将一个32位的int型整数逆序,我用的取整加取余获取每一位保存在链表中,然后反转链表。 48 | * 询问我的基本情况,实习时间,职业规划等。 49 | 50 | #### Hr面(7月3日 20min) 51 | 52 | * 自我介绍。 53 | * 询问我的基本情况,实习时间,职业规划等。 54 | * 给了口头Offer。 55 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/intern/android/zi-jie-tiao-dong-xiao-lv-gong-cheng-ti-qian-pi-android-shi-xi-mian-jing.md: -------------------------------------------------------------------------------- 1 | # 字节跳动效率工程提前批Android实习面经 2 | 3 | 作者:红汤辣馄饨 4 | 5 | 链接:https://www.nowcoder.com/discuss/208452 6 | 7 | 来源:牛客网 8 | 9 | 10 | 11 | 上海Android实习 12 | 13 | 一面(30 min) 14 | 15 | 自我介绍 16 | 17 | 讲了一下简历上的安卓实习经历 18 | 19 | 然后开始问安卓有关的问题 讲一下Activity的生命周期 两个Activity A与B,A切到B,然后按返回键,B再切回A,请问两个Activity都经历了生命周期的哪几步 20 | 21 | 回答中提到了Activity的启动模式,接着问了Activity的启动模式是哪些? 22 | 23 | 线程有没有了解过?线程安全呢? Android里有接触过动画吗?怎么实现的? 算法题:二叉树的最大宽度 24 | 25 | 26 | 27 | 二面(1 hour) 28 | 29 | 自我介绍 30 | 31 | 学过哪些专业课? 32 | 33 | 提到学过计算机组成,于是问了一些有关\*\*\*的问题? 34 | 35 | 为什么需要\*\*\*? \*\*\*是介于哪两个硬件之间的? 简单介绍一下LRU。 然后让我大概写一下模拟LRU的数据结构。 36 | 37 | 接下来是Android方面的问题。 38 | 39 | 问了简历上的安卓实习经历,做了什么事? 40 | 41 | 然后问了几个和一面一样的问题,我说了一面已经问过这些面试官就直接跳过了。 42 | 43 | Android里布局用过哪些?怎么自定义View? View的绘制大概是个怎么样的流程? 44 | 45 | Java里的final有什么用法? Abstract class和interface有什么区别? 46 | 47 | 设计模式有了解吗? 提到了**工厂和单例**,就让我写了一个单例 48 | 49 | 计算机网络了解吗?TCP,HTTP了解吗? JVM了解吗? 50 | 51 | 之后开始问我什么时候可以实习? 来面的是提前批还是实习? 后来跟面试官交流发现自己把校招提前批和日常实习搞混了。 52 | 53 | 然后问了些其他问题。 54 | 55 | 在技术方面有哪一个领域是自己有研究过的? 56 | 57 | 在大学里有没有自己做过一些项目? 58 | 59 | 60 | 61 | 然后面试官联系了HR说让我等一会就走了,HR进来解释了一下提前批校招和日常实习的区别,聊天中得知她以为我是应届生但是我才刚读完大二,说如果我可以现在7月开始实习岗位是有空缺的,然后说这里的实习一般都是6个月,最少的也是4个月,问我有没有时间,然而我只有等到明年暑假才有空,而且暑假只放三个多月,于是就说了一下我的情况。然后HR就说如果是明年暑假的话,还需要和安卓团队沟通,因为现在太早还不清楚岗位需求,最后HR说明天会联系我给我答复,然后就把我送走了。 62 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/intern/ios/21-jie-da-san-dou-yin-ios-yi-mian-er-mian-san-mian-mian-jing-gua-hr.md: -------------------------------------------------------------------------------- 1 | # 21届大三抖音ios 一面 二面 三面 面经(挂hr……) 2 | 3 | 作者:牛客431069864号 4 | 5 | 链接:https://www.nowcoder.com/discuss/396844 6 | 7 | 来源:牛客网 8 | 9 | 10 | 11 | 一面:(1h) 12 | 13 | 1.自我介绍 14 | 15 | 2.简单介绍项目 16 | 17 | 3.tcp三次握手过程,为什么不能两次 18 | 19 | 4.线程池了解吗? 20 | 21 | 5.旋转数组的查找(剑指原题 22 | 23 | 24 | 25 | 二面:(50h) 26 | 27 | 1.输入网址后发生的事情 28 | 29 | 2.进程通信方式 30 | 31 | 3.信号量和锁的区别,特点 32 | 33 | 4.页面替换算法 34 | 35 | 5.上一个提到了LRU,所以问了LRU的实现方式,要求O(1)的复杂度 36 | 37 | 6.你认为tcp三次握手现在有什么不完善的地方 38 | 39 | 7.数据库中的索引,你知道的都说一下 40 | 41 | 8.由中序和先序还原二叉树 42 | 43 | 44 | 45 | 三面(1h) 46 | 47 | 1.自我介绍 48 | 49 | 2.围绕团队精神、项目经历在聊天 50 | 51 | 3.最后两个编程题(100个数,将其打乱,使得每个数在每个位置上的概率都相等;1,2,3……100这100个自然数是乱序的,恢复有序的状态,不能采用普通的排序方式) 52 | 53 | 54 | 55 | 当晚进行hr面试,然后转天通知挂了…… 56 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/intern/ios/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 目前共计 23 篇面经 3 | --- 4 | 5 | # iOS 6 | 7 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/intern/ios/ios-shi-xi-mian-jing-zi-jie-mei-tuaneli-mo-gu-jie.md: -------------------------------------------------------------------------------- 1 | # iOS实习面经(字节美团阿里蘑菇街) 2 | 3 | 作者:王铁柱啦啦啦\ 4 | 链接:[https://www.nowcoder.com/discuss/423500](https://www.nowcoder.com/discuss/423500)\ 5 | 来源:牛客网\ 6 | \ 7 | 字节\ 8 | 找了一个做iOS的学长内推,两点发过去简历,五点半就打电话约面试了,每次面试都是离面试结束应该也就三四个小时就打电话约下一面了 9 | 10 | \ 11 | 一面\ 12 | 1\. 自我介绍,block的实现、变量截获,有个forwarding指针是干什么的\ 13 | 2\. Category能添加什么,原理,为什么能添加property不能添加ivar\ 14 | 3\. 用gcd怎么实现线程安全(barrier)\ 15 | 4\. Oc中的方法调用\ 16 | 5\. 一些网络问题,很基础,tcpudp区别,https原理,http2.0\ 17 | 6\. 内存对齐的原因\ 18 | 7\. [算法题](https://app.gitbook.com/jump/super-jump/word?word=%E7%AE%97%E6%B3%95%E9%A2%98)O(1)的复杂度删除[链表](https://app.gitbook.com/jump/super-jump/word?word=%E9%93%BE%E8%A1%A8)节点,剑指上有,做过又忘了,以为要遍历,怎么想也做不到O(1),结果我理解错了,会给节点地址\ 19 | 最后问小哥我是不是凉了,他说我没凉,入职后还没跟小哥面基\ 20 | \ 21 | 二面\ 22 | 二面是一个非常严肃的老哥,面得我真的是心态爆炸,问啥啥不会,最后竟然还过了,记住的问题不多,可能是不想回忆痛苦\ 23 | 1\. 上来就问我啥语言比较擅长,我说java……老哥愣住了,问我c++呢,我说学过,忘的差不多了,他说,c呢,我说还凑合吧,然后就开始虐我\ 24 | 2\. strlen()和sizeof()作用于一个字符串时的区别\ 25 | 3\. 还有一些其他的c的问题,记不住了\ 26 | 4\. 进程线程区别\ 27 | …………记不住了\ 28 | 最后又问老哥,我是不是凉了,老哥终于笑了,说 你要对自己有信心。\ 29 | 面试完在家吃午饭,难受得我都没吃好,下午面[美团](https://app.gitbook.com/jump/super-jump/word?word=%E7%BE%8E%E5%9B%A2)的时候hr又打电话约三面\ 30 | \ 31 | 三面\ 32 | 三面就是我现在的leader,人很好,也很年轻,抓问题一针见血\ 33 | 问了不少问题,基本都忘了\ 34 | java的gc,cookie和session的区别等等\ 35 | 老哥看我看的透透的,不愧是leader,说我都是停留在用的层面上,没有去究其原理,动手能力应该还可以,但是理论需要加强(操作系统等等),跟我说看[面经](https://app.gitbook.com/jump/super-jump/word?word=%E9%9D%A2%E7%BB%8F)背答案啥的没用,还是得去系统的学,去动手\ 36 | \ 37 | 傍晚hr打来电话说三面过了,然后聊了几个常规问题,第二周周一发offer 38 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/intern/ios/zi-jie-dong-che-di-ios-shi-xi-yi-mian-mian-jing.md: -------------------------------------------------------------------------------- 1 | # 字节懂车帝IOS实习一面面经 2 | 3 | 作者:CodeBells\ 4 | 链接:[https://www.nowcoder.com/discuss/569499](https://www.nowcoder.com/discuss/569499)\ 5 | 来源:牛客网\ 6 | \ 7 | 8 | 9 | [字节跳动](https://app.gitbook.com/jump/super-jump/word?word=%E5%AD%97%E8%8A%82%E8%B7%B3%E5%8A%A8)懂车帝IOS一面 10 | 11 | 自我介绍 12 | 13 | 稍微问了下[项目](https://app.gitbook.com/jump/super-jump/word?word=%E9%A1%B9%E7%9B%AE) 14 | 15 | [算法](https://app.gitbook.com/jump/super-jump/word?word=%E7%AE%97%E6%B3%95) 16 | 17 | 1.股票,两次买进卖出,怎样收益率最大(答了Dp,口胡的不太好) 18 | 19 | 2.网络流模板(写完讲了一下代码) 20 | 21 | 基础 22 | 23 | 1.JVM的GC机制(讲了几个垃圾回收[算法](https://app.gitbook.com/jump/super-jump/word?word=%E7%AE%97%E6%B3%95),分别什么时候使用) 24 | 25 | 2.TCP三次握手,time-wait 26 | 27 | 3.http和https,对称性加密和非对称性加密分别什么时候使用(对称性在加密数据时使用,在传输密钥时使用非对称加密) 28 | 29 | 4.ssl的运行原理,如何确保安全传输(讲了数字证书的申请步骤) 30 | 31 | 5.抓包工具用过吗,为什么抓包可以抓取https的所有数据(不会,说抓包抓到的都是加密后的数据,数据可能是没用的,面试官说可以抓到正确数据,问我,我随便说了下可能是通过截取正确证书,然后发送假证书给[客户端](https://app.gitbook.com/jump/super-jump/word?word=%E5%AE%A2%E6%88%B7%E7%AB%AF),然后自己自己进行加密解密过程,最后得到明文) 32 | 33 | 进程和线程的区别 34 | 35 | 6.Mvc,mvp,mvvm的区别(不会,答了下mvc的modle,view,controller,说了下关系,其他不知道,追问modle和view交互过程中,controller起什么作用,我说起中间件的作用,防止两个直接交互) 36 | 37 | 结束没有反问阶段,说让hr联系我,估计无了 38 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/intern/ios/zi-jie-fei-shu-ios-ke-hu-duan-er-mian-mian-jing-yi-oc.md: -------------------------------------------------------------------------------- 1 | # 字节飞书iOS客户端二面面经\[已OC] 2 | 3 | 作者:Saafo\ 4 | 链接:[https://www.nowcoder.com/discuss/559423](https://www.nowcoder.com/discuss/559423)\ 5 | 来源:牛客网\ 6 | \ 7 | 8 | 9 | 算法:对字符串数组进行全排列。 10 | 11 | 例子: 12 | 13 | ``` 14 | input: ['1', '2', 'a'] 15 | output: ['12a', '1a2', '21a', '2a1', 'a12', 'a21'] 16 | ``` 17 | 18 | 算法:给定一个\[Int] Arr,给定数:N、Sum。要求在Arr中找出N个数和为Sum,如果找不到,则返回nil。只需找出一组解即可。 19 | 20 | ``` 21 | input: 22 | arr: [1, 2, 3, 4, 5] 23 | N: 3 24 | Sum: 9 25 | outp: [2, 3, 4] 26 | ``` 27 | 28 | 谈谈 JS 和 Swift 的区别? 29 | 30 | * 答:最大的区别我觉得一个 JS 是解释型语言,swift 是编译型语言,然后 JS 是弱类型语言, swift 是强类型语言,然后 JS 是单线程的,swift支持多线程。 31 | * 问:那你觉得,从使用体验上来说,如何分辨 JS 是解释性语言? 32 | * 答:(...) 33 | * 问:提示下,eval 34 | * 答:哦明白了,blabla 35 | * 问:(补充)eval 去解释字符串的话,需要动态生成语法树啊这些,这是编译型语言不能具备的。 36 | 37 | 有什么问题? 38 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/intern/ios/zi-jie-fei-shu-ios-ke-hu-duan-shi-xi-yi-mian-mian-jing.md: -------------------------------------------------------------------------------- 1 | # 字节飞书iOS客户端实习一面面经 2 | 3 | 作者:Saafo\ 4 | 链接:[https://www.nowcoder.com/discuss/557294](https://www.nowcoder.com/discuss/557294)\ 5 | 来源:牛客网\ 6 | \ 7 | 8 | 9 | 自我介绍 10 | 11 | 接触iOS多久了?做iOS的理由是什么? 12 | 13 | 面向对象的基本概念? 14 | 15 | * 答:封装、继承、多态(解释了一下) 16 | * 问:继承和多态的区别是什么? 17 | * 答:略 18 | 19 | 堆和栈的区别? 20 | 21 | * 答:高到低、低到高;存一般的数据结构、存对象和手动分配的内存;性能不同,栈销毁只需要移动指针,堆需要手动销毁 22 | * 问:为什么要这样做?(字符串等放在栈,对象和手动分配的放堆里) 23 | * 答:感觉和作用域有关吧,作用域是线性的,然后进出作用域的时候销毁起来方便,也更快 24 | * 问:还有其他原因吗 25 | * 勘误:栈拓展起来更方便 26 | 27 | 了解哪些锁,大概说一下? 28 | 29 | * 答:自旋锁和互斥锁,自旋锁就不断尝试,需要占用CPU时间,适合需要高频获取的资源,但其他进程很少用到的,线程不安全;互斥锁就是不断尝试,但每次尝试之后会休眠,等待操作系统唤醒。个人猜测这个是基于操作系统内核实现的,就是尝试之后就回到block状态,然后等待有资源了,内核会将其调度到ready\&running态,然后再去尝试获取资源。 30 | 31 | 解释一下中断? 32 | 33 | * 答:调试的breakpoint? 34 | * 问:操作系统里的 35 | * 答:大概解释了下一个程序正在运行的时候遇到中断,先检测有没有关中断,如果没有的话就把上下文保存起来,然后切换到中断服务程序,运行完之后再回到当前,把上下文复原,这样... 36 | * 勘误:关中断和开中断还可以再详细一点 37 | * 问:中断分为哪些? 38 | * 答:硬中断和软中断吧,硬中断主要是硬件产生的中断,比如按键盘啊之类的,软中断主要就是软件产生的中断吧。 39 | 40 | iOS知识知道多少,都说一下? 41 | 42 | * 大概从生命周期、runloop、runloop mode、observer、source0/1、timer讲到autoreleasepool开发中使用时机、autoreleasepool的释放时机,大概这样。 43 | 44 | [算法](https://app.gitbook.com/jump/super-jump/word?word=%E7%AE%97%E6%B3%95),[三数之和](https://app.gitbook.com/jump/super-jump/practice?questionId=731) 45 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/intern/ios/zi-jie-ios-dong-che-di-shi-xi-san-mian-yi-guo.md: -------------------------------------------------------------------------------- 1 | # 字节ios懂车帝实习 三面已过 2 | 3 | 作者:牛客313860688号 4 | 5 | 链接:https://www.nowcoder.com/discuss/570272 6 | 7 | 来源:牛客网 8 | 9 | 10 | 11 | 北京某学校硕士菜鸡一个 12 | 13 | 14 | 15 | 一面二面技术面同天完成 16 | 17 | 三面HR隔天下午完成 18 | 19 | 20 | 21 | 一面:35min 22 | 23 | 简单自我介绍 24 | 25 | 研究生项目介绍(硕士是做CV与ios不搭边,简单聊了一聊) 26 | 27 | 面试官:接触过ios客户端没 OC会不 我:没有 C++用的比较多 会一点python 28 | 29 | 算法题:二叉树层序遍历 30 | 31 | tcp三次握手四次挥手 32 | 33 | http https区别 34 | 35 | https加密算法 36 | 37 | 私钥的发送方式(不知道 随便编的) 38 | 39 | 设计模式 40 | 41 | 单例模式 42 | 43 | 设计原则 44 | 45 | 聊了聊职位的主要内容 46 | 47 | 反问 48 | 49 | 50 | 51 | 二面:60min leader大佬直接面 52 | 53 | 自我介绍 54 | 55 | 算法题:最长非重复字符串 三数之和 56 | 57 | 设计模式 58 | 59 | 设计原则 60 | 61 | 继承多态如何实现 62 | 63 | 函数调用流程 64 | 65 | IDE如何判断代码哪一行报错(瞎编,不会,就说了说函数栈之类的糊弄过去了) 66 | 67 | linux 崩溃中断 68 | 69 | 内存分布 70 | 71 | 问了一些linux的问题 基本不会 就没在问了 72 | 73 | 开始心理测试 74 | 75 | 自我评价 76 | 77 | 人生理想 78 | 79 | 职业规划 80 | 81 | 缺点优点 82 | 83 | 反问 84 | 85 | 说没啥想问的了 等通知 86 | 87 | 88 | 89 | 三面HR:20min 90 | 91 | 聊天 92 | 93 | 94 | 95 | 比较幸运问的比较基础,二面的leader技术大佬 问题回答的有破绽逐渐引导你 96 | 97 | 98 | 99 | 还不清楚ios开发相对于后端开发咋样,有没有大佬说一下 100 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/intern/ios/zi-jie-ios-ke-hu-duan-shi-xi-mian-jing.md: -------------------------------------------------------------------------------- 1 | # 字节IOS客户端实习面经 2 | 3 | 作者:兔十三 4 | 5 | 链接:https://www.nowcoder.com/discuss/426349 6 | 7 | 来源:牛客网 8 | 9 | 10 | 11 | 一面: 12 | 13 | 1、C++,Java,python这些语言有什么特点,区别是啥 14 | 15 | 2、面向对象语言的特点是啥 16 | 17 | 3、C++的继承多态了解多少 18 | 19 | 4、有没有写过多线程编程 20 | 21 | 5、TCP、UDP有啥区别 22 | 23 | 6、TCP三次握手,为什么不两次或四次 24 | 25 | 7、http协议,在浏览器中输入网址后,是如何工作的 26 | 27 | 8、进程和线程的区别是什么 28 | 29 | 9、有了进程为什么还要有线程?线程是否越多越好,线程太多有什么危害? 30 | 31 | 10、线程的同步或通信手段 32 | 33 | 11、项目中都遇到过哪些问题,如何解决? 34 | 35 | 12,用熟悉的语言写树的类(本人用的python) 36 | 37 | 13、算法:交换树的左右节点 38 | 39 | 14,对这个岗位有哪些了解 40 | 41 | 42 | 43 | 二面: 44 | 45 | 1、C++相关的书籍看过哪些 46 | 47 | 2、C++用过哪些库?map vector之类用过吗 48 | 49 | 3、vector如何实现,有何缺点?map ord map区别? 50 | 51 | 4、平时刷题吗?用的什么语言 52 | 53 | 3、python中都用到过哪些库 54 | 55 | 4、python中可变数据类型和不可变数据类型有哪些 56 | 57 | 5、算法:不含重复字符的最长连续子串的长度 58 | 59 | 6、单例模式 60 | 61 | 7、进程的通信方式 62 | 63 | 8、基于TCP的socket通信如何工作?能现场写下吗 64 | 65 | 9,、MVC是什么?MVMM是什么 66 | 67 | 10、你觉得自己有什么优势 68 | 69 | 70 | 71 | 二面可能凉了,因为对C++不熟 😭 72 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/intern/ios/zi-jie-ios-shen-zhen-shi-xi-yi-mian-mian-jing.md: -------------------------------------------------------------------------------- 1 | # 字节ios\[深圳]实习一面面经 2 | 3 | 作者:20152021 4 | 5 | 链接:https://www.nowcoder.com/discuss/419368 6 | 7 | 来源:牛客网 8 | 9 | 10 | 11 | 1\. 程序从代码到可执行文件过程\[预处理 编译 汇编 链接] 12 | 13 | 2\. 链接怎么个链接法\[不会] 14 | 15 | 3\. 数据库索引\[B+树结构介绍] 16 | 17 | 4\. 算法题: 二维数组查找 18 | 19 | 5\. 缺页机制 20 | 21 | 6\. 进程间通信 22 | 23 | 7\. https 24 | 25 | 8\. 检验ca证书合法性是干啥的 26 | 27 | 9\. new 和 malloc 28 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/intern/ios/zi-jie-ke-hu-duan-san-mian-wan-cheng-hou-liang-tian-jie-dao-hr-dian-hua-xu-yuan-offer.md: -------------------------------------------------------------------------------- 1 | # 字节客户端三面完成后两天接到hr电话 ,许愿offer 2 | 3 | 作者:法外狂徒张三丰 4 | 5 | 链接:https://www.nowcoder.com/discuss/408977 6 | 7 | 来源:牛客网 8 | 9 | 10 | 11 | 内推的客户端 ios开发 技术栈java/cpp 12 | 13 | 周一三面 周三hr打电话问了问实习时间 意向城市 14 | 15 | 介绍了一下薪资和作息还有房补啥的 16 | 17 | 之后说三个工作日给正式答复 希望能拿到offer结束0offer的悲惨境遇吧 18 | 19 | 1面就是一些cpp,java的基础知识还有计算机网络tcp/ip模型啥的。 20 | 21 | 算法是单链表插入排序,连写带修大概6,7min吧 22 | 23 | 2面时间很短大概25min,问了问一些我基本记不起来的问题(设计模式问很深 我没答好) 24 | 25 | 算法就是经典无重复字母最长 26 | 27 | 还问了问实习时间,我说6-9 面试官说太短了 本以为二面gg 但当天晚上约了3面 28 | 29 | 3面大概30min吧 30 | 31 | 面试官看起来有点大佬 开局问我怎么理解客户端 32 | 33 | 然后给一个场景客户端和服务器之间存在版本差异如何向下兼容 客户端和服务端如何通信啥的 34 | 35 | 然后问编译原理(学的贼差 胡说八道了一会儿说不下去了 然后就给他讲了讲唯一会的动态链接的过程plt got) 36 | 37 | 然后他就没咋问 之后手撕了一个算法 一个数组中最多存在3种元素,怎么排序要求时间on 空间o1 暴力判断条件进行比较 大概7min调出来了面试官问能不能拓展到有n个元素的情况 我也没写就给他讲了讲思路 然后就开始反问阶段了 然后面试官又问了问实习时间是否考研啥的就结束了 38 | 39 | 球球快给oc 让我好好睡一觉吧呜呜 40 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/intern/ios/zi-jie-tiao-dong-ios-ke-hu-duan-yi-er-san-si-+hr-mian-yi-shou-dao-offer.md: -------------------------------------------------------------------------------- 1 | # 字节跳动ios客户端一二三四+hr面(已收到offer) 2 | 3 | 作者:upcyh\ 4 | 链接:[https://www.nowcoder.com/discuss/434486](https://www.nowcoder.com/discuss/434486)\ 5 | 来源:牛客网\ 6 | \ 7 | 6月1日 已经收到offer了 ------------------------------------------------------------- 时间太久远,有的已经想不起来了... 8 | 9 | ## **一面 5月15号(70min)** 10 | 11 | 1. 求[二叉树](https://app.gitbook.com/jump/super-jump/word?word=%E4%BA%8C%E5%8F%89%E6%A0%91)的左视图 12 | 2. 一个[排序](https://app.gitbook.com/jump/super-jump/word?word=%E6%8E%92%E5%BA%8F)[链表](https://app.gitbook.com/jump/super-jump/word?word=%E9%93%BE%E8%A1%A8),奇数位置正向[排序](https://app.gitbook.com/jump/super-jump/word?word=%E6%8E%92%E5%BA%8F),偶数位置逆向[排序](https://app.gitbook.com/jump/super-jump/word?word=%E6%8E%92%E5%BA%8F) 13 | 3. static关键字的作用 14 | 4. C++内存结构 15 | 5. 堆和栈的区别 16 | 6. TCP与UDP的区别 17 | 7. TCP一系列保证可靠性的机制(超时重传,确认应答,滑动窗口,拥塞控制) 18 | 8. HTTPS的加密过程 19 | 9. 事务的四个特性 20 | 10. 隔离性的四个实现级别 21 | 11. 索引的底层结构 22 | 12. B+树与B树的对比 23 | 24 | https那个地方问的比较深入,估计是比较重要。 25 | 26 | ## **二面 5月21号(60min)** 27 | 28 | **面试官说是交叉面** 29 | 30 | 1. 求[二叉树](https://app.gitbook.com/jump/super-jump/word?word=%E4%BA%8C%E5%8F%89%E6%A0%91)的最近公共祖先 31 | 2. 编辑距离 32 | 3. HTTP与HTTP的区别 33 | 4. HTTPS的具体加密过程 34 | 5. DNS域名解析的过程 35 | 6. 负载均衡 36 | 7. b+树与b树和[哈希表](https://app.gitbook.com/jump/super-jump/word?word=%E5%93%88%E5%B8%8C%E8%A1%A8)的比较 37 | 8. 线程与进程的区别 38 | 39 | 面试官一开始问题java知识,我说我不会,最后提了一句我对安卓开发的看法,我说我面的不是ios吗,他就没再问。 40 | 41 | ## **三面 5月26号(13min)** 42 | 43 | **也是交叉面** 三面比较懵逼,只面了13min 44 | 45 | 1. DNS拦截和HTTP拦截 46 | 2. 对称加密秘钥和非对称加密秘钥有哪些 47 | 3. 加密[算法](https://app.gitbook.com/jump/super-jump/word?word=%E7%AE%97%E6%B3%95)具体的过程了解吗 48 | 4. HTTP的请求报文结构 49 | 5. 请求方法有哪些,什么含义 50 | 51 | ## **四面 5月27号(60min)** 52 | 53 | **leader面** 四面问题比较开放,就是大致上讨论一下,聊天居多 54 | 55 | 1. 线程和进程的区别 56 | 2. 虚拟内存管理 57 | 3. 线程如果中途截断,资源会释放吗,进程呢 58 | 4. 如何将UDP变得可靠 59 | 5. 访问一个网址请求的那八个步骤 60 | 6. http的请求方法 61 | 7. get和post的区别 62 | 8. C艹一个可执行文件生成的过程 63 | 64 | ## **hr面 5月28号** 65 | 66 | 聊了一些问题,问了问要不要考研,为什么之类的。\ 67 | 许愿offer~~~ 68 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/intern/ios/zi-jie-tiao-dong-ios-ri-chang-shi-xi-san-mian-+hr-mian-gua.md: -------------------------------------------------------------------------------- 1 | # 字节跳动 iOS日常实习三面+hr面挂 2 | 3 | 作者:sailingf 4 | 5 | 链接:https://www.nowcoder.com/discuss/438072 6 | 7 | 来源:牛客网 8 | 9 | 10 | 11 | 字节跳动 iOS客户端日常实习 12 | 13 | 经历了三轮技术面和一轮hr面 然后昨天邮件通知挂了...... 14 | 15 | 一面 16 | 17 | 整个就是做题 18 | 19 | 一句话进行单词位置反转 但单词顺序不变 20 | 21 | 超大数的加法 22 | 23 | 判断二叉树是否对称 24 | 25 | 青蛙跳台阶 及变形 若不能连续两次跳都跳两个台阶怎么办 26 | 27 | C++ vector 底层如何实现 28 | 29 | 二面 30 | 31 | 操作系统 32 | 33 | 进程和线程的存储空间 34 | 35 | 进程和线程共享的存储空间 36 | 37 | ...总之围绕着这个不断扩展 38 | 39 | 用户态和内核态 40 | 41 | 并行和并发 42 | 43 | 页面置换算法 44 | 45 | 线程安全相关问题 46 | 47 | 网络 48 | 49 | tcp udp 问的比较深入 50 | 51 | http新特性 返回值 52 | 53 | C++ 11的东西 54 | 55 | 代码: 56 | 57 | 链表合并 头插入形式的 58 | 59 | 栈模拟队列 60 | 61 | 三面 62 | 63 | 很深入的问项目,围绕其中的知识问一些原理性的问题,比如qt事件的响应机制,微信小程序为什么渲染加载速度较快,js框架 64 | 65 | 设计一个线程池 66 | 67 | socket通信服务器端多个线程怎么进行控制 68 | 69 | 什么情况下使用私有构造函数 70 | 71 | http1、2、3的区别具体说一下 72 | 73 | C++ 11 74 | 75 | auto底层是怎么实现的 76 | 77 | 还问了一些C++11的东西 没太听说过所以记不清了 78 | 79 | 代码题 80 | 81 | 做了一个多个链表合并的 82 | 83 | 用了三种方法 84 | 85 | 86 | 87 | 当晚接到电话约hr面 周一三面 约的周三中午11点 88 | 89 | 上线后说hr在开会,改到了下午4点半 ,然后说4点半看错了,还有别人面试,改到了晚上7点半,hr面了大概30分钟 90 | 91 | hr面完说看看有没有合适的岗位适合我,一周后给我答复,还有点纳闷,为什么看看有没有合适岗位 92 | 93 | 94 | 95 | 过了六天 邮件通知流程结束,问了一下说岗位匹配度不太高 96 | 97 | 有一说一 面字节真的很磨练人啊 也好也好 为秋招积累经验了 98 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/official/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 目前共计 16 篇面经 3 | --- 4 | 5 | # 秋招 6 | 7 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/official/shang-hai-dou-yin-ke-hu-duan-kai-fa-mian-jing.md: -------------------------------------------------------------------------------- 1 | # 上海抖音客户端开发面经 2 | 3 | {% embed url="https://www.nowcoder.com/discuss/478118" %} 4 | 5 | 6 | 7 | 8 | 9 | 一面: 10 | 11 | 12 | 13 | 基础知识 14 | 15 | 16 | 17 | 算法题:寻找k:在无序数组中,k的所有左值比它更小,所有右值比他更大。限定o(n)。 18 | 19 | 20 | 21 | 二面: 22 | 23 | 24 | 25 | 出了一堆客户端场景,没有客户端经验,直接跪掉。 26 | 27 | 28 | 29 | 算法题:将int转换成汉字表示,尽量考虑边界以及特殊情况。(0,1,-1,10,12,123,1000,1001) 30 | 31 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/official/zi-jie-ke-hu-duan-dou-yin-yi-er-san-mian-liang-jing.md: -------------------------------------------------------------------------------- 1 | # 字节客户端抖音一二三面凉经 2 | 3 | {% embed url="https://www.nowcoder.com/discuss/467948" %} 4 | 5 | ## 一二面: 6 | 7 | 死锁,死锁检测算法 8 | 9 | 王者荣耀保证用户实时性共享画面,互相明白对方做啥操作 10 | 11 | 航班起飞最大数目 12 | 13 | 旋转数组 14 | 15 | 问项目 遇到的最大问题 16 | 17 | 有做过客户端开发的工作吗,对这个岗位有什么了解 18 | 19 | 怎么判断是不是平衡二叉搜索树 20 | 21 | 22 | 23 | ## 三面: 24 | 25 | 对这个岗位有什么了解?核心要支持什么样的功能? 26 | 27 | 分享一个最值得分享的经历,觉得最有成就感的?过程中最有收获的点? 28 | 29 | 进程和线程有什么关系?( 30 | 31 | 多线程访问同一内存的资源有什么问题需要注意?(纯读是没有问题的吗)怎么解决呢? 32 | 33 | 怎么做的一个线程访问,组织另一个线程访问呢?(回答了信号量,p,v操作) 34 | 35 | 什么是信号量? 36 | 37 | 平时项目用什么代码管理工具?(说了github),问了git一般怎么做(pull fetch),还有什么命令? 38 | 39 | (说了clone、commit) 40 | 41 | 问clone和直接下载zip压缩包的区别是什么? 42 | 43 | http协议有理解吗?header里一般存什么(回答分请求还是响应,url, 端口号,http版本信息) 44 | 45 | http版本信息是什么(回答了http1.0, 1.1, 2.0) 46 | 47 | 问这三个http版本有啥区别的区别 48 | 49 | 手撕代码:求所有在数组中的A,A满足前面的数都小于该数,后面的数都大于该数 50 | 51 | 谈一下做这个方向的最大优势? 52 | 53 | 这次面试过程你有什么感受,对自己的表现? 54 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/official/zi-jie-ke-hu-duan-san-si-mian-mian-jing-yi-oc-geng-xin-yi-you-jian.md: -------------------------------------------------------------------------------- 1 | # 字节客户端三\~四面面经,已oc(更新:已邮件) 2 | 3 | {% embed url="https://www.nowcoder.com/discuss/432053" %} 4 | 5 | ## 5.12(三面)1h左右 6 | 7 | 三面的面试官是广州部门的leader,凶凶的。也没问我自我介绍,上来直接杠基础。(估计我的项目不是很出彩,没什么好问的,前面两个面试官都问过了) 8 | 9 | 1\. java的基础知识,Object的方法,equals和hashcode重写,hashmap原理,**finalize**的作用以及使用场景(gg,没记使用场景),**gc回收**,**深拷贝和浅拷贝**,基本都是从Object方法中引申出来的问题。 10 | 11 | 2\. **泛型**,extends和super的使用场景等 12 | 13 | 3\. 事件分发,问到源码,cancel的作用等等。(cancel忘了什么用途哈哈) 14 | 15 | 4\. 各种排序讲一遍,复杂度,什么适用单向链表。 16 | 17 | 5\. 接着4的问题,快排为什么不适用单向链表(我回答了不适用),反复确认我的答案,然后我就讲了可以使用但是复杂,然后后面就和面试官展开了激烈的讨论(为什么不适用但是可以用),然后面试官心情就不好了 😖(我回答了不适用的原因是单向链表不能前后遍历) 18 | 19 | 6\. 接着5的问题,实现单向链表的快排(自己给自己发的坑,自己始终要填) 20 | 21 | 7\. 反问,又被怼了。感觉背后凉凉了。 22 | 23 | ## 5.14(四面通知) 24 | 25 | 突然很神奇,被加面了,根据我一个同学的说法,估计就是前面面试官有不同意见,大概率三面没过,重新换部门三面。然后接到考研复试的通知,没去(分数刚刚过复试线那种,加上没复习就拒了复试,还被辅导员“抱怨”了一顿) 26 | 27 | 28 | 29 | 5.18(四面)40mins 30 | 31 | 1\. 自我介绍,项目还是没有问(估计一二面问完了,没什么好问的) 32 | 33 | 2\. String类的存储,扯了很多,最后问什么编码格式。 34 | 35 | 3\. java进程的创建,我扯到了线程。 36 | 37 | 4\. 接着3,扯到了**handler原理** 38 | 39 | 5\. 接着4,给了一个开放题,在接收到广播的intent之后创子线程下载内容是否合适,我举了service的intentservice的例子(因为不是很了解在什么情况什么条件下,不敢贸然说合不合适) 40 | 41 | 5\. recyclerview怎么实现滑动功能(很意想不到的题目),开始扯事件分发的move还有item的渲染扯到viewholder那些。想了想,还想扯view的绘制流程了哈哈 42 | 43 | 6\. 被打停了(不听我扯了),问我对于上次面试的对比,我讲了我的不足以及我后面回去查了很多资料。 44 | 45 | 7\. 反问,什么部门,深圳的部门,感觉好专业(✪▽✪) 46 | 47 | (基本都是问一些意想不到的题目,考察我的应变以及对于知识的理解和应用吧,问的也不多,感觉没戏) 48 | 49 | 50 | 51 | 5.20(官网状态变成面试已完成) 52 | 53 | 我本来没抱着什么希望了,根据我上一个同学的面经,一般3面不好被加面,都是挺危险的,突然我的内推小伙伴跟我说我通过了,非常开心,哈哈。过两天问了hr小姐姐,在审核。 54 | 55 | 56 | 57 | 5.25(oc) 58 | 59 | 终于等到了字节的oc,base深圳的,很开心\~ 60 | 61 | 62 | 63 | 5.27(om) 64 | 65 | 今日等到了字节的offer mail,开心,正式成为字节的一员~ 66 | 67 | 68 | 69 | flag:好好学习,好好工作~ 70 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/official/zi-jie-ke-hu-duan-yi-er-mian-mian-jing-xu-yuan-san-mian.md: -------------------------------------------------------------------------------- 1 | # 字节客户端 一、二面面经,许愿三面\~ 2 | 3 | {% embed url="https://www.nowcoder.com/discuss/424853" %} 4 | 5 | 字节是我面试持续时间最久的了 😂从3月17内推,到4月12笔试,到5月6号一面(简历,笔试都太菜了😂估计是最后面的那一批)。 6 | 7 | ## 5.6(一面)1h左右 8 | 9 | 1.项目详情,后面基本都是从项目中提问的 10 | 11 | 2.**glide**原理 12 | 13 | 3.图片压缩,图片大小 14 | 15 | 4.三级缓存,**LruCache**和LruDiskCache的底层实现(被面试官一步步引导才说出来的) 16 | 17 | 5.http与https的区别,对称加密与非对称加密,https加密过程 18 | 19 | 6.http请求**头部**,**断点重传**,cache 20 | 21 | 7.get/post 22 | 23 | 8.tcp与udp的区别 24 | 25 | 9.tcp可靠性(确认重传、滑动窗口)、tcp三次握手 26 | 27 | 10.算法题---topK 28 | 29 | 11.反问----面试官让我多去面试一些其他公司 😂然后开始聊起为什么我不去投tx(我太菜了,tx投了之后就毫无消息了) 30 | 31 | 总而言之,一面面试官问的问题都是从项目中细问,知识点都是从浅到深,源码也必须多读读,多了解,不能只了解表面。面试体验挺好的,当晚也收到了二面的通知。 32 | 33 | ## 5.9(二面)45m左右 34 | 35 | 1.项目详情 36 | 37 | 2.**listview**和**recyclerview**的区别 38 | 39 | 3.**java泛型**(我当时有点忘记了,靠自己理解说了一下,太表明了,面试官有点皱眉😂很凉) 40 | 41 | 4.**计网五大层**(每个层的功能我说的好表层😂以后要看多一点总结),然后被问到网络层的ip,讲了ARP,讲了路由,讲了NAT,但是面试管好像不是想问这个,后面面试官跳过了。 42 | 43 | 5.**handler**机制,也问了很多**场景** 44 | 45 | 6.数据库 **左连接右连接**(我答错了😥) 46 | 47 | 7.算法题---n阶,每次只能走1,2,5个阶梯,到达n阶有几种方法。我首先用了递归,面试官不满意,然后用db,面试官还要空间为常数,然后我想用数学归纳,2分钟思考,讲给面试官,面试官没时间写了,说不用我再写了😪很凉。 48 | 49 | 8.反问---面试官是深圳部门的(我投的是广州的),还有一些学习问题。 50 | 51 | 二面面试官感觉会比一面严格一点😂感觉我表达的不是很合他胃口,多次跳过题目,算法也没最优,悬😂 52 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/official/zi-jie-ke-hu-duan-yi-er-san-mian-mian-jing-yi-shou-dao-yi-xiang-shu.md: -------------------------------------------------------------------------------- 1 | # 字节客户端一二三面面经,已收到意向书 2 | 3 | {% embed url="https://www.nowcoder.com/discuss/522796" %} 4 | 5 | ## 一面: 时间:2020年8月23日 时长:1小时 6 | 7 | 1、 c++从cpp文件到exe可执行文件经历的流程 8 | 9 | 2、 c++动态链接和静态链接的比较 10 | 11 | 3、 **了解Android的Linux层吗**(我答不了解,然后没有然后了) 12 | 13 | 4、 JVM内存管理 14 | 15 | 5、 操作系统中虚拟内存的作用 16 | 17 | 6、 操作系统中的分页机制 18 | 19 | 7、 路由器和交换机的区别 20 | 21 | 8、 **View的渲染流程** 22 | 23 | 9、 **内部类**分两种,static和非static,有什么区别。 24 | 25 | [算法题](https://app.gitbook.com/jump/super-jump/word?word=%E7%AE%97%E6%B3%95%E9%A2%98):1、层次遍历,自定义树的结构,不一定是[二叉树](https://app.gitbook.com/jump/super-jump/word?word=%E4%BA%8C%E5%8F%89%E6%A0%91),按顺序输出节点的值 26 | 27 | 2、只输出一层的首尾节点的值。 28 | 29 | ## 二面: 时间:2020年8月27日 时长:45分钟 30 | 31 | 1、 自我介绍 32 | 33 | 2、 TCP和UDP区别 34 | 35 | 3、 Java接口和abstract类的区别 36 | 37 | 4、 怎么才算abstract类,可以实现实方法吗,接口可以实现实方法吗 38 | 39 | 5、 Java泛型 40 | 41 | 6、 Java多态是什么,重载和重写的区别 42 | 43 | 7、 HashMap的put和get是怎么实现的 44 | 45 | [算法题](https://app.gitbook.com/jump/super-jump/word?word=%E7%AE%97%E6%B3%95%E9%A2%98):输入一个由(、)、\[、]、{、},组成的字符串,若其符合规则,输出true,否则输出false。比如)(、({)}、\[、())等就不符合规则了,但是({})这种也符合规则。 46 | 47 | 三面: 时间:2020年9月8日 时长:65分钟 48 | 49 | 1、 自我介绍 50 | 51 | 2、 TCP三次握手和四次分手,**为什么分手要四次** 52 | 53 | 3、 Inner join、left join、right join的区别 54 | 55 | 4、 你了解范式吗 56 | 57 | 5、 java内部类有几种,他们的区别,匿名内部类有什么特点。 58 | 59 | 6、 sleep()和wait()的区别。 60 | 61 | 7、 service的启动方式 62 | 63 | 8、 service的生命周期 64 | 65 | 9、 讲讲你对广播的理解。 66 | 67 | 10、给你一个[项目](https://app.gitbook.com/jump/super-jump/word?word=%E9%A1%B9%E7%9B%AE),你会怎么做它的架构(我不会,扯到了设计模式) 68 | 69 | [算法](https://app.gitbook.com/jump/super-jump/word?word=%E7%AE%97%E6%B3%95): 70 | 71 | 1、 实现一下单例模式(因为之前扯到了设计模式) 2、 给一个数组和一个目标数,找出所有的相加之和等于这个目标数的数字组合。\ 72 | 时间拖得比较长,特别是三面,可能是面试官太忙了,和二面隔了半个月,三面后一周问hr结果,hr说面试过了,等offer审批,又过了一周,终于在昨天收到意向书,特来还愿。感谢牛客,学到了不少东西。 73 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/official/zi-jie-shang-hai-dou-yin-ke-hu-duan.md: -------------------------------------------------------------------------------- 1 | # 字节上海抖音客户端 2 | 3 | 作者:酷狗音乐 4 | 5 | 链接:https://www.nowcoder.com/discuss/492680 6 | 7 | 来源:牛客网 8 | 9 | 10 | 11 | 客户端-上海抖音 12 | 13 | 1\. thread-join、deatch 14 | 15 | 2\. DNS解析原理 16 | 17 | 3\. 拥塞控制 18 | 19 | 4\. get post 20 | 21 | 5\. 多态 22 | 23 | 6\. http 状态码 24 | 25 | 7\. http响应头 和发送给的响应、回答信息 26 | 27 | 8\. TCP 、UDP 的具体字段信息 28 | 29 | 9\. 进程、线程通信 30 | 31 | 10\. 算法:一组数组中,先两个索引位置,值代表树棍的高度,求最大能够装雨水的面积 32 | 33 | 11\. 算法:九宫格键盘,一个数字按键代表几个字母, 输出 数字字符串,所有的字母组合。比如“23”:【ad,ar,af,bd,be,bf, cd,ce,cf】 34 | 35 | 12\. 算法:两个线程交替打印 数字, a,b线程交替打印 1,2,3,4,5 36 | 37 | 13\. 算法:数字反转,正负号要带着,比如 -942-》-249 ; -940-》-49. 需要写一个算法,不能用库 38 | 39 | 14\. 算法:两个链表求共同节点 40 | 41 | 15\. 项目 42 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/official/zi-jie-shi-pin-jia-gou-yi-mian-liang-jing-an-zhuo.md: -------------------------------------------------------------------------------- 1 | # 字节视频架构一面凉经(安卓) 2 | 3 | {% embed url="https://www.nowcoder.com/discuss/529325" %} 4 | 5 | 6 | 7 | 问题都很简单,感觉自己答的也不错,[算法题](https://www.nowcoder.com/jump/super-jump/word?word=%E7%AE%97%E6%B3%95%E9%A2%98)不会,很难受\ 8 | \ 9 | 10 | 11 | ![](https://uploadfiles.nowcoder.com/images/20200928/401367812\_1601299188023\_470916B7E9CA6536543ED7B8B13271A8) 12 | 13 | ![](https://uploadfiles.nowcoder.com/images/20200928/401367812\_1601299164627\_D16FA2BB99B6535A4CFE524EA277346D) 14 | 15 | ![](https://uploadfiles.nowcoder.com/images/20200928/401367812\_1601299138048\_A8113BFFC30C3CC3A70116DFDE19A1E9) 16 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/official/zi-jie-tiao-dong-an-zhuo-gong-cheng-shi-yi-mian-liang.md: -------------------------------------------------------------------------------- 1 | # 字节跳动安卓工程师一面凉 2 | 3 | {% embed url="https://www.nowcoder.com/discuss/490533" %} 4 | 5 | 6 | 7 | 自我介绍 8 | 9 | 对安卓是否了解 是否有安卓编程经验 10 | 11 | HTTP是什么: hypertext transfer protocol超文本传送协议, 处于应用层,是互联网上应用最多的网络协议。所有的WWW文件都必须遵从的一种协议,将超文本从服务器端传送到本地浏览器。HTTP可以使网络传输减少,使浏览器更高效。 12 | 13 | HTTP返还值:返还一个该类型的状态码表示接收到请求并继续处理。 14 | 15 | 哈希map了解吗,它的结构是什么:哈希表是一种根据关键码去寻找值的数据映射结构,每组数据有对应的key和value,是一种数组+链表的结构。存数据的时间负责度是O(1),取数据最好是O(1),最差是O(n)。 16 | 17 | JAVA和C++的区别,JAVA面向的对象有什么:他们都可以面向对象,JAVA是完全面向对象的语言,所有的函数和变量必须是类的一部分,在JAVA当中,一切被视为对象。 18 | 19 | 代码题:一百个台阶,分一步,两步,三步,三种上法,一共有多少种可能性。 f(n) = f(n-1) + f(n-2) + f(n-3) 20 | -------------------------------------------------------------------------------- /interview/bytedance-interview-collect/official/zi-jie-tiao-dong-ke-hu-duan-yi-mian-er-mian-liang-jing.md: -------------------------------------------------------------------------------- 1 | # 字节跳动客户端一面二面凉经 2 | 3 | {% embed url="https://www.nowcoder.com/discuss/530752" %} 4 | 5 | #### 一面 9.27 11:00 70min 6 | 7 | 1. 自我介绍 8 | 2. 学过哪些课程?操作系统了解吗? 9 | 3. CPU内部结构 10 | 4. 说一下操作系统里的缓存 11 | 5. HTTP里面有哪些**方法** 12 | 6. GET和POST区别说一下 13 | 7. HTTP中POST的方式有哪些? 14 | 8. 字节流和字符流说一下 15 | 9. TCP和UDP什么区别 16 | 10. TCP的字节流是什么机制 17 | 11. coding:手写一个循环队列数据结构(思路对了,但检验队列满时写错了,面试官指了出来,说了一下改正思路) 18 | 12. 线程里面sleep和wait什么区别(从方法所属类,调用的效果,是否释放锁答的) 19 | 13. sleep不释放锁和wait释放锁,底层怎么做的(没答出来...) 20 | 14. java引用类型(强 软 弱 虚) 21 | 15. JVM的gc什么机制(GC roots可达性) 22 | 16. 你怎么判断对象是gc roots对象(又懵了) 23 | 17. \==和equals区别 24 | 18. 重写equals怎么写 25 | 19. TCP握手连接确认号为什么要+1,不变不行吗?为什么?(又乱说的) 26 | 20. 反问 27 | 28 | 一面感觉一般,一小时后收到二面通知\ 29 | 30 | 31 | #### 二面 9.28 15:00 60min 32 | 33 | 1. 自我介绍 34 | 2. [项目](https://app.gitbook.com/jump/super-jump/word?word=%E9%A1%B9%E7%9B%AE)介绍 35 | 3. [项目](https://app.gitbook.com/jump/super-jump/word?word=%E9%A1%B9%E7%9B%AE)技术难点 36 | 4. coding:[二叉树](https://app.gitbook.com/jump/super-jump/word?word=%E4%BA%8C%E5%8F%89%E6%A0%91)根节点寻找target节点,返回所有路径(回溯,但出了bug,面试官说没时间了先问问题吧) 37 | 5. topK问题,[海量数据](https://app.gitbook.com/jump/super-jump/word?word=%E6%B5%B7%E9%87%8F%E6%95%B0%E6%8D%AE)找最大的100个(基于快排思路的partition、堆[排序](https://app.gitbook.com/jump/super-jump/word?word=%E6%8E%92%E5%BA%8F),结果一紧张,小顶堆说成了大顶堆...) 38 | 6. 堆的构建过程 39 | 7. java内部类有哪些 40 | 8. 内部类能访问外部的变量和方法吗 41 | 9. 双亲委派机制请说一下 42 | 10. HashMap了解吗,数据结构是什么? 43 | 11. HashMap的hash值和Object的hashcode()什么关系 44 | 12. 你说了[红黑树](https://app.gitbook.com/jump/super-jump/word?word=%E7%BA%A2%E9%BB%91%E6%A0%91),[红黑树](https://app.gitbook.com/jump/super-jump/word?word=%E7%BA%A2%E9%BB%91%E6%A0%91)如何保持自平衡? 45 | 13. [红黑树](https://app.gitbook.com/jump/super-jump/word?word=%E7%BA%A2%E9%BB%91%E6%A0%91)的着色过程是什么呢?(忘干净了...) 46 | 14. fail-fast机制说一下 47 | 15. ipv4地址分类(ABCDE,说了每一类IP的分段) 48 | 16. HTTPS的连接过程说一下吧(说了SSL的加密过程,包括证书CA、非对称和对称加密等) 49 | 17. 反问 50 | -------------------------------------------------------------------------------- /interview/readme.md: -------------------------------------------------------------------------------- 1 | # 简介 2 | 3 | 知己知彼,百战不殆。以目标公司的面经为纲,来完善所有知识点。 4 | 5 | 由于我的目标岗位是客户端研发,精力有限所以面经就只有客户端岗位的啦~🎯 6 | 7 | {% embed url="https://www.nowcoder.com/discuss/experience?tagId=642&order=3&companyId=665&phaseId=2" %} 8 | 9 | {% page-ref page="tencent/" %} 10 | 11 | {% page-ref page="bytedance-interview-collect/" %} 12 | 13 | ## 复习方法 14 | 15 | 如果之前没有学过计算机基础过程,建议还是自己过一遍教材基础知识点。如果已经学过了,那么可以参照一些开源笔记库,比如 [Cyc-Notes](http://www.cyc2018.xyz/),在别人的笔记上查漏补缺整理自己不太清楚的知识点。 16 | 17 | 面试的话必须要多去[牛客网](https://www.nowcoder.com/)刷面经,看看目标公司的面经中常问的问题是什么,在查找问题答案的过程中,不能完全依赖于网络上各种博客上总结的答案,查到你认为没什么问题的解答后,最好是再比对着教材来看看是否存在什么问题,毕竟网络博客中你复制我我复制你的,可能会存在一些错误,这个时候教材还是最靠谱的啦。 18 | 19 | 这里必须强烈安利一下[微信读书](https://weread.qq.com/),比如计算机网络和操作系统这两门课,微信读书都收录了教材,并且网页端阅读体验也非常好,最重要的是可以**搜索**🔍!比看纸质书和网络上的各种PDF都要舒服许多~ 20 | 21 | ## 特别鸣谢 22 | 23 | * [牛客网](https://www.nowcoder.com/) 24 | * [微信读书](https://weread.qq.com/) 25 | 26 | -------------------------------------------------------------------------------- /interview/readme/777-interview/alibaba.md: -------------------------------------------------------------------------------- 1 | # 阿里面试问题 2 | 3 | -------------------------------------------------------------------------------- /interview/readme/777-interview/bytedance.md: -------------------------------------------------------------------------------- 1 | # 字节面试问题 2 | 3 | -------------------------------------------------------------------------------- /interview/readme/777-interview/meituan.md: -------------------------------------------------------------------------------- 1 | # 美团面试问题 2 | 3 | -------------------------------------------------------------------------------- /interview/readme/777-interview/tencent.md: -------------------------------------------------------------------------------- 1 | # 腾讯面试问题 2 | 3 | -------------------------------------------------------------------------------- /interview/readme/README.md: -------------------------------------------------------------------------------- 1 | # 简介 2 | 3 | 知己知彼,百战不殆。以目标公司的面经为纲,来完善所有知识点。 4 | 5 | 由于我的目标岗位是客户端研发,精力有限所以面经就只有客户端岗位的啦~🎯 6 | 7 | {% embed url="https://www.nowcoder.com/discuss/experience?tagId=642&order=3&companyId=665&phaseId=2" %} 8 | 9 | {% content-ref url="../tencent/" %} 10 | [tencent](../tencent/) 11 | {% endcontent-ref %} 12 | 13 | {% content-ref url="../alibaba/" %} 14 | [alibaba](../alibaba/) 15 | {% endcontent-ref %} 16 | 17 | {% content-ref url="../bytedance-interview-collect/" %} 18 | [bytedance-interview-collect](../bytedance-interview-collect/) 19 | {% endcontent-ref %} 20 | 21 | ## 我的2021年春招面经 22 | 23 | {% content-ref url="777-interview.md" %} 24 | [777-interview.md](777-interview.md) 25 | {% endcontent-ref %} 26 | 27 | ## 复习方法 28 | 29 | 如果之前没有学过计算机基础过程,建议还是自己过一遍教材基础知识点。如果已经学过了,那么可以参照一些开源笔记库,比如 [Cyc-Notes](http://www.cyc2018.xyz),在别人的笔记上查漏补缺整理自己不太清楚的知识点。 30 | 31 | 面试的话必须要多去[牛客网](https://www.nowcoder.com)刷面经,看看目标公司的面经中常问的问题是什么,在查找问题答案的过程中,不能完全依赖于网络上各种博客上总结的答案,查到你认为没什么问题的解答后,最好是再比对着教材来看看是否存在什么问题,毕竟网络博客中你复制我我复制你的,可能会存在一些错误,这个时候教材还是最靠谱的啦。 32 | 33 | 这里必须强烈安利一下[微信读书](https://weread.qq.com),比如计算机网络和操作系统这两门课,微信读书都收录了教材,并且网页端阅读体验也非常好,最重要的是可以**搜索**🔍!比看纸质书和网络上的各种PDF都要舒服许多~ 34 | 35 | ## 特别鸣谢 36 | 37 | * [牛客网](https://www.nowcoder.com) 38 | * [微信读书](https://weread.qq.com) 39 | -------------------------------------------------------------------------------- /interview/tencent/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | description: 目前共计 40 篇面经 3 | --- 4 | 5 | # 腾讯面经汇总 6 | 7 | 实习、提前批、秋招面试的问题可能会存在一定的差异,所以我把牛客网收集到的面经按照这三个阶段分成了三个部分。 8 | 9 | {% content-ref url="intern.md" %} 10 | [intern.md](intern.md) 11 | {% endcontent-ref %} 12 | 13 | {% content-ref url="before.md" %} 14 | [before.md](before.md) 15 | {% endcontent-ref %} 16 | 17 | {% content-ref url="official.md" %} 18 | [official.md](official.md) 19 | {% endcontent-ref %} 20 | 21 | -------------------------------------------------------------------------------- /interview/tencent/before.md: -------------------------------------------------------------------------------- 1 | # 提前批 2 | 3 | -------------------------------------------------------------------------------- /interview/tencent/official.md: -------------------------------------------------------------------------------- 1 | # 秋招 2 | 3 | -------------------------------------------------------------------------------- /java/basics/README.md: -------------------------------------------------------------------------------- 1 | # 基础知识 2 | 3 | -------------------------------------------------------------------------------- /java/ji-chu-zhi-shi.md: -------------------------------------------------------------------------------- 1 | # 基础知识 2 | 3 | -------------------------------------------------------------------------------- /java/readme.md: -------------------------------------------------------------------------------- 1 | # 简介 2 | 3 | ## 笔记内容 4 | 5 | 本部分包含对基础知识的梳理以及面经问题的整理。 6 | 7 | * 基础知识基于 [CS-Notes](https://cyc2018.github.io/CS-Notes/#/) 进行增补,结合教材内容、查找的资料进行完善整合,每篇笔记会将引用到的文章/专栏/博客/教材链接放出。 8 | * 常见问题均来自于牛客网的面经,答案缓慢更新中。 9 | 10 | ## 参考 11 | 12 | [CS-Notes Java](http://www.cyc2018.xyz/#java) 13 | 14 | [JavaGuide](https://github.com/Snailclimb/JavaGuide) 15 | 16 | -------------------------------------------------------------------------------- /javascript/chang-jian-wen-ti.md: -------------------------------------------------------------------------------- 1 | # 常见问题 2 | 3 | -------------------------------------------------------------------------------- /javascript/ji-chu-zhi-shi.md: -------------------------------------------------------------------------------- 1 | # 基础知识 2 | 3 | -------------------------------------------------------------------------------- /javascript/jian-jie.md: -------------------------------------------------------------------------------- 1 | # 简介 2 | 3 | -------------------------------------------------------------------------------- /moon/shang-hai-wai-qi-hui-zong.md: -------------------------------------------------------------------------------- 1 | # 上海外企汇总 2 | 3 | Google 4 | 5 | Paypal 6 | 7 | Coupang 8 | 9 | Ebay 10 | 11 | CSTC 12 | 13 | SAP 14 | -------------------------------------------------------------------------------- /os/basic/README.md: -------------------------------------------------------------------------------- 1 | # 基础知识 2 | 3 | -------------------------------------------------------------------------------- /os/basic/device.md: -------------------------------------------------------------------------------- 1 | # 设备管理 2 | 3 | ## 参考 4 | 5 | [CYC CS-Notes 计算机操作系统 - 设备管理](http://www.cyc2018.xyz/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%9F%BA%E7%A1%80/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E5%9F%BA%E7%A1%80/%E8%AE%A1%E7%AE%97%E6%9C%BA%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%20-%20%E8%AE%BE%E5%A4%87%E7%AE%A1%E7%90%86.html) 6 | 7 | ## 磁盘结构 8 | 9 | * 盘面(Platter):一个磁盘有多个盘面; 10 | * 磁道(Track):盘面上的圆形带状区域,一个盘面可以有多个磁道; 11 | * 扇区(Track Sector):磁道上的一个弧段,一个磁道可以有多个扇区,它是最小的物理储存单位,目前主要有 512 bytes 与 4 K 两种大小; 12 | * 磁头(Head):与盘面非常接近,能够将盘面上的磁场转换为电信号(读),或者将电信号转换为盘面的磁场(写); 13 | * 制动手臂(Actuator arm):用于在磁道之间移动磁头; 14 | * 主轴(Spindle):使整个盘面转动。 15 | 16 | ![](https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/014fbc4d-d873-4a12-b160-867ddaed9807.jpg) 17 | 18 | ## 磁盘调度算法 19 | 20 | 主要有三种调度算法:先来先服务、最短寻道时间优先、电梯算法。 21 | 22 | 读写一个磁盘块的时间的影响因素有: 23 | 24 | * 旋转时间(主轴转动盘面,使得磁头移动到适当的扇区上) 25 | * 寻道时间(制动手臂移动,使得磁头移动到适当的磁道上) 26 | * 实际的数据传输时间 27 | 28 | 其中,寻道时间最长,因此磁盘调度的主要目标是使磁盘的平均寻道时间最短。 29 | 30 | ### 1. 先来先服务 31 | 32 | > FCFS, First Come First Served 33 | 34 | 按照磁道请求的顺序进行调度。 35 | 36 | 优点是公平和简单。 37 | 38 | 缺点也很明显,因为未对寻道做任何优化,使平均寻道时间可能较长。 39 | 40 | ### 2. 最短寻道时间优先 41 | 42 | > SSTF, Shortest Seek Time First 43 | 44 | 优先调度与当前磁头所在磁道距离最近的磁道。 45 | 46 | 虽然平均寻道时间比较低,但是不够公平。如果新到达的磁道请求总是比一个在等待的磁道请求近,那么在等待的磁道请求会一直等待下去,也就是出现饥饿现象。具体来说,两端的磁道请求更容易出现饥饿现象。 47 | 48 | ![](https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/4e2485e4-34bd-4967-9f02-0c093b797aaa.png) 49 | 50 | ### 3. 电梯算法 51 | 52 | > SCAN 53 | 54 | 电梯总是保持一个方向运行,直到该方向没有请求为止,然后改变运行方向。 55 | 56 | 电梯算法(扫描算法)和电梯的运行过程类似,总是按一个方向来进行磁盘调度,直到该方向上没有未完成的磁盘请求,然后改变方向。 57 | 58 | 因为考虑了移动方向,因此所有的磁盘请求都会被满足,解决了 SSTF 的饥饿问题。 59 | 60 | ![](https://cs-notes-1256109796.cos.ap-guangzhou.myqcloud.com/271ce08f-c124-475f-b490-be44fedc6d2e.png) 61 | -------------------------------------------------------------------------------- /os/readme.md: -------------------------------------------------------------------------------- 1 | # 简介 2 | 3 | ## 笔记内容 4 | 5 | 本部分包含对基础知识的梳理以及面经问题的整理。 6 | 7 | * 基础知识基于 [CS-Notes](http://www.cyc2018.xyz) 进行增补,结合教材内容、查找的资料进行完善整合,每篇笔记会将引用到的文章/专栏/博客/教材链接放出。 8 | * 常见问题均来自于牛客网的面经,答案缓慢更新中。 9 | 10 | ## 参考 11 | 12 | [现代操作系统(原书第4版)](https://book.douban.com/subject/27096665/) 13 | 14 | [CS-Notes 操作系统](http://www.cyc2018.xyz) 15 | -------------------------------------------------------------------------------- /other/design-patterns.md: -------------------------------------------------------------------------------- 1 | # 设计模式 2 | 3 | 面试大多问: 4 | 5 | * 单例模式 6 | * 观察者模式 7 | * 工厂模式 8 | * 责任链模式 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /other/design-patterns/README.md: -------------------------------------------------------------------------------- 1 | # 设计模式 2 | 3 | 面试大多问: 4 | 5 | * 单例模式 6 | * 观察者模式 7 | * 工厂模式 8 | * 责任链模式 9 | 10 | -------------------------------------------------------------------------------- /other/design-patterns/mvc-mvp-mvvm.md: -------------------------------------------------------------------------------- 1 | # MVC MVP MVVM 2 | 3 | MVC 和 MVP 看下面这个⬇️ 4 | 5 | {% embed url="https://github.com/LRH1993/android_interview/blob/master/android/advance/mvp.md" %} 6 | 7 | MVVM 看下面这个⬇️ 8 | 9 | MVVM 模式将 Presenter 改名为 ViewModel,基本上与 MVP 模式完全一致。唯一的区别是,它采用双向绑定(data-binding):View的变动,自动反映在 ViewModel,反之亦然。Angular 和 Ember 都采用这种模式。 10 | 11 | {% embed url="https://www.ruanyifeng.com/blog/2015/02/mvcmvp_mvvm.html" %} 12 | -------------------------------------------------------------------------------- /other/git.md: -------------------------------------------------------------------------------- 1 | # Git 2 | 3 | {% embed url="https://www.liaoxuefeng.com/wiki/896043488029600" %} 4 | -------------------------------------------------------------------------------- /other/resume.md: -------------------------------------------------------------------------------- 1 | # 简历 2 | 3 | * 简历不要找乱七八糟花里胡哨的模板,又丑又放不了多少字,推荐使用[超级简历](https://www.wondercv.com/),懒人必备简历生成神器,大四找实习的时候就用的超级简历,他会根据简历内容的多少自动控制在一页内,这个功能我还蛮喜欢的。目前是免费用户可以新建一份简历,再添加简历就要充值变强了,不过其实一份这个额度就够用了,有需要第二份的话就给超级简历打钱吧,他值得! 4 | * 熟悉 LaTex 的也可以直接用 LaTex 写简历,网上也挺多模板,我之后找一找在这汇总存个档。 5 | 6 | ## 注意点 7 | 8 | * 不熟悉的东西千万不要往简历上写,保证简历上写到的东西都是你自己最熟悉的,争取简历上的东西问啥都能答上。 9 | * 想想自己简历的项目有没有攻克过什么难点,有没有遇到过什么问题。 10 | 11 | ## 项目 12 | 13 | * 对于自己简历上的项目,考虑是否有可以优化的点,在面试官主动 cue 你时可以说出来,或者可以在聊项目的时候主动提出项目还有哪些不足,还有什么地方可以进一步优化。 14 | 15 | ## 参考 16 | 17 | [Resume - Blankj](https://github.com/Blankj/resume) 18 | 19 | * 学习使用 FAB 描述自己做的工作,不过感觉 B 我写不出什么东西哦,写一个~~「如果雇我我可以给你表演天天摸鱼」~~ 20 | 21 | [Pin、小历作者的简历分享](https://xiaozhuanlan.com/topic/0379564821) 22 | 23 | * 这个分享不错,是干货o( ̄▽ ̄)d ,整个专栏是付费专栏,等我之后买了读了再来说说有没有购买的必要。 24 | -------------------------------------------------------------------------------- /other/zhi-li-ti.md: -------------------------------------------------------------------------------- 1 | # 智力题 2 | 3 | 字节好像不怎么问,腾讯阿里挺爱问的,反正我脑子转不过来,不会的就是不会,随缘看看这些吧哈哈哈。 4 | 5 | {% embed url="https://wangpengcheng.github.io/2020/03/23/zhiliti-jihe/" %} 6 | 7 | {% embed url="https://www.nowcoder.net/discuss/526897" %} 8 | 9 | {% embed url="https://www.nowcoder.com/discuss/262595?type=post&order=time&pos=&page=2&channel=1009&source_id=search_post" %} 10 | ⭐️ 11 | {% endembed %} 12 | 13 | ## 小岛上的和尚 14 | 15 | {% embed url="http://www.naokr.com/ask/770" %} 16 | 17 | “从前,有个小岛上只住着和尚。有些和尚的眼睛是红色的,而另一些的则是褐色。红色眼睛的和尚受到诅咒,如果得知自己的眼睛是红色的,那么当晚12点必须自行了断。(因为受到诅咒,所以只要得知自己的眼睛是红色的,则必须选择自杀,无一例外。)” 18 | 19 | 和尚们之间有一条不成文的规定,彼此不能提起对方眼睛的颜色。小岛上没有一面镜子,也没有可以反射自己容貌的物体。因此,没有任何人能够得知自己眼睛的颜色。出于这些原因,每个和尚都过着幸福的日子,也没有一个和尚自杀。 20 | 21 | 有一天,岛上突然来了一位游客,她对这个秘密并不知情。于是,这位游客对和尚们说: 22 | 23 | “你们当中,至少有一位的眼睛是红色的。” 24 | 25 | 这位无心的游客当天就离岛而去,而和尚们却因第一次听到有关眼睛颜色的话题而惴惴不安。当晚,小岛上开始出现了可怕的事情,究竟是什么事呢? 26 | 27 | {% hint style="success" %} 28 | 游客说“至少有一个人”的眼睛是红色的。 29 | 30 | 1\. 假设岛上的和尚中没有任何人的眼睛是红色,那么会怎样呢? 31 | 32 | 这种情况虽然最简单,但会产生最严重的后果。若没有一个和尚的眼睛是红色的,那么对他们来说,除了自己以外,看到的其他和尚的眼睛都是褐色。因此,每个和尚都会认为自己的眼睛是红色的(实际上是褐色)。可想而知,所有和尚当晚都会自杀。 33 | 34 | 2\. 如果只有一名和尚的眼睛是红色的,会出现什么结果呢? 35 | 36 | 除了这名和尚外,其余和尚都知道谁的眼睛是红色的,那么这些褐色眼睛的和尚当然不会自杀。而那位红眼和尚因看到其他和尚的眼睛都是褐色的,就会判断出自己眼睛的颜色,进而选择自杀。 37 | 38 | 接下来再考虑稍微复杂一些的情况。 39 | 40 | 3\. 假如有两个红眼和尚,会有什么样的结果呢? 41 | 42 | 现在开始的推理是为了得到本题答案而进行的核心推理部分。(开始时没有考虑过这种情况的读者,现在请仔细思考:若有两个红眼和尚,会发生什么样的事情?)游客说“至少有一个”和尚的眼睛是红色的,所以两个红眼和尚都会以为说的是对方。 43 | 44 | 这两个和尚都会想:“那个红眼的家伙今晚就要自杀喽。”并安然入睡。不过,因为两人都这样想,所以都能看到第二天的太阳。当这两位和尚相互碰面并看到对方没有自杀时,都会受到极大的打击。 45 | 46 | 此时,二人都会意识到,红眼和尚有两个而非一个,而且另一个正是自己。除此之外的任何情况都不可能让对方在第一个晚上不自杀而安然入睡。结果,受到打击的两个和尚会在第二天晚上都悲惨死去。 47 | 48 | 下面再考虑更加复杂的情况。 49 | 50 | 4\. 如果有3个红眼和尚,又会怎样呢? 51 | 52 | 平时,这3位会看到两个红眼和尚,所以听到游客的话后,都不会选择自杀。第一晚过后,他们又会想,另外两个和尚(红色眼睛)第二天晚上会同时自杀(根据前面探讨的“有两个红眼和尚”的情况)。像这样,这3个红眼和尚都会认为另外两个红眼和尚会同时自杀,而根本不会想到自己也是个红眼和尚。 53 | 54 | 到了第三天早上,看到本以为会自杀的另两个和尚并没有自杀时,根本没想到自己也是红眼和尚的这3人会同时受到极大的打击。因为,两个红眼和尚第二天晚上也没有自杀,这就表明还有一个红眼和尚,而这第三个红眼和尚正是自己。(除两个红眼和尚之外,他们平时看到其他和尚的眼睛都是褐色的。) 55 | 56 | 5\. 这种逻辑会反复循环。 57 | 58 | 因此,该题的答案是“若小岛上共有n个红眼和尚,那么第n个晚上这些和尚会同时自杀”。例如,小岛上共有5个红眼和尚,那么第5个晚上,这5个红眼和尚会同时自杀。 59 | {% endhint %} 60 | 61 | -------------------------------------------------------------------------------- /resume/readme.md: -------------------------------------------------------------------------------- 1 | # 简介 2 | 3 | * 简历不要找乱七八糟花里胡哨的模板,又丑又放不了多少字,推荐使用[超级简历](https://www.wondercv.com/),懒人必备简历生成神器,大四找实习的时候就用的超级简历,他会根据简历内容的多少自动控制在一页内,这个功能我还蛮喜欢的。目前是免费用户可以新建一份简历,再添加简历就要充值变强了,不过其实一份这个额度就够用了,有需要第二份的话就给超级简历打钱吧,他值得! 4 | * 熟悉LaTex的也可以直接用LaTex写简历,网上也挺多模板,我之后找一找在这汇总存个档。 5 | 6 | ## 注意点 7 | 8 | * 不熟悉的东西千万不要往简历上写,保证简历上写到的东西都是你自己最熟悉的,争取简历上的东西问啥都能答上。 9 | * 想想自己简历的项目有没有攻克过什么难点,有没有遇到过什么问题。 10 | 11 | ## 项目 12 | 13 | * 对于自己简历上的项目,考虑是否有可以优化的点,在面试官主动 cue 你时可以说出来,或者可以在聊项目的时候主动提出项目还有哪些不足,还有什么地方可以进一步优化。 14 | 15 | ## 参考 16 | 17 | [Resume - Blankj](https://github.com/Blankj/resume) 18 | 19 | * 学习使用FAB描述自己做的工作,不过感觉B我写不出什么东西哦,写一个~~「如果雇我我可以给你表演天天摸鱼」~~ 20 | 21 | [Pin、小历作者的简历分享](https://xiaozhuanlan.com/topic/0379564821) 22 | 23 | * 这个分享不错,是干货o\( ̄▽ ̄\)d ,整个专栏是付费专栏,等我之后买了读了再来说说有没有购买的必要。 24 | 25 | -------------------------------------------------------------------------------- /resume/resume.md: -------------------------------------------------------------------------------- 1 | # 简介 2 | 3 | * 简历不要找乱七八糟花里胡哨的模板,又丑又放不了多少字,推荐使用[超级简历](https://www.wondercv.com/),懒人必备简历生成神器,大四找实习的时候就用的超级简历,他会根据简历内容的多少自动控制在一页内,这个功能我还蛮喜欢的。目前是免费用户可以新建一份简历,再添加简历就要充值变强了,不过其实一份这个额度就够用了,有需要第二份的话就给超级简历打钱吧,他值得! 4 | * 熟悉LaTex的也可以直接用LaTex写简历,网上也挺多模板,我之后找一找在这汇总存个档。 5 | 6 | ## 注意点 7 | 8 | * 不熟悉的东西千万不要往简历上写,保证简历上写到的东西都是你自己最熟悉的,争取简历上的东西问啥都能答上。 9 | * 想想自己简历的项目有没有攻克过什么难点,有没有遇到过什么问题。 10 | 11 | ## 项目 12 | 13 | * 对于自己简历上的项目,考虑是否有可以优化的点,在面试官主动 cue 你时可以说出来,或者可以在聊项目的时候主动提出项目还有哪些不足,还有什么地方可以进一步优化。 14 | 15 | ## 参考 16 | 17 | [Resume - Blankj](https://github.com/Blankj/resume) 18 | 19 | * 学习使用FAB描述自己做的工作,不过感觉B我写不出什么东西哦,写一个~~「如果雇我我可以给你表演天天摸鱼」~~ 20 | 21 | [Pin、小历作者的简历分享](https://xiaozhuanlan.com/topic/0379564821) 22 | 23 | * 这个分享不错,是干货o\( ̄▽ ̄\)d ,整个专栏是付费专栏,等我之后买了读了再来说说有没有购买的必要。 24 | 25 | -------------------------------------------------------------------------------- /site/assets/images/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hishark/777-Interview-Notes/a38c4ff0cacce4a103bb33a14055911b79161f46/site/assets/images/favicon.png -------------------------------------------------------------------------------- /site/assets/javascripts/lunr/min/lunr.ja.min.js: -------------------------------------------------------------------------------- 1 | !function(e,r){"function"==typeof define&&define.amd?define(r):"object"==typeof exports?module.exports=r():r()(e.lunr)}(this,function(){return function(e){if(void 0===e)throw new Error("Lunr is not present. Please include / require Lunr before this script.");if(void 0===e.stemmerSupport)throw new Error("Lunr stemmer support is not present. Please include / require Lunr stemmer support before this script.");var r="2"==e.version[0];e.ja=function(){this.pipeline.reset(),this.pipeline.add(e.ja.trimmer,e.ja.stopWordFilter,e.ja.stemmer),r?this.tokenizer=e.ja.tokenizer:(e.tokenizer&&(e.tokenizer=e.ja.tokenizer),this.tokenizerFn&&(this.tokenizerFn=e.ja.tokenizer))};var t=new e.TinySegmenter;e.ja.tokenizer=function(i){var n,o,s,p,a,u,m,l,c,f;if(!arguments.length||null==i||void 0==i)return[];if(Array.isArray(i))return i.map(function(t){return r?new e.Token(t.toLowerCase()):t.toLowerCase()});for(o=i.toString().toLowerCase().replace(/^\s+/,""),n=o.length-1;n>=0;n--)if(/\S/.test(o.charAt(n))){o=o.substring(0,n+1);break}for(a=[],s=o.length,c=0,l=0;c<=s;c++)if(u=o.charAt(c),m=c-l,u.match(/\s/)||c==s){if(m>0)for(p=t.segment(o.slice(l,c)).filter(function(e){return!!e}),f=l,n=0;n