├── .gitignore ├── .gitmodules ├── .obsidian ├── app.json ├── appearance.json ├── community-plugins.json ├── core-plugins-migration.json ├── core-plugins.json ├── daily-notes.json ├── graph.json ├── hotkeys.json ├── plugins │ ├── calendar │ │ ├── data.json │ │ ├── main.js │ │ └── manifest.json │ ├── dataview │ │ ├── data.json │ │ ├── main.js │ │ ├── manifest.json │ │ └── styles.css │ ├── obsidian-excalidraw-plugin │ │ ├── data.json │ │ ├── main.js │ │ ├── manifest.json │ │ └── styles.css │ ├── obsidian-icon-folder │ │ ├── data.json │ │ ├── icons │ │ │ └── font-awesome-brands │ │ │ │ ├── 42Group.svg │ │ │ │ ├── 500px.svg │ │ │ │ ├── AccessibleIcon.svg │ │ │ │ ├── Accusoft.svg │ │ │ │ ├── Adn.svg │ │ │ │ ├── Adversal.svg │ │ │ │ ├── Affiliatetheme.svg │ │ │ │ ├── Airbnb.svg │ │ │ │ ├── Algolia.svg │ │ │ │ ├── Alipay.svg │ │ │ │ ├── Amazon.svg │ │ │ │ ├── AmazonPay.svg │ │ │ │ ├── Amilia.svg │ │ │ │ ├── Android.svg │ │ │ │ ├── Angellist.svg │ │ │ │ ├── Angrycreative.svg │ │ │ │ ├── Angular.svg │ │ │ │ ├── AppStore.svg │ │ │ │ ├── AppStoreIos.svg │ │ │ │ ├── Apper.svg │ │ │ │ ├── Apple.svg │ │ │ │ ├── ApplePay.svg │ │ │ │ ├── Artstation.svg │ │ │ │ ├── Asymmetrik.svg │ │ │ │ ├── Atlassian.svg │ │ │ │ ├── Audible.svg │ │ │ │ ├── Autoprefixer.svg │ │ │ │ ├── Avianex.svg │ │ │ │ ├── Aviato.svg │ │ │ │ ├── Aws.svg │ │ │ │ ├── Bandcamp.svg │ │ │ │ ├── BattleNet.svg │ │ │ │ ├── Behance.svg │ │ │ │ ├── BehanceSquare.svg │ │ │ │ ├── Bilibili.svg │ │ │ │ ├── Bimobject.svg │ │ │ │ ├── Bitbucket.svg │ │ │ │ ├── Bitcoin.svg │ │ │ │ ├── Bity.svg │ │ │ │ ├── BlackTie.svg │ │ │ │ ├── Blackberry.svg │ │ │ │ ├── Blogger.svg │ │ │ │ ├── BloggerB.svg │ │ │ │ ├── Bluetooth.svg │ │ │ │ ├── BluetoothB.svg │ │ │ │ ├── Bootstrap.svg │ │ │ │ ├── Bots.svg │ │ │ │ ├── Btc.svg │ │ │ │ ├── Buffer.svg │ │ │ │ ├── Buromobelexperte.svg │ │ │ │ ├── BuyNLarge.svg │ │ │ │ ├── Buysellads.svg │ │ │ │ ├── CanadianMapleLeaf.svg │ │ │ │ ├── CcAmazonPay.svg │ │ │ │ ├── CcAmex.svg │ │ │ │ ├── CcApplePay.svg │ │ │ │ ├── CcDinersClub.svg │ │ │ │ ├── CcDiscover.svg │ │ │ │ ├── CcJcb.svg │ │ │ │ ├── CcMastercard.svg │ │ │ │ ├── CcPaypal.svg │ │ │ │ ├── CcStripe.svg │ │ │ │ ├── CcVisa.svg │ │ │ │ ├── Centercode.svg │ │ │ │ ├── Centos.svg │ │ │ │ ├── Chrome.svg │ │ │ │ ├── Chromecast.svg │ │ │ │ ├── Cloudflare.svg │ │ │ │ ├── Cloudscale.svg │ │ │ │ ├── Cloudsmith.svg │ │ │ │ ├── Cloudversify.svg │ │ │ │ ├── Cmplid.svg │ │ │ │ ├── Codepen.svg │ │ │ │ ├── Codiepie.svg │ │ │ │ ├── Confluence.svg │ │ │ │ ├── Connectdevelop.svg │ │ │ │ ├── Contao.svg │ │ │ │ ├── CottonBureau.svg │ │ │ │ ├── Cpanel.svg │ │ │ │ ├── CreativeCommons.svg │ │ │ │ ├── CreativeCommonsBy.svg │ │ │ │ ├── CreativeCommonsNc.svg │ │ │ │ ├── CreativeCommonsNcEu.svg │ │ │ │ ├── CreativeCommonsNcJp.svg │ │ │ │ ├── CreativeCommonsNd.svg │ │ │ │ ├── CreativeCommonsPd.svg │ │ │ │ ├── CreativeCommonsPdAlt.svg │ │ │ │ ├── CreativeCommonsRemix.svg │ │ │ │ ├── CreativeCommonsSa.svg │ │ │ │ ├── CreativeCommonsSampling.svg │ │ │ │ ├── CreativeCommonsSamplingPlus.svg │ │ │ │ ├── CreativeCommonsShare.svg │ │ │ │ ├── CreativeCommonsZero.svg │ │ │ │ ├── CriticalRole.svg │ │ │ │ ├── Css3.svg │ │ │ │ ├── Css3Alt.svg │ │ │ │ ├── Cuttlefish.svg │ │ │ │ ├── DAndD.svg │ │ │ │ ├── DAndDBeyond.svg │ │ │ │ ├── Dailymotion.svg │ │ │ │ ├── Dashcube.svg │ │ │ │ ├── Deezer.svg │ │ │ │ ├── Delicious.svg │ │ │ │ ├── Deploydog.svg │ │ │ │ ├── Deskpro.svg │ │ │ │ ├── Dev.svg │ │ │ │ ├── Deviantart.svg │ │ │ │ ├── Dhl.svg │ │ │ │ ├── Diaspora.svg │ │ │ │ ├── Digg.svg │ │ │ │ ├── DigitalOcean.svg │ │ │ │ ├── Discord.svg │ │ │ │ ├── Discourse.svg │ │ │ │ ├── Dochub.svg │ │ │ │ ├── Docker.svg │ │ │ │ ├── Draft2digital.svg │ │ │ │ ├── Dribbble.svg │ │ │ │ ├── DribbbleSquare.svg │ │ │ │ ├── Dropbox.svg │ │ │ │ ├── Drupal.svg │ │ │ │ ├── Dyalog.svg │ │ │ │ ├── Earlybirds.svg │ │ │ │ ├── Ebay.svg │ │ │ │ ├── Edge.svg │ │ │ │ ├── EdgeLegacy.svg │ │ │ │ ├── Elementor.svg │ │ │ │ ├── Ello.svg │ │ │ │ ├── Ember.svg │ │ │ │ ├── Empire.svg │ │ │ │ ├── Envira.svg │ │ │ │ ├── Erlang.svg │ │ │ │ ├── Ethereum.svg │ │ │ │ ├── Etsy.svg │ │ │ │ ├── Evernote.svg │ │ │ │ ├── Expeditedssl.svg │ │ │ │ ├── Facebook.svg │ │ │ │ ├── FacebookF.svg │ │ │ │ ├── FacebookMessenger.svg │ │ │ │ ├── FacebookSquare.svg │ │ │ │ ├── FantasyFlightGames.svg │ │ │ │ ├── Fedex.svg │ │ │ │ ├── Fedora.svg │ │ │ │ ├── Figma.svg │ │ │ │ ├── Firefox.svg │ │ │ │ ├── FirefoxBrowser.svg │ │ │ │ ├── FirstOrder.svg │ │ │ │ ├── FirstOrderAlt.svg │ │ │ │ ├── Firstdraft.svg │ │ │ │ ├── Flickr.svg │ │ │ │ ├── Flipboard.svg │ │ │ │ ├── Fly.svg │ │ │ │ ├── FontAwesome.svg │ │ │ │ ├── Fonticons.svg │ │ │ │ ├── FonticonsFi.svg │ │ │ │ ├── FortAwesome.svg │ │ │ │ ├── FortAwesomeAlt.svg │ │ │ │ ├── Forumbee.svg │ │ │ │ ├── Foursquare.svg │ │ │ │ ├── FreeCodeCamp.svg │ │ │ │ ├── Freebsd.svg │ │ │ │ ├── Fulcrum.svg │ │ │ │ ├── GalacticRepublic.svg │ │ │ │ ├── GalacticSenate.svg │ │ │ │ ├── GetPocket.svg │ │ │ │ ├── Gg.svg │ │ │ │ ├── GgCircle.svg │ │ │ │ ├── Git.svg │ │ │ │ ├── GitAlt.svg │ │ │ │ ├── GitSquare.svg │ │ │ │ ├── Github.svg │ │ │ │ ├── GithubAlt.svg │ │ │ │ ├── GithubSquare.svg │ │ │ │ ├── Gitkraken.svg │ │ │ │ ├── Gitlab.svg │ │ │ │ ├── Gitter.svg │ │ │ │ ├── Glide.svg │ │ │ │ ├── GlideG.svg │ │ │ │ ├── Gofore.svg │ │ │ │ ├── Golang.svg │ │ │ │ ├── Goodreads.svg │ │ │ │ ├── GoodreadsG.svg │ │ │ │ ├── Google.svg │ │ │ │ ├── GoogleDrive.svg │ │ │ │ ├── GooglePay.svg │ │ │ │ ├── GooglePlay.svg │ │ │ │ ├── GooglePlus.svg │ │ │ │ ├── GooglePlusG.svg │ │ │ │ ├── GooglePlusSquare.svg │ │ │ │ ├── GoogleWallet.svg │ │ │ │ ├── Gratipay.svg │ │ │ │ ├── Grav.svg │ │ │ │ ├── Gripfire.svg │ │ │ │ ├── Grunt.svg │ │ │ │ ├── Guilded.svg │ │ │ │ ├── Gulp.svg │ │ │ │ ├── HackerNews.svg │ │ │ │ ├── HackerNewsSquare.svg │ │ │ │ ├── Hackerrank.svg │ │ │ │ ├── Hashnode.svg │ │ │ │ ├── Hips.svg │ │ │ │ ├── HireAHelper.svg │ │ │ │ ├── Hive.svg │ │ │ │ ├── Hooli.svg │ │ │ │ ├── Hornbill.svg │ │ │ │ ├── Hotjar.svg │ │ │ │ ├── Houzz.svg │ │ │ │ ├── Html5.svg │ │ │ │ ├── Hubspot.svg │ │ │ │ ├── Ideal.svg │ │ │ │ ├── Imdb.svg │ │ │ │ ├── Instagram.svg │ │ │ │ ├── InstagramSquare.svg │ │ │ │ ├── Instalod.svg │ │ │ │ ├── Intercom.svg │ │ │ │ ├── InternetExplorer.svg │ │ │ │ ├── Invision.svg │ │ │ │ ├── Ioxhost.svg │ │ │ │ ├── ItchIo.svg │ │ │ │ ├── Itunes.svg │ │ │ │ ├── ItunesNote.svg │ │ │ │ ├── Java.svg │ │ │ │ ├── JediOrder.svg │ │ │ │ ├── Jenkins.svg │ │ │ │ ├── Jira.svg │ │ │ │ ├── Joget.svg │ │ │ │ ├── Joomla.svg │ │ │ │ ├── Js.svg │ │ │ │ ├── JsSquare.svg │ │ │ │ ├── Jsfiddle.svg │ │ │ │ ├── Kaggle.svg │ │ │ │ ├── Keybase.svg │ │ │ │ ├── Keycdn.svg │ │ │ │ ├── Kickstarter.svg │ │ │ │ ├── KickstarterK.svg │ │ │ │ ├── Korvue.svg │ │ │ │ ├── Laravel.svg │ │ │ │ ├── Lastfm.svg │ │ │ │ ├── LastfmSquare.svg │ │ │ │ ├── Leanpub.svg │ │ │ │ ├── Less.svg │ │ │ │ ├── Line.svg │ │ │ │ ├── Linkedin.svg │ │ │ │ ├── LinkedinIn.svg │ │ │ │ ├── Linode.svg │ │ │ │ ├── Linux.svg │ │ │ │ ├── Lyft.svg │ │ │ │ ├── Magento.svg │ │ │ │ ├── Mailchimp.svg │ │ │ │ ├── Mandalorian.svg │ │ │ │ ├── Markdown.svg │ │ │ │ ├── Mastodon.svg │ │ │ │ ├── Maxcdn.svg │ │ │ │ ├── Mdb.svg │ │ │ │ ├── Medapps.svg │ │ │ │ ├── Medium.svg │ │ │ │ ├── Medrt.svg │ │ │ │ ├── Meetup.svg │ │ │ │ ├── Megaport.svg │ │ │ │ ├── Mendeley.svg │ │ │ │ ├── Microblog.svg │ │ │ │ ├── Microsoft.svg │ │ │ │ ├── Mix.svg │ │ │ │ ├── Mixcloud.svg │ │ │ │ ├── Mixer.svg │ │ │ │ ├── Mizuni.svg │ │ │ │ ├── Modx.svg │ │ │ │ ├── Monero.svg │ │ │ │ ├── Napster.svg │ │ │ │ ├── Neos.svg │ │ │ │ ├── Nimblr.svg │ │ │ │ ├── Node.svg │ │ │ │ ├── NodeJs.svg │ │ │ │ ├── Npm.svg │ │ │ │ ├── Ns8.svg │ │ │ │ ├── Nutritionix.svg │ │ │ │ ├── OctopusDeploy.svg │ │ │ │ ├── Odnoklassniki.svg │ │ │ │ ├── OdnoklassnikiSquare.svg │ │ │ │ ├── OldRepublic.svg │ │ │ │ ├── Opencart.svg │ │ │ │ ├── Openid.svg │ │ │ │ ├── Opera.svg │ │ │ │ ├── OptinMonster.svg │ │ │ │ ├── Orcid.svg │ │ │ │ ├── Osi.svg │ │ │ │ ├── Padlet.svg │ │ │ │ ├── Page4.svg │ │ │ │ ├── Pagelines.svg │ │ │ │ ├── Palfed.svg │ │ │ │ ├── Patreon.svg │ │ │ │ ├── Paypal.svg │ │ │ │ ├── Perbyte.svg │ │ │ │ ├── Periscope.svg │ │ │ │ ├── Phabricator.svg │ │ │ │ ├── PhoenixFramework.svg │ │ │ │ ├── PhoenixSquadron.svg │ │ │ │ ├── Php.svg │ │ │ │ ├── PiedPiper.svg │ │ │ │ ├── PiedPiperAlt.svg │ │ │ │ ├── PiedPiperHat.svg │ │ │ │ ├── PiedPiperPp.svg │ │ │ │ ├── PiedPiperSquare.svg │ │ │ │ ├── Pinterest.svg │ │ │ │ ├── PinterestP.svg │ │ │ │ ├── PinterestSquare.svg │ │ │ │ ├── Pix.svg │ │ │ │ ├── Playstation.svg │ │ │ │ ├── ProductHunt.svg │ │ │ │ ├── Pushed.svg │ │ │ │ ├── Python.svg │ │ │ │ ├── Qq.svg │ │ │ │ ├── Quinscape.svg │ │ │ │ ├── Quora.svg │ │ │ │ ├── RProject.svg │ │ │ │ ├── RaspberryPi.svg │ │ │ │ ├── Ravelry.svg │ │ │ │ ├── React.svg │ │ │ │ ├── Reacteurope.svg │ │ │ │ ├── Readme.svg │ │ │ │ ├── Rebel.svg │ │ │ │ ├── RedRiver.svg │ │ │ │ ├── Reddit.svg │ │ │ │ ├── RedditAlien.svg │ │ │ │ ├── RedditSquare.svg │ │ │ │ ├── Redhat.svg │ │ │ │ ├── Renren.svg │ │ │ │ ├── Replyd.svg │ │ │ │ ├── Researchgate.svg │ │ │ │ ├── Resolving.svg │ │ │ │ ├── Rev.svg │ │ │ │ ├── Rocketchat.svg │ │ │ │ ├── Rockrms.svg │ │ │ │ ├── Rust.svg │ │ │ │ ├── Safari.svg │ │ │ │ ├── Salesforce.svg │ │ │ │ ├── Sass.svg │ │ │ │ ├── Schlix.svg │ │ │ │ ├── Scribd.svg │ │ │ │ ├── Searchengin.svg │ │ │ │ ├── Sellcast.svg │ │ │ │ ├── Sellsy.svg │ │ │ │ ├── Servicestack.svg │ │ │ │ ├── Shirtsinbulk.svg │ │ │ │ ├── Shopify.svg │ │ │ │ ├── Shopware.svg │ │ │ │ ├── Simplybuilt.svg │ │ │ │ ├── Sistrix.svg │ │ │ │ ├── Sith.svg │ │ │ │ ├── Sitrox.svg │ │ │ │ ├── Sketch.svg │ │ │ │ ├── Skyatlas.svg │ │ │ │ ├── Skype.svg │ │ │ │ ├── Slack.svg │ │ │ │ ├── Slideshare.svg │ │ │ │ ├── Snapchat.svg │ │ │ │ ├── SnapchatSquare.svg │ │ │ │ ├── Soundcloud.svg │ │ │ │ ├── Sourcetree.svg │ │ │ │ ├── Speakap.svg │ │ │ │ ├── SpeakerDeck.svg │ │ │ │ ├── Spotify.svg │ │ │ │ ├── SquareFontAwesome.svg │ │ │ │ ├── SquareFontAwesomeStroke.svg │ │ │ │ ├── Squarespace.svg │ │ │ │ ├── StackExchange.svg │ │ │ │ ├── StackOverflow.svg │ │ │ │ ├── Stackpath.svg │ │ │ │ ├── Staylinked.svg │ │ │ │ ├── Steam.svg │ │ │ │ ├── SteamSquare.svg │ │ │ │ ├── SteamSymbol.svg │ │ │ │ ├── StickerMule.svg │ │ │ │ ├── Strava.svg │ │ │ │ ├── Stripe.svg │ │ │ │ ├── StripeS.svg │ │ │ │ ├── Studiovinari.svg │ │ │ │ ├── Stumbleupon.svg │ │ │ │ ├── StumbleuponCircle.svg │ │ │ │ ├── Superpowers.svg │ │ │ │ ├── Supple.svg │ │ │ │ ├── Suse.svg │ │ │ │ ├── Swift.svg │ │ │ │ ├── Symfony.svg │ │ │ │ ├── Teamspeak.svg │ │ │ │ ├── Telegram.svg │ │ │ │ ├── TencentWeibo.svg │ │ │ │ ├── TheRedYeti.svg │ │ │ │ ├── Themeco.svg │ │ │ │ ├── Themeisle.svg │ │ │ │ ├── ThinkPeaks.svg │ │ │ │ ├── Tiktok.svg │ │ │ │ ├── TradeFederation.svg │ │ │ │ ├── Trello.svg │ │ │ │ ├── Tumblr.svg │ │ │ │ ├── TumblrSquare.svg │ │ │ │ ├── Twitch.svg │ │ │ │ ├── Twitter.svg │ │ │ │ ├── TwitterSquare.svg │ │ │ │ ├── Typo3.svg │ │ │ │ ├── Uber.svg │ │ │ │ ├── Ubuntu.svg │ │ │ │ ├── Uikit.svg │ │ │ │ ├── Umbraco.svg │ │ │ │ ├── Uncharted.svg │ │ │ │ ├── Uniregistry.svg │ │ │ │ ├── Unity.svg │ │ │ │ ├── Unsplash.svg │ │ │ │ ├── Untappd.svg │ │ │ │ ├── Ups.svg │ │ │ │ ├── Usb.svg │ │ │ │ ├── Usps.svg │ │ │ │ ├── Ussunnah.svg │ │ │ │ ├── Vaadin.svg │ │ │ │ ├── Viacoin.svg │ │ │ │ ├── Viadeo.svg │ │ │ │ ├── ViadeoSquare.svg │ │ │ │ ├── Viber.svg │ │ │ │ ├── Vimeo.svg │ │ │ │ ├── VimeoSquare.svg │ │ │ │ ├── VimeoV.svg │ │ │ │ ├── Vine.svg │ │ │ │ ├── Vk.svg │ │ │ │ ├── Vnv.svg │ │ │ │ ├── Vuejs.svg │ │ │ │ ├── WatchmanMonitoring.svg │ │ │ │ ├── Waze.svg │ │ │ │ ├── Weebly.svg │ │ │ │ ├── Weibo.svg │ │ │ │ ├── Weixin.svg │ │ │ │ ├── Whatsapp.svg │ │ │ │ ├── WhatsappSquare.svg │ │ │ │ ├── Whmcs.svg │ │ │ │ ├── WikipediaW.svg │ │ │ │ ├── Windows.svg │ │ │ │ ├── Wirsindhandwerk.svg │ │ │ │ ├── Wix.svg │ │ │ │ ├── WizardsOfTheCoast.svg │ │ │ │ ├── Wodu.svg │ │ │ │ ├── WolfPackBattalion.svg │ │ │ │ ├── Wordpress.svg │ │ │ │ ├── WordpressSimple.svg │ │ │ │ ├── Wpbeginner.svg │ │ │ │ ├── Wpexplorer.svg │ │ │ │ ├── Wpforms.svg │ │ │ │ ├── Wpressr.svg │ │ │ │ ├── Xbox.svg │ │ │ │ ├── Xing.svg │ │ │ │ ├── XingSquare.svg │ │ │ │ ├── YCombinator.svg │ │ │ │ ├── Yahoo.svg │ │ │ │ ├── Yammer.svg │ │ │ │ ├── Yandex.svg │ │ │ │ ├── YandexInternational.svg │ │ │ │ ├── Yarn.svg │ │ │ │ ├── Yelp.svg │ │ │ │ ├── Yoast.svg │ │ │ │ ├── Youtube.svg │ │ │ │ ├── YoutubeSquare.svg │ │ │ │ └── Zhihu.svg │ │ ├── main.js │ │ ├── manifest.json │ │ └── styles.css │ ├── obsidian-kanban │ │ ├── main.js │ │ ├── manifest.json │ │ └── styles.css │ ├── obsidian-style-settings │ │ ├── data.json │ │ ├── main.js │ │ ├── manifest.json │ │ └── styles.css │ ├── table-editor-obsidian │ │ ├── data.json │ │ ├── main.js │ │ ├── manifest.json │ │ └── styles.css │ └── templater-obsidian │ │ ├── data.json │ │ ├── main.js │ │ ├── manifest.json │ │ └── styles.css ├── themes │ ├── Border │ │ ├── manifest.json │ │ └── theme.css │ ├── GitHub Theme │ │ ├── manifest.json │ │ └── theme.css │ ├── Minimal │ │ ├── manifest.json │ │ └── theme.css │ ├── Obsidianite.css │ └── Terminal │ │ ├── manifest.json │ │ └── theme.css ├── workspace └── workspace.json ├── LICENSE ├── README.md ├── assets └── source │ ├── .editorconfig │ ├── .gitignore │ ├── .vscode │ ├── launch.json │ └── tasks.json │ ├── a_queue.cc │ ├── a_stack.cc │ ├── a_string.cc │ ├── assembler.c │ ├── assert.cc │ ├── concurrency.cc │ ├── const.cc │ ├── constexpr.cc │ ├── consumer.cc │ ├── cycle_reference.cc │ ├── decltype.cc │ ├── ee.cc │ ├── enum.cc │ ├── example.cc │ ├── explicit.cc │ ├── extern.cc │ ├── extern_c.cc │ ├── friend_clz.cc │ ├── friend_func.cc │ ├── horizon │ ├── a.cc │ ├── b.cc │ └── quick_sort.cc │ ├── initialize_list.cc │ ├── inline.cc │ ├── lambda.cc │ ├── malloc_brk.c │ ├── malloc_mmap.c │ ├── merge_sort.cc │ ├── mutable.cc │ ├── my_shared_ptr.cc │ ├── new.cc │ ├── noexcept.cc │ ├── oop_in_c.c │ ├── oop_in_cpp.cc │ ├── operator_overloading.cc │ ├── pic.cc │ ├── pipe.cc │ ├── process.cc │ ├── push_back.cc │ ├── reactor.cc │ ├── region_operator.cc │ ├── shared_memory.cc │ ├── shared_ptr_example.cc │ ├── sizeof.cc │ ├── static.cc │ ├── template.cc │ ├── test.cc │ ├── test_thread_pool.cc │ ├── thread_pool.h │ ├── union.cc │ ├── use_signal.cc │ └── volatile.cc ├── babel.config.js ├── docs ├── Linux │ ├── 1. Linux常用命令.md │ ├── 2. Linux文件系统.md │ ├── 3. Linux用户管理.md │ ├── 4. Linux Crash Course.md │ ├── 5. 管道,消息队列,共享内存,信号.md │ └── README.md ├── cpp │ ├── 1. const.md │ ├── 10. extern_c.md │ ├── 11. struct_and_typedef_struct.md │ ├── 12. struct_vs_class.md │ ├── 13. union.md │ ├── 14. 复杂声明.md │ ├── 15. c_oop.md │ ├── 16. 运算符重载.md │ ├── 17. explicit.md │ ├── 18. noexcept.md │ ├── 19. friend.md │ ├── 2. constexpr.md │ ├── 20. using.md │ ├── 21. region_operator.md │ ├── 22. enum.md │ ├── 23. decltype.md │ ├── 24. 左值引用和右值引用.md │ ├── 25. initializer_list.md │ ├── 26. oop.md │ ├── 27. 类型转换.md │ ├── 29. enum变量初始化.md │ ├── 3. mutable.md │ ├── 30. 浅拷贝 vs 深拷贝.md │ ├── 31. new and delete.md │ ├── 32. C++ 11 新特性.md │ ├── 33. LAMBDA 表达式.md │ ├── 34. C++ 17 新特性.md │ ├── 35. 循环引用.md │ ├── 36. 静态存储区 Vs 动态存储区.md │ ├── 37. llvm.md │ ├── 38. RAII 原则.md │ ├── 39. placement new.md │ ├── 4. static_extern_auto.md │ ├── 40. 虚函数和虚表的原理.md │ ├── 41. 构造函数和析构函数.md │ ├── 42. float double 整数部分、小数位部分个数.md │ ├── 44. 引用.md │ ├── 45. 手写一个 shared_ptr.md │ ├── 46. C++ 中的多线程开发.md │ ├── 47. 模板.md │ ├── 48. Move 语义.md │ ├── 49. 动态链接库 vs 静态链接库.md │ ├── 5. this.md │ ├── 6. inline.md │ ├── 7. volatile.md │ ├── 8. assert.md │ ├── 9. sizeof.md │ ├── Effective C++ │ │ ├── 1. 视C++为一个语言联邦.md │ │ ├── 4. 确保对象被使用前已先被初始化.md │ │ ├── README.md │ │ └── size_t.cc │ ├── README.md │ ├── STL │ │ ├── 1. 顺序容器.md │ │ ├── 2. 关联式容器.md │ │ ├── 3. 容器适配器.md │ │ ├── 4. 空间配置器.md │ │ ├── 5. 迭代器.md │ │ ├── 6. STL 中的线程安全.md │ │ └── README.md │ └── images │ │ ├── 2023-03-03-19-40-27.png │ │ ├── 2023-03-03-20-25-13.png │ │ ├── 2023-03-04-16-00-22.png │ │ ├── 2023-03-04-16-03-32.png │ │ ├── 2023-03-04-16-58-17.png │ │ ├── 2023-03-04-17-01-22.png │ │ ├── 2023-03-04-17-05-13.png │ │ ├── 2023-03-04-17-06-27.png │ │ ├── 2023-03-04-17-12-42.png │ │ ├── 2023-03-04-17-15-35.png │ │ ├── 2023-03-04-17-21-57.png │ │ ├── 2023-03-04-17-35-59.png │ │ ├── 2023-03-07-15-52-53.png │ │ ├── 2023-03-09-16-02-19.png │ │ ├── 2023-03-09-17-07-42.png │ │ ├── 2023-03-09-19-54-03.png │ │ ├── 2023-03-09-19-57-57.png │ │ ├── 2023-03-09-20-15-04.png │ │ ├── 2023-03-09-20-17-16.png │ │ └── 2023-03-25-20-22-26.png ├── index.md ├── 异构计算 │ ├── 1. OpenCL.md │ ├── 3. 多线程.md │ ├── 4. GPU 内存结构.md │ ├── CUDA │ │ ├── CUDA C++ Programming Guide.md │ │ ├── CUDA_C_Programming_Guide.pdf │ │ ├── Pasted image 20230808155928.png │ │ ├── Pasted image 20230808161005.png │ │ └── Pasted image 20230808171058.png │ ├── README.md │ ├── 常见深度学习算子优化思路记录.canvas │ └── 算子加速思路 │ │ ├── GEMM 算子调优.md │ │ ├── Pasted image 20230815113825.png │ │ ├── Pasted image 20230815114247.png │ │ ├── Pasted image 20230815114346.png │ │ ├── Pasted image 20230815145244.png │ │ ├── Pasted image 20230815150206.png │ │ └── Reduce 算子调优.md ├── 游戏引擎 │ ├── 1. OpenGL 渲染管线.md │ ├── 2. 坐标系统.md │ ├── Games101.md │ └── images │ │ ├── 2023-03-04-11-40-41.png │ │ └── 2023-03-04-12-39-09.png ├── 算法 │ ├── 1. KMP.md │ ├── 10. 单调栈.md │ ├── 11. 二叉树.md │ ├── 12. 背包问题.md │ ├── 13. AVL Tree.md │ ├── 14. 递归和迭代的区别.md │ ├── 15. 树形dp.md │ ├── 16. 差分数组.md │ ├── 17. ACM 建树.md │ ├── 2. LRU.md │ ├── 3. 排序算法总结.md │ ├── 4. 堆的创建.md │ ├── 5. 前缀和算法.md │ ├── 6. dijkstra.md │ ├── 7. 回溯算法模板.md │ ├── 8. 贪心算法.md │ ├── 9. 动态规划.md │ ├── README.md │ └── images │ │ └── 2023-03-06-11-02-17.png ├── 计算机原理 │ ├── 1. 进程.md │ ├── 10. 如何避免预读失效和缓存污染.md │ ├── 11. 深入理解 Linux 虚拟内存管理.md │ ├── 12. CPU 缓存一致性.md │ ├── 2. 计算机如何执行程序.md │ ├── 3. 为什么要有虚拟内存.md │ ├── 4. CPU 是如何执行程序的.md │ ├── 5. 磁盘比硬盘慢几万倍.md │ ├── 6. malloc.md │ ├── 7. 局部性原理.md │ ├── 8. 内存满了,会发生什么.md │ ├── 9. 在 4GB 物理内存的机器上,申请 8G 内存.md │ ├── CSAPP │ │ ├── 2. 信息的表示和处理.md │ │ ├── 3. 程序的机器级表示.md │ │ └── images │ │ │ └── 2023-03-11-15-23-42.png │ ├── README.md │ └── images │ │ ├── 2023-03-03-11-21-32.png │ │ ├── 2023-03-09-21-35-33.png │ │ ├── 2023-03-09-21-43-41.png │ │ ├── 2023-03-09-21-53-00.png │ │ ├── 2023-03-09-22-01-24.png │ │ ├── 2023-03-10-13-39-37.png │ │ ├── 2023-03-10-13-42-16.png │ │ ├── 2023-03-10-15-42-16.png │ │ ├── 2023-03-10-18-00-54.png │ │ ├── 2023-03-25-13-42-10.png │ │ ├── 2023-03-25-13-46-46.png │ │ ├── 2023-03-25-18-40-21.png │ │ └── 计算机系统 ├── 计算机网络 │ ├── 1. TCP 和 UDP 的区别.md │ ├── 10. TCP 连接失败怎么调试.md │ ├── 11. TCP 状态机.md │ ├── 12. ping www.baidu.com 流程.md │ ├── 13. 路由相关算法.md │ ├── 14. 负载均衡.md │ ├── 15. 高性能网络模式_Reactor and Proactor.md │ ├── 16. 一致性哈希.md │ ├── 2. TCP 三次握手,四次挥手.md │ ├── 3. Get VS Post.md │ ├── 4. URL 到 显示内容.md │ ├── 5. http vs https.md │ ├── 6. select, poll, epoll.md │ ├── 7. TCP 粘包.md │ ├── 8. TCP 拥塞控制.md │ ├── 9. TCP 流量控制.md │ ├── README.md │ ├── images │ │ ├── 2023-03-06-13-34-50.png │ │ ├── 2023-03-20-21-06-24.png │ │ ├── 2023-03-20-21-14-13.png │ │ ├── 2023-03-20-21-17-53.png │ │ └── 2023-03-25-21-54-15.png │ ├── 小林 coding │ │ ├── HTTP 常见面试题.md │ │ ├── Ip.md │ │ ├── LVS.md │ │ ├── Linux 系统是如何收发网络包的.md │ │ ├── TCP 重传、滑动窗口、流量控制、拥塞控制.md │ │ ├── TCP_IP 网络模型有哪几层.md │ │ ├── TCP三次握手与四次挥手.md │ │ ├── images │ │ │ ├── 2023-03-03-15-06-36.png │ │ │ ├── 2023-03-06-13-29-14.png │ │ │ ├── 2023-03-06-14-47-11.png │ │ │ ├── 2023-03-06-14-54-01.png │ │ │ ├── 2023-03-06-15-01-58.png │ │ │ ├── 2023-03-06-15-04-18.png │ │ │ ├── 2023-03-06-15-07-27.png │ │ │ ├── 2023-03-06-15-10-26.png │ │ │ ├── 2023-03-06-15-11-35.png │ │ │ ├── 2023-03-06-15-45-12.png │ │ │ ├── 2023-03-06-16-12-44.png │ │ │ ├── 2023-03-06-16-50-55.png │ │ │ ├── 2023-03-09-10-34-47.png │ │ │ ├── 2023-03-09-11-06-10.png │ │ │ ├── 2023-03-09-11-08-03.png │ │ │ └── 2023-03-09-11-50-43.png │ │ └── 键入网址到网页显示,期间发生了什么.md │ └── 计算机网络微课堂 │ │ ├── 0. 概述.md │ │ ├── 1. 物理层.md │ │ ├── 2. 数据链路层.md │ │ └── images │ │ ├── 2023-03-02-15-04-38.png │ │ ├── 2023-03-02-15-06-44.png │ │ ├── 2023-03-02-15-23-37.png │ │ ├── 三种交换方式的对比.png │ │ ├── 协议数据单元.png │ │ ├── 奇偶校验.png │ │ ├── 应用层的一些常见问题.png │ │ ├── 数据链路层在网络体系结构中所处的地位.png │ │ ├── 数据链路层的一些常见问题.png │ │ ├── 时延.png │ │ ├── 比特填充.png │ │ ├── 物理层的一些常见问题.png │ │ ├── 网络层的一些常见问题.png │ │ ├── 计算机网络体系结构.png │ │ ├── 计算机网络速率-例子.png │ │ ├── 运输层的一些常见问题.png │ │ └── 透明传输.png ├── 面试记录 │ └── 暑期实习 │ │ ├── 完美世界.md │ │ └── 阿里云 │ │ ├── Pasted image 20230301111857.png │ │ ├── Pasted image 20230301111956.png │ │ ├── Pasted image 20230301112124.png │ │ ├── Pasted image 20230301112258.png │ │ └── 面经.md └── 项目 │ ├── README.md │ ├── Scheme Interpreter │ └── README.md │ └── http-server │ └── README.md ├── docusaurus.config.js ├── package-lock.json ├── package.json ├── sidebars.js ├── src └── css │ └── custom.css └── static ├── .nojekyll └── img └── favicon.ico /.gitignore: -------------------------------------------------------------------------------- 1 | # Dependencies 2 | /node_modules 3 | 4 | # Production 5 | /build 6 | 7 | # Generated files 8 | .docusaurus 9 | .cache-loader 10 | 11 | # Misc 12 | .DS_Store 13 | .env.local 14 | .env.development.local 15 | .env.test.local 16 | .env.production.local 17 | 18 | npm-debug.log* 19 | yarn-debug.log* 20 | yarn-error.log* 21 | assets/source/bin 22 | assets/pdf 23 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "docs/project/http-server/tcp-sevr"] 2 | path = docs/project/http-server/tcp-sevr 3 | url = git@github.com:Civitasv/tcp_sevr.git 4 | -------------------------------------------------------------------------------- /.obsidian/app.json: -------------------------------------------------------------------------------- 1 | { 2 | "legacyEditor": false, 3 | "livePreview": true, 4 | "showFrontmatter": true, 5 | "spellcheck": false, 6 | "spellcheckLanguages": [ 7 | "en-US" 8 | ], 9 | "vimMode": false, 10 | "promptDelete": false, 11 | "alwaysUpdateLinks": true, 12 | "newFileLocation": "current", 13 | "attachmentFolderPath": "./", 14 | "pdfExportSettings": { 15 | "includeName": true, 16 | "pageSize": "Letter", 17 | "landscape": false, 18 | "margin": "0", 19 | "downscalePercent": 100 20 | }, 21 | "useMarkdownLinks": true, 22 | "userIgnoreFilters": [ 23 | "node_modules/", 24 | "assets/", 25 | "build/", 26 | "src/", 27 | "static/" 28 | ], 29 | "tabSize": 2, 30 | "showLineNumber": false 31 | } -------------------------------------------------------------------------------- /.obsidian/appearance.json: -------------------------------------------------------------------------------- 1 | { 2 | "translucency": false, 3 | "interfaceFontFamily": "SF Pro Display", 4 | "textFontFamily": "SF Pro Text", 5 | "monospaceFontFamily": "", 6 | "baseFontSize": 16, 7 | "cssTheme": "Border", 8 | "theme": "obsidian", 9 | "baseFontSizeAction": true, 10 | "accentColor": "" 11 | } -------------------------------------------------------------------------------- /.obsidian/community-plugins.json: -------------------------------------------------------------------------------- 1 | [ 2 | "table-editor-obsidian", 3 | "calendar", 4 | "dataview", 5 | "templater-obsidian", 6 | "obsidian-style-settings", 7 | "obsidian-excalidraw-plugin", 8 | "obsidian-kanban", 9 | "obsidian-icon-folder" 10 | ] -------------------------------------------------------------------------------- /.obsidian/core-plugins-migration.json: -------------------------------------------------------------------------------- 1 | { 2 | "file-explorer": true, 3 | "global-search": true, 4 | "switcher": true, 5 | "graph": true, 6 | "backlink": true, 7 | "outgoing-link": false, 8 | "tag-pane": false, 9 | "page-preview": true, 10 | "daily-notes": true, 11 | "templates": false, 12 | "note-composer": true, 13 | "command-palette": true, 14 | "slash-command": false, 15 | "editor-status": true, 16 | "starred": false, 17 | "markdown-importer": true, 18 | "zk-prefixer": false, 19 | "random-note": false, 20 | "outline": false, 21 | "word-count": true, 22 | "slides": true, 23 | "audio-recorder": false, 24 | "workspaces": false, 25 | "file-recovery": true, 26 | "publish": false, 27 | "sync": false, 28 | "canvas": true, 29 | "bookmarks": true 30 | } -------------------------------------------------------------------------------- /.obsidian/core-plugins.json: -------------------------------------------------------------------------------- 1 | [ 2 | "file-explorer", 3 | "global-search", 4 | "switcher", 5 | "graph", 6 | "backlink", 7 | "canvas", 8 | "page-preview", 9 | "daily-notes", 10 | "note-composer", 11 | "command-palette", 12 | "editor-status", 13 | "bookmarks", 14 | "markdown-importer", 15 | "word-count", 16 | "slides", 17 | "file-recovery" 18 | ] -------------------------------------------------------------------------------- /.obsidian/daily-notes.json: -------------------------------------------------------------------------------- 1 | { 2 | "folder": "journal" 3 | } -------------------------------------------------------------------------------- /.obsidian/graph.json: -------------------------------------------------------------------------------- 1 | { 2 | "collapse-filter": true, 3 | "search": "", 4 | "showTags": false, 5 | "showAttachments": false, 6 | "hideUnresolved": false, 7 | "showOrphans": true, 8 | "collapse-color-groups": true, 9 | "colorGroups": [], 10 | "collapse-display": true, 11 | "showArrow": false, 12 | "textFadeMultiplier": 0, 13 | "nodeSizeMultiplier": 1, 14 | "lineSizeMultiplier": 1, 15 | "collapse-forces": true, 16 | "centerStrength": 0.518713248970312, 17 | "repelStrength": 10, 18 | "linkStrength": 1, 19 | "linkDistance": 250, 20 | "scale": 1.000000000000005, 21 | "close": false 22 | } -------------------------------------------------------------------------------- /.obsidian/hotkeys.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor:toggle-fold": [ 3 | { 4 | "modifiers": [ 5 | "Alt" 6 | ], 7 | "key": "A" 8 | } 9 | ], 10 | "app:toggle-left-sidebar": [ 11 | { 12 | "modifiers": [ 13 | "Mod" 14 | ], 15 | "key": "N" 16 | } 17 | ], 18 | "file-explorer:new-file": [ 19 | { 20 | "modifiers": [ 21 | "Mod" 22 | ], 23 | "key": "E" 24 | } 25 | ], 26 | "markdown:toggle-preview": [ 27 | { 28 | "modifiers": [ 29 | "Mod" 30 | ], 31 | "key": "R" 32 | } 33 | ] 34 | } -------------------------------------------------------------------------------- /.obsidian/plugins/calendar/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "shouldConfirmBeforeCreate": true, 3 | "weekStart": "locale", 4 | "wordsPerDot": 250, 5 | "showWeeklyNote": false, 6 | "weeklyNoteFormat": "", 7 | "weeklyNoteTemplate": "", 8 | "weeklyNoteFolder": "", 9 | "localeOverride": "system-default" 10 | } -------------------------------------------------------------------------------- /.obsidian/plugins/calendar/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "calendar", 3 | "name": "Calendar", 4 | "description": "Calendar view of your daily notes", 5 | "version": "1.5.10", 6 | "author": "Liam Cain", 7 | "authorUrl": "https://github.com/liamcain/", 8 | "isDesktopOnly": false, 9 | "minAppVersion": "0.9.11" 10 | } 11 | -------------------------------------------------------------------------------- /.obsidian/plugins/dataview/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "renderNullAs": "\\-", 3 | "taskLinkLocation": "end", 4 | "taskLinkText": "🔗", 5 | "taskCompletionTracking": false, 6 | "taskCompletionText": "completion", 7 | "warnOnEmptyResult": false, 8 | "refreshEnabled": true, 9 | "refreshInterval": 250, 10 | "defaultDateFormat": "MMMM dd, yyyy", 11 | "defaultDateTimeFormat": "h:mm a - MMMM dd, yyyy", 12 | "maxRecursiveRenderDepth": 6, 13 | "tableIdColumnName": "详情", 14 | "tableGroupColumnName": "Group", 15 | "inlineQueryPrefix": "=", 16 | "inlineJsQueryPrefix": "$=", 17 | "enableDataviewJs": false, 18 | "enableInlineDataviewJs": false, 19 | "prettyRenderInlineFields": true, 20 | "schemaVersion": 1 21 | } -------------------------------------------------------------------------------- /.obsidian/plugins/dataview/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "dataview", 3 | "name": "Dataview", 4 | "version": "0.4.26", 5 | "minAppVersion": "0.13.11", 6 | "description": "Complex data views for the data-obsessed.", 7 | "author": "Michael Brenan ", 8 | "authorUrl": "https://github.com/blacksmithgu", 9 | "isDesktopOnly": false 10 | } 11 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-excalidraw-plugin/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "obsidian-excalidraw-plugin", 3 | "name": "Excalidraw", 4 | "version": "1.9.17", 5 | "minAppVersion": "1.1.6", 6 | "description": "An Obsidian plugin to edit and view Excalidraw drawings", 7 | "author": "Zsolt Viczian", 8 | "authorUrl": "https://zsolt.blog", 9 | "fundingUrl": "https://ko-fi.com/zsolt", 10 | "isDesktopOnly": false 11 | } 12 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "settings": { 3 | "migrated": true, 4 | "iconPacksPath": ".obsidian/plugins/obsidian-icon-folder/icons", 5 | "fontSize": 16, 6 | "emojiStyle": "native", 7 | "iconColor": null, 8 | "recentlyUsedIcons": [], 9 | "recentlyUsedIconsSize": 5, 10 | "rules": [], 11 | "extraMargin": { 12 | "top": 0, 13 | "right": 4, 14 | "bottom": 0, 15 | "left": 0 16 | }, 17 | "iconInTabsEnabled": true 18 | } 19 | } -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Adn.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Affiliatetheme.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Android.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Angular.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Apple.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Artstation.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Atlassian.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Audible.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Autoprefixer.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Avianex.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Bandcamp.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Bimobject.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Bitbucket.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/BlackTie.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Bluetooth.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/BluetoothB.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Buromobelexperte.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Buysellads.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Centercode.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Chrome.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Chromecast.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Cloudsmith.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Codiepie.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Contao.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/CreativeCommonsNd.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Css3.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Css3Alt.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Cuttlefish.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Dailymotion.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Dashcube.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Deezer.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Delicious.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Deviantart.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Diaspora.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Digg.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/DigitalOcean.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Discourse.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Dochub.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Dropbox.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Dyalog.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/EdgeLegacy.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Elementor.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Ello.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Envira.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Erlang.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Ethereum.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Facebook.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/FacebookF.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/FacebookMessenger.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/FacebookSquare.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Firstdraft.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Flickr.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Flipboard.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/FontAwesome.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Fulcrum.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/GetPocket.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Gg.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/GgCircle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/GitAlt.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Gitter.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Gofore.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Google.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/GoogleDrive.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/GooglePlay.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/GooglePlus.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/GooglePlusG.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/GooglePlusSquare.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Gratipay.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Guilded.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/HackerNews.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/HackerNewsSquare.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Hashnode.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Hotjar.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Houzz.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Html5.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Instalod.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Jira.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Kaggle.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Kickstarter.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/KickstarterK.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Korvue.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Linkedin.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/LinkedinIn.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Magento.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Markdown.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Maxcdn.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Medium.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Megaport.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Microsoft.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Mix.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Mixer.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Mizuni.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Modx.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Monero.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Neos.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Nimblr.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Npm.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Opencart.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Openid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Opera.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Orcid.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Pagelines.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Patreon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/PiedPiperSquare.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/ProductHunt.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Pushed.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Quinscape.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Quora.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/RedRiver.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Renren.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Resolving.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Rev.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Rockrms.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Servicestack.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Simplybuilt.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Sistrix.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Sitrox.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Sketch.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Sourcetree.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/SpeakerDeck.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/StackExchange.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/StackOverflow.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Strava.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/StripeS.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Studiovinari.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Stumbleupon.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Superpowers.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/TencentWeibo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/ThinkPeaks.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Tiktok.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Trello.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Tumblr.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/TumblrSquare.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Twitch.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Typo3.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Uber.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Uikit.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Unsplash.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Usps.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Viacoin.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Vimeo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/VimeoSquare.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/VimeoV.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Vine.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Vuejs.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Windows.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Wirsindhandwerk.svg: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Wpexplorer.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Xing.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/XingSquare.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/YCombinator.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Yahoo.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Yandex.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/YandexInternational.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Yoast.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/Youtube.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/icons/font-awesome-brands/YoutubeSquare.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-icon-folder/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "obsidian-icon-folder", 3 | "name": "Icon Folder", 4 | "version": "2.1.2", 5 | "minAppVersion": "0.9.12", 6 | "description": "This plugin allows to add an emoji or an icon to a folder or file.", 7 | "author": "Florian Woelki", 8 | "authorUrl": "https://florianwoelki.com/", 9 | "isDesktopOnly": false 10 | } 11 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-kanban/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "obsidian-kanban", 3 | "name": "Kanban", 4 | "version": "1.5.3", 5 | "minAppVersion": "1.0.0", 6 | "description": "Create markdown-backed Kanban boards in Obsidian.", 7 | "author": "mgmeyers", 8 | "authorUrl": "https://github.com/mgmeyers/obsidian-kanban", 9 | "isDesktopOnly": false 10 | } 11 | -------------------------------------------------------------------------------- /.obsidian/plugins/obsidian-style-settings/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "obsidian-style-settings", 3 | "name": "Style Settings", 4 | "version": "0.4.10", 5 | "minAppVersion": "0.11.5", 6 | "description": "Offers controls for adjusting theme, plugin, and snippet CSS variables.", 7 | "author": "mgmeyers", 8 | "authorUrl": "https://github.com/mgmeyers/obsidian-style-settings", 9 | "isDesktopOnly": false 10 | } 11 | -------------------------------------------------------------------------------- /.obsidian/plugins/table-editor-obsidian/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "formatType": "normal", 3 | "showRibbonIcon": true, 4 | "bindEnter": true, 5 | "bindTab": true 6 | } -------------------------------------------------------------------------------- /.obsidian/plugins/table-editor-obsidian/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "table-editor-obsidian", 3 | "name": "Advanced Tables", 4 | "author": "Tony Grosinger", 5 | "authorUrl": "https://grosinger.net", 6 | "description": "Improved table navigation, formatting, manipulation, and formulas", 7 | "isDesktopOnly": false, 8 | "minAppVersion": "0.13.8", 9 | "version": "0.17.3", 10 | "js": "main.js" 11 | } 12 | -------------------------------------------------------------------------------- /.obsidian/plugins/table-editor-obsidian/styles.css: -------------------------------------------------------------------------------- 1 | .HyperMD-table-row span.cm-inline-code { 2 | font-size: 100%; 3 | } 4 | 5 | .widget-icon { 6 | width: 20px; 7 | height: 20px; 8 | fill: var(--text-muted); 9 | } 10 | 11 | .widget-icon:hover { 12 | fill: var(--text-normal); 13 | } 14 | 15 | .advanced-tables-csv-export textarea { 16 | height: 200px; 17 | width: 100%; 18 | } 19 | 20 | .advanced-tables-donation { 21 | width: 70%; 22 | margin: 0 auto; 23 | text-align: center; 24 | } 25 | 26 | .advanced-tables-donate-button { 27 | margin: 10px; 28 | } 29 | -------------------------------------------------------------------------------- /.obsidian/plugins/templater-obsidian/data.json: -------------------------------------------------------------------------------- 1 | { 2 | "command_timeout": 5, 3 | "templates_folder": "项目管理/__template", 4 | "templates_pairs": [ 5 | [ 6 | "", 7 | "" 8 | ] 9 | ], 10 | "trigger_on_file_creation": false, 11 | "auto_jump_to_cursor": false, 12 | "enable_system_commands": false, 13 | "shell_path": "", 14 | "user_scripts_folder": "", 15 | "enable_folder_templates": true, 16 | "folder_templates": [ 17 | { 18 | "folder": "", 19 | "template": "" 20 | } 21 | ], 22 | "syntax_highlighting": true, 23 | "enabled_templates_hotkeys": [ 24 | "" 25 | ], 26 | "startup_templates": [ 27 | "" 28 | ] 29 | } -------------------------------------------------------------------------------- /.obsidian/plugins/templater-obsidian/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "id": "templater-obsidian", 3 | "name": "Templater", 4 | "version": "1.12.0", 5 | "description": "Create and use templates", 6 | "minAppVersion": "0.11.13", 7 | "author": "SilentVoid", 8 | "authorUrl": "https://github.com/SilentVoid13", 9 | "isDesktopOnly": false 10 | } 11 | -------------------------------------------------------------------------------- /.obsidian/themes/Border/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Border", 3 | "version": "1.3.17", 4 | "minAppVersion": "0.16.0", 5 | "author": "Akifyss", 6 | "authorUrl": "https://github.com/Akifyss" 7 | } 8 | -------------------------------------------------------------------------------- /.obsidian/themes/GitHub Theme/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "GitHub Theme", 3 | "version": "1.1.5", 4 | "minAppVersion": "1.0.0", 5 | "author": "@krios2146", 6 | "authorUrl": "https://github.com/krios2146" 7 | } 8 | -------------------------------------------------------------------------------- /.obsidian/themes/Minimal/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Minimal", 3 | "version": "7.1.2", 4 | "minAppVersion": "1.1.9", 5 | "author": "@kepano", 6 | "authorUrl": "https://twitter.com/kepano", 7 | "fundingUrl": "https://www.buymeacoffee.com/kepano" 8 | } 9 | -------------------------------------------------------------------------------- /.obsidian/themes/Terminal/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Terminal", 3 | "version": "1.0.5", 4 | "minAppVersion": "1.0.0", 5 | "author": "@Atlas", 6 | "authorUrl": "https://github.com/zcysxy" 7 | } 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # C++ 知识点总结 2 | 3 | ## What is it 4 | 5 | C++ 常见面试题总结。 6 | 7 | ## Contribute 8 | 9 | 在 [docs/](./docs/) 文件夹下新建 markdown 文档即可,文档名称应与讲述的主题强相关。如果有示例代码,可以添加到 [assets/source](./assets/source/)。 10 | 11 | ## Reference 12 | 13 | 1. [huihut/interview](https://github.com/huihut/interview) 14 | 2. [cppreference](https://en.cppreference.com/) 15 | -------------------------------------------------------------------------------- /assets/source/.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [**] 4 | charset = utf-8 5 | -------------------------------------------------------------------------------- /assets/source/.gitignore: -------------------------------------------------------------------------------- 1 | .vs 2 | *.sln 3 | *.vcxproj 4 | *.vcxproj.filters 5 | *.vcxproj.user 6 | **/Debug -------------------------------------------------------------------------------- /assets/source/.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "type": "lldb", 9 | "request": "launch", 10 | "name": "C/C++ Debug", 11 | "program": "${fileDirname}/bin/${fileBasenameNoExtension}", 12 | "args": [], 13 | "cwd": "${workspaceFolder}", 14 | "preLaunchTask": "C/C++: clang++ build active file" 15 | } 16 | ] 17 | } -------------------------------------------------------------------------------- /assets/source/a_stack.cc: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | using namespace std; 4 | 5 | struct ListNode { 6 | int val; 7 | ListNode *next; 8 | 9 | ListNode(int val) : val(val) {} 10 | }; 11 | 12 | struct MyStack { 13 | ListNode *top; 14 | int size; 15 | 16 | MyStack() : top(nullptr), size(0) {} 17 | 18 | bool Empty() { return top == nullptr; } 19 | 20 | int Pop() { 21 | if (top == nullptr) { 22 | cout << "Stack Underflow" << endl; 23 | } 24 | ListNode *temp = top; 25 | 26 | int val = top->val; 27 | top = top->next; 28 | 29 | delete temp; 30 | 31 | size--; 32 | return val; 33 | } 34 | 35 | void Push(int val) { 36 | ListNode *node = new ListNode(val); 37 | node->next = top; 38 | top = node; 39 | size++; 40 | } 41 | }; -------------------------------------------------------------------------------- /assets/source/assembler.c: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | int main() { 4 | printf("%s", "hello world!"); 5 | 6 | return 0; 7 | } 8 | -------------------------------------------------------------------------------- /assets/source/assert.cc: -------------------------------------------------------------------------------- 1 | #define NDEBUG 2 | #include 3 | 4 | int main() { assert(1 == 1); } 5 | -------------------------------------------------------------------------------- /assets/source/const.cc: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | int main() { 4 | const int a = 5; 5 | // a = 6; // error, const 变量不能改变 6 | 7 | int b = 2; 8 | const int *p = &b; 9 | // attention: const int = int const 10 | // *p = 2; // error, 指针指向的值是 const, 所以不能修改 11 | int *const p2 = &b; 12 | 13 | *p2 = 20; // right, 此时是 const 指针,表明指针是不可变的,但指向的变量可变 14 | 15 | int &c = b; 16 | std::cout << &c; 17 | // c = 2; // error, 引用的值是 const, 所以不能修改 18 | // int &const d = b; 19 | // d = 2; // 这里没有改变 d,所以没有问题,可以把引用看成一个不变的指针 20 | 21 | class Test { 22 | void test() const { 23 | // a = 2; // error, const 成员函数不能修改成员变量,其实就是不能修改 this 24 | // const int* this = object; 25 | } // 表示该函数不能修改成员变量 26 | 27 | int a; 28 | }; 29 | } 30 | -------------------------------------------------------------------------------- /assets/source/constexpr.cc: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | int main() { 5 | constexpr int a = 5; 6 | // a = 6; // error, const 变量不能改变 7 | 8 | constexpr int c = 10; 9 | std::array x; // okay 10 | 11 | int size; 12 | const int d = size; // okay 13 | // std::array y; // error 14 | 15 | const int e = 5; 16 | std::array y; // okay, e is a constant expression 17 | } 18 | -------------------------------------------------------------------------------- /assets/source/decltype.cc: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | 6 | const int &get_value(); 7 | 8 | int main() { 9 | decltype(get_value()) j = 2; 10 | std::cout << typeid(j).name() << '\n'; 11 | static_assert(std::is_same::value, "TYPE SHOULD BE THE SAME"); 12 | std::cout << j; 13 | } -------------------------------------------------------------------------------- /assets/source/ee.cc: -------------------------------------------------------------------------------- 1 | class A { 2 | void *virtual_table_ptr; 3 | 4 | virtual void f(); 5 | }; 6 | 7 | class D {}; -------------------------------------------------------------------------------- /assets/source/enum.cc: -------------------------------------------------------------------------------- 1 | // 限定作用域 2 | enum class open_modes { input, output, append }; 3 | 4 | // 不限定作用域 5 | enum color { red, yellow, green }; 6 | enum { floatPrec = 6 }; 7 | 8 | int main() { 9 | int a = red; // okay 10 | int c = floatPrec; // okay 11 | // int b = open_modes::input; // error 12 | } -------------------------------------------------------------------------------- /assets/source/example.cc: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | using namespace std; 4 | 5 | int partition(vector &data, int lo, int hi) { 6 | int temp = data[hi]; 7 | int index = lo; 8 | 9 | // 2, 3, 1 10 | for (int i = lo; i < hi; i++) { 11 | if (data[i] < temp) { 12 | swap(data[i], data[index++]); 13 | } 14 | } 15 | 16 | swap(data[hi], data[index]); 17 | 18 | return index; 19 | } 20 | 21 | void quick_sort(vector &data, int lo, int hi) { 22 | if (lo >= hi) 23 | return; 24 | int index = partition(data, lo, hi); 25 | 26 | quick_sort(data, lo, index - 1); 27 | quick_sort(data, index + 1, hi); 28 | } 29 | 30 | int main() { 31 | vector data = {2, 3, 1, 2}; 32 | quick_sort(data, 0, data.size() - 1); 33 | 34 | for (int item : data) 35 | cout << item << ' '; 36 | } -------------------------------------------------------------------------------- /assets/source/extern.cc: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | static int e = 4; 4 | 5 | int main() { 6 | extern int e; 7 | 8 | std::cout << e; 9 | 10 | return 0; 11 | } 12 | -------------------------------------------------------------------------------- /assets/source/extern_c.cc: -------------------------------------------------------------------------------- 1 | #include 2 | #ifdef __cplusplus 3 | 4 | extern "C" { 5 | #endif 6 | 7 | void *memset(void *, int, size_t); 8 | #ifdef __cplusplus 9 | } 10 | #endif 11 | 12 | int main() {} 13 | -------------------------------------------------------------------------------- /assets/source/friend_clz.cc: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | class FriendClass { 4 | private: 5 | int private_data; 6 | 7 | // this means Other is my friend, 8 | // please let him have access to my private memeber 9 | friend class Other; 10 | }; 11 | 12 | class Other { 13 | public: 14 | FriendClass clz; 15 | Other() { clz.private_data = 2; } 16 | 17 | void Print() { std::cout << "PRIVATE: " << clz.private_data; } 18 | 19 | void RetrieveData(); 20 | }; 21 | 22 | int main() { 23 | Other other; 24 | other.Print(); 25 | 26 | return 0; 27 | } -------------------------------------------------------------------------------- /assets/source/horizon/a.cc: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | using namespace std; 5 | 6 | int solve(vector &data) { 7 | int result = data[0]; 8 | for (int i = 1; i < data.size(); i++) { 9 | result ^= data[i]; 10 | } 11 | return result; 12 | } 13 | 14 | int main() { 15 | vector aa{1, 1, 2, 2, 3}; 16 | cout << solve(aa) << endl; 17 | } -------------------------------------------------------------------------------- /assets/source/horizon/b.cc: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | static int count = 0; 5 | 6 | struct A { 7 | string ss; 8 | A() { cout << "CONSTRUCTOR:: " << __LINE__ << '\n'; } 9 | A(const A &a) : ss(a.ss) { 10 | cout << "COPY CONSTRUCTOR:: " << __LINE__ << '\n'; 11 | } 12 | ~A() { cout << "DESTRUCTOR:: " << __LINE__ << '\n'; } 13 | }; 14 | 15 | A test() { 16 | A a; // CON 17 | return a; // COPY 18 | } // DES 19 | 20 | int main() { 21 | A b = test(); // CON 22 | 23 | cout << "This is a test" << '\n'; 24 | return 0; 25 | } // DES -------------------------------------------------------------------------------- /assets/source/inline.cc: -------------------------------------------------------------------------------- 1 | #include 2 | using namespace std; 3 | 4 | class Base { 5 | public: 6 | inline virtual void who() { cout << "I am Base\n"; } 7 | virtual ~Base() {} 8 | }; 9 | class Derived : public Base { 10 | public: 11 | inline void who() // 不写inline时隐式内联 12 | { 13 | cout << "I am Derived\n"; 14 | } 15 | }; 16 | 17 | int main() { 18 | // 此处的虚函数 19 | // who(),是通过类(Base)的具体对象(b)来调用的,编译期间就能确定了,所以它可以是内联的,但最终是否内联取决于编译器。 20 | Base b; 21 | b.who(); 22 | 23 | // 此处的虚函数是通过指针调用的,呈现多态性,需要在运行时期间才能确定,所以不能为内联。 24 | Base *ptr = new Derived(); 25 | ptr->who(); 26 | 27 | // 因为Base有虚析构函数(virtual ~Base() {}),所以 delete 28 | // 时,会先调用派生类(Derived)析构函数,再调用基类(Base)析构函数,防止内存泄漏。 29 | delete ptr; 30 | ptr = nullptr; 31 | 32 | return 0; 33 | } 34 | -------------------------------------------------------------------------------- /assets/source/lambda.cc: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | void ForEach(std::vector& values, const std::function func) { 6 | for (int& value : values) { 7 | func(value); 8 | } 9 | } 10 | 11 | int main() { 12 | std::vector values = {1, 2, 3, 4, 5}; 13 | int a = 2; 14 | ForEach(values, [&](int& val) { val += a; }); 15 | 16 | for (int value : values) { 17 | std::cout << value << ' '; 18 | } 19 | std::cin.get(); 20 | } -------------------------------------------------------------------------------- /assets/source/malloc_brk.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | int main() { 6 | printf("使用cat /proc/%d/maps查看内存分配\n", getpid()); 7 | 8 | // 申请1字节的内存 9 | void *addr = malloc(1); 10 | printf("此1字节的内存起始地址:%x\n", addr); 11 | printf("使用cat /proc/%d/maps查看内存分配\n", getpid()); 12 | 13 | // 将程序阻塞,当输入任意字符时才往下执行 14 | getchar(); 15 | 16 | // 释放内存 17 | free(addr); 18 | printf("释放了1字节的内存,但heap堆并不会释放\n"); 19 | 20 | getchar(); 21 | return 0; 22 | } -------------------------------------------------------------------------------- /assets/source/malloc_mmap.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | int main() { 6 | // 申请1字节的内存 7 | void *addr = malloc(256 * 1024); 8 | printf("此256KB字节的内存起始地址:%x\n", addr); 9 | printf("使用cat /proc/%d/maps查看内存分配\n", getpid()); 10 | 11 | // 将程序阻塞,当输入任意字符时才往下执行 12 | getchar(); 13 | 14 | // 释放内存 15 | free(addr); 16 | printf("释放了256KB字节的内存,内存也归还给了操作系统\n"); 17 | 18 | getchar(); 19 | return 0; 20 | } -------------------------------------------------------------------------------- /assets/source/mutable.cc: -------------------------------------------------------------------------------- 1 | class Mutable { 2 | mutable int x; 3 | int y; 4 | 5 | void ConstMethod() const { 6 | x = 2; 7 | } 8 | }; 9 | -------------------------------------------------------------------------------- /assets/source/new.cc: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | int main() { 4 | int *a = new int(); 5 | std::cout << *a << '\n'; 6 | } 7 | -------------------------------------------------------------------------------- /assets/source/oop_in_cpp.cc: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | class Fruit { 4 | public: 5 | void setPrice(float new_price) { price = new_price; } 6 | 7 | virtual void poly() { std::cout << "Fruit" << '\n'; } 8 | 9 | private: 10 | float price; 11 | }; 12 | 13 | // derived class 14 | class Durian : public Fruit { 15 | private: 16 | bool thorns = true; 17 | 18 | public: 19 | void poly() override { std::cout << "Durian" << '\n'; } 20 | }; 21 | 22 | int main() { 23 | Fruit *dr = new Durian(); 24 | dr->poly(); 25 | 26 | delete dr; 27 | } -------------------------------------------------------------------------------- /assets/source/operator_overloading.cc: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | class Test { 5 | public: 6 | std::ostream &operator<<(std::ostream &os) { 7 | os << "TEST" << '\n'; 8 | return os; 9 | } 10 | }; 11 | 12 | int main() { 13 | Test t; 14 | t << std::cout; 15 | } -------------------------------------------------------------------------------- /assets/source/process.cc: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | int main() { int epoll_instance = epoll_create(0); } 5 | -------------------------------------------------------------------------------- /assets/source/push_back.cc: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | using namespace std; 5 | 6 | class A { 7 | public: 8 | explicit A(int i) { cout << "normal constructor" << endl; } 9 | ~A() {} 10 | A(const A &other) { cout << "copy constructor" << endl; } 11 | A(A &&other) { cout << "move construtor" << endl; } 12 | }; 13 | 14 | void a(A &&a) {} 15 | 16 | int main() { 17 | vector vec; 18 | vec.reserve(2); 19 | A v(1); 20 | // a(v); 21 | a(std::move(v)); 22 | vec.push_back(std::move(v)); // 调用了10次构造函数和10次拷贝构造函数, 23 | vec.emplace_back(1); // 调用了10次构造函数一次拷贝构造函数都没有调用过 24 | } -------------------------------------------------------------------------------- /assets/source/reactor.cc: -------------------------------------------------------------------------------- 1 | struct Reactor { 2 | 3 | }; 4 | 5 | struct Acceptor {}; 6 | 7 | struct Handler {}; -------------------------------------------------------------------------------- /assets/source/region_operator.cc: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | int count = 11; // 全局(::)的 count 4 | 5 | class A { 6 | public: 7 | static int count; // 类 A 的 count(A::count) 8 | }; 9 | int A::count = 21; 10 | 11 | void fun() { 12 | int count = 31; // 初始化局部的 count 为 31 13 | count = 32; // 设置局部的 count 的值为 32 14 | std::cout << count << '\n'; 15 | } 16 | 17 | int main() { 18 | ::count = 12; // 测试 1:设置全局的 count 的值为 12 19 | std::cout << ::count << '\n'; 20 | 21 | A::count = 22; // 测试 2:设置类 A 的 count 为 22 22 | std::cout << A::count << '\n'; 23 | 24 | fun(); // 测试 3 25 | 26 | return 0; 27 | } -------------------------------------------------------------------------------- /assets/source/shared_ptr_example.cc: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | struct Yolk {}; 5 | struct White {}; 6 | struct Egg { 7 | White w; 8 | Yolk y; 9 | }; 10 | int main() { 11 | auto ep = std::shared_ptr(new Egg()); 12 | 13 | // Aliasing constructor to construct shared_ptr 14 | // yp shares ownership with ep but points to subobject ep->y 15 | auto yp = std::shared_ptr(ep, &ep->y); 16 | 17 | std::cout << ep.use_count(); 18 | } -------------------------------------------------------------------------------- /assets/source/sizeof.cc: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | using namespace std; 5 | 6 | extern "C" { 7 | int function_in_c_lib(); 8 | } 9 | 10 | struct alignas(16) MyStruct {}; 11 | 12 | int main() { 13 | int a = 3; 14 | cout << sizeof(a) << '\n'; // return sizeof integer, 4 15 | 16 | int *b = &a; 17 | cout << sizeof(b) << '\n'; // return sizeof pointer, 8 18 | 19 | int n[] = {1, 2, 3, 4}; 20 | cout << sizeof(n) << '\n'; // return size of array, 16 21 | 22 | int *p = n; 23 | cout << sizeof(p) << '\n'; // return sizeof pointer, 8 24 | 25 | string ss = "1234"; 26 | cout << sizeof(ss) << '\n'; // return sizeof string pointer, 32 27 | } 28 | -------------------------------------------------------------------------------- /assets/source/static.cc: -------------------------------------------------------------------------------- 1 | namespace { 2 | void PRIVATE() {} 3 | } // namespace 4 | 5 | static void PrivateFunc() {} 6 | 7 | class StaticUsage { 8 | public: 9 | static int a; // 类数据变量 10 | 11 | static void ClassFunc() { 12 | // 类函数 13 | PrivateFunc(); 14 | PRIVATE(); 15 | } 16 | int A(); // declaration 17 | }; 18 | 19 | // definition 20 | inline int StaticUsage::A() { return 0; } 21 | 22 | int main() { 23 | static int a; // 变量存储区域为静态区 24 | StaticUsage::ClassFunc(); 25 | } 26 | -------------------------------------------------------------------------------- /assets/source/template.cc: -------------------------------------------------------------------------------- 1 | template class A { 2 | T1 data1; 3 | T2 data2; 4 | }; 5 | 6 | template T max(const T lhs, const T rhs) { 7 | return lhs > rhs ? lhs : rhs; 8 | } 9 | 10 | // 全特化 11 | template <> class A { 12 | int data1; 13 | double data2; 14 | }; 15 | 16 | template <> int max(const int lhs, const int rhs) { 17 | return lhs > rhs ? lhs : rhs; 18 | } 19 | 20 | // 偏特化 21 | template class A { 22 | int data1; 23 | T2 data2; 24 | }; 25 | 26 | // 函数不支持偏特化,可以使用函数重载替代偏特化的需求 -------------------------------------------------------------------------------- /assets/source/test.cc: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | using namespace std; 9 | 10 | int main() { 11 | int * a = new int(2); 12 | return 0; 13 | } 14 | -------------------------------------------------------------------------------- /assets/source/test_thread_pool.cc: -------------------------------------------------------------------------------- 1 | #include "thread_pool.h" 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | ThreadPool tp(8); 8 | 9 | int main() { 10 | 11 | auto square = [](const uint64_t x) -> uint64_t { return x * x; }; 12 | 13 | const uint64_t num_tasks = 32; 14 | std::vector> futures; 15 | 16 | for (uint64_t task = 0; task < num_tasks; task++) { 17 | auto future = tp.Enqueue(square, task + 1); 18 | futures.emplace_back(std::move(future)); 19 | } 20 | 21 | for (auto &future : futures) { 22 | std::cout << future.get() << std::endl; 23 | } 24 | std::queue q; 25 | std::stack s; 26 | } -------------------------------------------------------------------------------- /assets/source/volatile.cc: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | volatile bool sigarrived = false; 5 | 6 | void handler(int sig) { 7 | if (sig == SIGINT) { 8 | sigarrived = true; 9 | } 10 | } 11 | 12 | int main() { 13 | printf("Waiting. Press Ctrl-C to move on. \n"); 14 | signal(SIGINT, handler); 15 | while (!sigarrived) { 16 | } 17 | printf("Ok. Moving on.\n"); 18 | return 0; 19 | } -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [require.resolve('@docusaurus/core/lib/babel/preset')], 3 | }; 4 | -------------------------------------------------------------------------------- /docs/Linux/2. Linux文件系统.md: -------------------------------------------------------------------------------- 1 | # Linux 文件系统讨论 2 | 3 | Everything in Linux is a FILE. 4 | 5 | 1. `bin`: 可执行文件,可以被一般用户或 root 用户使用,启动时会用到的命令 6 | 2. `sbin`: 可执行文件,只限管理员使用,启动时会用到的命令 7 | 3. `usr`(Unix software Resource): 8 | 1. `bin`: 放置用户可以使用的命令,启动时不会用到的也会放在这里 9 | 2. `sbin`: 非系统正常运行所需要的系统命令 10 | 3. `local`: 用户自己创建的可执行文件 11 | 4. `include`: C/C++ 等程序语言的头文件 12 | 5. `lib`: 各应用软件的函数库 13 | 4. `boot`: 开机需要的文件,包括 Linux 内核文件以及开机菜单与开机所需配置文件等 14 | 5. `var`: 存储日志、数据相关文件,MySQL 数据可以存在这里 15 | 6. `tmp`: 放置临时文件 16 | 7. `lib`: 共享的库文件,开机时会用到的函数库 17 | 8. `home`: 所有用户在这里有一个属于自己的子文件夹 18 | 9. `dev`: 设备相关文件,比如硬盘 19 | 10. `etc`: 系统配置文件存储在这里,各种软件的配置文件 20 | 11. `mnt`: 挂载硬盘,比如 usb 21 | 12. `media`: 用户手动挂载的硬盘,放置可删除的设备 22 | 13. `opt`: 第三方软件,和 `/usr/local` 作用相似 23 | -------------------------------------------------------------------------------- /docs/Linux/4. Linux Crash Course.md: -------------------------------------------------------------------------------- 1 | # Linux Operating System 2 | -------------------------------------------------------------------------------- /docs/Linux/5. 管道,消息队列,共享内存,信号.md: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /docs/Linux/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | sidebar_position: 8 3 | --- 4 | 5 | # Linux 6 | -------------------------------------------------------------------------------- /docs/cpp/1. const.md: -------------------------------------------------------------------------------- 1 | # const 2 | 3 | ```cpp 4 | int main() { 5 | const int a = 5; 6 | // a = 6; // error, const 变量不能改变 7 | 8 | int b = 2; 9 | const int *p = &b; 10 | // attention: const int = int const 11 | // *p = 2; // error, 指针指向的值是 const, 所以不能修改 12 | int *const p2 = &b; 13 | 14 | *p2 = 20; // right, 此时是 const 指针,表明指针是不可变的,但指向的变量可变 15 | 16 | const int &c = b; 17 | // c = 2; // error, 引用的值是 const, 所以不能修改 18 | // int &const d = b; // error, const 不能直接修饰引用变量 19 | // d = 2; 20 | 21 | class Test { 22 | void test() const { 23 | // a = 2; // error, const 成员函数不能修改成员变量,其实就是不能修改 this 24 | // const int* this = object; 25 | } // 表示该函数不能修改成员变量 26 | 27 | int a; 28 | }; 29 | } 30 | ``` 31 | -------------------------------------------------------------------------------- /docs/cpp/10. extern_c.md: -------------------------------------------------------------------------------- 1 | # extern "C" 2 | 3 | 目的:让 C++ 编译器将 extern "C" 的声明的代码当作 C 语言代码处理,可以避免 C++ 因符号修饰导致代码不能和 C 语言库中的符号进行链接的问题。 4 | 5 | 具体来说,C++ 中函数可以重载,因此在处理函数时,会首先对函数名进行修改,但是 C 语言中不具有重载机制,因此 C 语言的编译器不会修改函数名,所以如果我们想要使用 C 语言的接口,就需要使用 extern C,否则会出现未定义的问题。 6 | 7 | > C compiler does not use mangling while c++'s does. So if you want to call a c interface from a c++ program, you have to clearly declared that the c interface as "extern c". 8 | -------------------------------------------------------------------------------- /docs/cpp/11. struct_and_typedef_struct.md: -------------------------------------------------------------------------------- 1 | # struct and typedef struct 2 | 3 | C 语言中: 4 | 5 | ```c 6 | typedef struct Student { 7 | int age; 8 | } S; 9 | 10 | // ==> 11 | 12 | struct Student { 13 | int age; 14 | }; 15 | 16 | typedef struct Student S; 17 | ``` 18 | 19 | 而在 C++ 中,不需要使用 typedef,可以使用 `struct Student` 或者 `Student`。 20 | 21 | 若定义了与 `Student` 同名的函数,则 `Student` 只代表函数,不代表结构体。 22 | 23 | ```cpp 24 | typedef struct Student { 25 | int age; 26 | } S; 27 | 28 | void Student() {} // 正确,定义后 "Student" 只代表此函数 29 | 30 | //void S() {} // 错误,符号 "S" 已经被定义为一个 "struct Student" 的别名 31 | 32 | int main() { 33 | Student(); 34 | struct Student me; // 或者 "S me"; 35 | return 0; 36 | } 37 | ``` 38 | 39 | Weird, I'd better never know or use it. 40 | -------------------------------------------------------------------------------- /docs/cpp/12. struct_vs_class.md: -------------------------------------------------------------------------------- 1 | # struct Vs class 2 | 3 | struct 主要用于数据的结合,class 作为 OOP 的原子。 4 | 5 | struct 默认访问权限是 public, class 默认是 private。 6 | 7 | I prefer struct. 8 | 9 | 若没有设定对齐字节数,则最大成员为对齐字节数。 10 | 11 | 若有设定对齐字节数,则对齐字节数为 `min(最大成员,设定的对齐字节数)`。 12 | 13 | 设定对齐字节数为 16: 14 | 15 | ```cpp 16 | struct alignas(16) MyStruct {}; 17 | ``` 18 | -------------------------------------------------------------------------------- /docs/cpp/13. union.md: -------------------------------------------------------------------------------- 1 | # union 2 | 3 | 1. 默认访问控制符为 public 4 | 2. 不能含有引用类型的成员 5 | 3. 不能继承自其他类,不能作为基类 6 | 4. 不能含有虚函数 7 | 5. 匿名 union 在定义所在作用域可直接访问 union 成员 8 | 6. 匿名 union 不能包含 protected 或 private 成员 9 | 7. 全局匿名联合必须是静态的 10 | -------------------------------------------------------------------------------- /docs/cpp/14. 复杂声明.md: -------------------------------------------------------------------------------- 1 | # 复杂声明 2 | 3 | ```cpp 4 | int *(*x[10])(void); 5 | ``` 6 | 7 | 规则: 8 | 9 | 1. 始终从内往外读声明符号,即从 `x` 开始读 10 | 2. 在作选择时,始终先是 `[]` 和 `()` 再是 `*`,`int *x[10]` 表示具有 10 个指向 int 的指针的数组。 11 | -------------------------------------------------------------------------------- /docs/cpp/16. 运算符重载.md: -------------------------------------------------------------------------------- 1 | # 运算符重载 2 | 3 | ## bool() 4 | 5 | ```cpp 6 | struct A { 7 | operator bool() const { return true; } 8 | }; 9 | ``` 10 | 11 | > `operator TypeName()` are conversion operators. Thet allow objects of the class type to be used as if they were of type `TypeName` and when they are, they are converted to `TypeName` using this conversion function. 12 | > From 13 | 14 | 因此,这个运算符重载函数能够将 A 对象转换为 `bool`。 15 | 16 | ## 不可以使用友元函数重载的运算符 17 | 18 | `=`, `()`, `[]`, `->` 不可以使用友元函数重载。 19 | 20 | 一个理由是这些运算符的重载函数会被自动生成。 21 | -------------------------------------------------------------------------------- /docs/cpp/2. constexpr.md: -------------------------------------------------------------------------------- 1 | # constexpr 2 | 3 | ```cpp 4 | #include 5 | #include 6 | 7 | int main() { 8 | constexpr int a = 5; 9 | // a = 6; // error, const 变量不能改变 10 | 11 | constexpr int c = 10; 12 | std::array x; // okay 13 | 14 | int size; 15 | const int d = size; // okay 16 | // std::array y; // error 17 | 18 | const int e = 5; 19 | std::array y; // okay, e is a constant expression 20 | } 21 | ``` 22 | 23 | :::note 24 | const 和 constexpr 的最大区别是:constexpr 必须在编译期初始化,而 const 可以在编译期初始化,也可以在运行期初始化。 25 | ::: 26 | 27 | :::note 28 | const 和 constexpr 都存在类型安全检查,需要分配内存,存储在数据段,而 #define 无类型安全检查,不分配内存,存储在代码段,定义常量时,可以选择 constexpr 或 #define,不过 const 和 constexpr 无法完全取代 #define。 29 | 30 | 预处理指令,如头文件保护,还是需要 #define. 31 | ::: 32 | -------------------------------------------------------------------------------- /docs/cpp/20. using.md: -------------------------------------------------------------------------------- 1 | # using 2 | 3 | ```cpp 4 | using namespace_name::name; 5 | ``` 6 | 7 | 称为 **using 声明**,该语句一次只引入命名空间的一个成员。 8 | 9 | ```cpp 10 | using namespace_name name; 11 | ``` 12 | 13 | 称为 **using 指示**,该语句使得某个特定命名空间中所有名字都可见。 14 | 15 | ```cpp 16 | using A = int; 17 | ``` 18 | 19 | 类似于 typedef,此时 `A` 为 `int` 类型。 20 | -------------------------------------------------------------------------------- /docs/cpp/21. region_operator.md: -------------------------------------------------------------------------------- 1 | # :: 范围解析运算符 2 | 3 | ```cpp 4 | #include 5 | 6 | int count = 11; // 全局(::)的 count 7 | 8 | class A { 9 | public: 10 | static int count; // 类 A 的 count(A::count) 11 | }; 12 | int A::count = 21; 13 | 14 | void fun() { 15 | int count = 31; // 初始化局部的 count 为 31 16 | count = 32; // 设置局部的 count 的值为 32 17 | std::cout << count << '\n'; 18 | } 19 | 20 | int main() { 21 | ::count = 12; // 测试 1:设置全局的 count 的值为 12 22 | std::cout << ::count << '\n'; 23 | 24 | A::count = 22; // 测试 2:设置类 A 的 count 为 22 25 | std::cout << A::count << '\n'; 26 | 27 | fun(); // 测试 3 28 | 29 | return 0; 30 | } 31 | ``` 32 | 33 | Result: 34 | 35 | ```sh 36 | 12 37 | 22 38 | 32 39 | ``` -------------------------------------------------------------------------------- /docs/cpp/22. enum.md: -------------------------------------------------------------------------------- 1 | # enum 2 | 3 | ```cpp 4 | // 限定作用域 5 | enum class open_modes { input, output, append }; 6 | 7 | // 不限定作用域 8 | enum color { red, yellow, green }; 9 | enum { floatPrec = 6 }; 10 | 11 | int main() { 12 | int a = red; // okay 13 | int c = floatPrec; // okay 14 | // int b = open_modes::input; // error 15 | } 16 | ``` 17 | -------------------------------------------------------------------------------- /docs/cpp/23. decltype.md: -------------------------------------------------------------------------------- 1 | # decltype 2 | 3 | :::note 4 | Since C++ 11 5 | ::: 6 | 7 | ```cpp 8 | const int &get_value(); 9 | 10 | int main() { 11 | decltype(get_value()) j = 2; 12 | static_assert(std::is_same::value, "TYPE SHOULD BE THE SAME"); 13 | std::cout << j; 14 | } 15 | ``` 16 | 17 | `decltype(get_value()) j = 2;` 中,get_value 不会执行,而是通过编译器分析,以获得 `get_value` 函数的返回值的类型,从而声明 j 的类型。 18 | -------------------------------------------------------------------------------- /docs/cpp/24. 左值引用和右值引用.md: -------------------------------------------------------------------------------- 1 | # 左值引用和右值引用 2 | 3 | 4 | 5 | ## prvalue, xvalue, rvalue, lvalue, glvalue 6 | 7 | 1. rvalue: 处在右边的值,临时变量罢了 8 | 1. 如 1, "123", A(1), etc 9 | 2. 包括 prvalue 和 部分 xvalue 10 | 2. lvalue: 处在左边的值,具有地址的值 11 | 1. 如 `int x = 2` 中的 x 12 | 2. 如 `int &a = x` 中的 a 13 | 3. xvalue: 将亡值 14 | 1. `int&& a = func()`: 此时 a 是 glvalue 15 | 2. `func(std::move(b))`: 此时 `std::move(b)` 是 rvalue 16 | 4. glvalue: lvalue or xvalue 17 | 5. prvalue: 是 rvalue 但不是 xvalue 18 | -------------------------------------------------------------------------------- /docs/cpp/27. 类型转换.md: -------------------------------------------------------------------------------- 1 | # 类型转换 2 | 3 | ## static_cast 4 | 5 | 1. 非多态类型的转换 6 | 2. 不执行运行时类型检查 7 | 8 | ## dynamic_cast 9 | 10 | 1. 多态类型的转换 11 | 2. 执行运行时类型检查 12 | 3. 适用于指针或引用 13 | 14 | ## const_cast 15 | 16 | const 擦除。 17 | 18 | ## bad_cast 19 | 20 | 当 dynamic_cast 失败时,会抛出 `bad_cast` 异常。 21 | -------------------------------------------------------------------------------- /docs/cpp/29. enum变量初始化.md: -------------------------------------------------------------------------------- 1 | # enum 变量初始化 2 | 3 | ```cpp 4 | enum string { 5 | x1, x2, x3=10, x4, x5, 6 | } x; 7 | 8 | int main(){ 9 | enum string { 10 | x1, x2, x3=10, x4, x5, 11 | } x2; 12 | } 13 | ``` 14 | 15 | x 会自动初始化为 0,x2 不会初始化,所以是随机值。 16 | 17 | 这与内置类型相同,如果在函数外部,即全局变量时,会初始化,函数内部即局部变量时则不会进行初始化。 18 | -------------------------------------------------------------------------------- /docs/cpp/3. mutable.md: -------------------------------------------------------------------------------- 1 | # mutable 2 | 3 | :::info 4 | 5 | ::: 6 | 7 | 即使在 `const` 成员函数中,声明为 `mutable` 的成员变量仍然可以被修改。 8 | 9 | ```cpp 10 | class Mutable { 11 | mutable int x; 12 | int y; 13 | 14 | void ConstMethod() const { 15 | x = 2; 16 | } 17 | }; 18 | ``` 19 | -------------------------------------------------------------------------------- /docs/cpp/30. 浅拷贝 vs 深拷贝.md: -------------------------------------------------------------------------------- 1 | # 浅拷贝 和 深拷贝 2 | 3 | 浅拷贝指的是 -------------------------------------------------------------------------------- /docs/cpp/31. new and delete.md: -------------------------------------------------------------------------------- 1 | # new and delete 2 | 3 | ## new 4 | 5 | 1. 在堆空间分配内存 6 | 2. 调用类的构造函数构造对象的内容 7 | 8 | ## delete 9 | 10 | 1. 调用类的析构函数 11 | 2. 回收内存 12 | -------------------------------------------------------------------------------- /docs/cpp/33. LAMBDA 表达式.md: -------------------------------------------------------------------------------- 1 | # Lambda 表达式 2 | 3 | 定义一个匿名函数,常应用于回调函数。 4 | 5 | ```cpp 6 | void ForEach(std::vector& values, void (*func)(int&)) { 7 | for (int& value : values) { 8 | func(value); 9 | } 10 | } 11 | 12 | int main() { 13 | std::vector values = {1, 2, 3, 4, 5}; 14 | ForEach(values, [](int& val) { val++; }); 15 | 16 | for (int value : values) { 17 | std::cout << value << ' '; 18 | } 19 | std::cin.get(); 20 | } 21 | ``` 22 | 23 | `[]` 指 capture list 24 | 25 | - `=`: 按值传递,把用到的所有数据按值传递 26 | - `&`: 按引用传递,把用到的所有数据按引用传递 27 | - `item`: 按值传递 item 28 | - `&item`: 按引用传递 item 29 | 30 | > Learn more from 31 | -------------------------------------------------------------------------------- /docs/cpp/34. C++ 17 新特性.md: -------------------------------------------------------------------------------- 1 | # C++ 17 新特性 2 | 3 | ## std::variant 4 | 5 | better union 6 | -------------------------------------------------------------------------------- /docs/cpp/37. llvm.md: -------------------------------------------------------------------------------- 1 | # LLVM 2 | 3 | IR -- intermediate representation 4 | 5 | LLVM 是编译器架构,将编译器的“前端”和“后端”进行分离,“前端”负责 AST 的生成,“后端”负责将 AST 转化为机器代码。 6 | 7 | “前端”部分由用户完成。 8 | 9 | “后端”部分由 LLVM 完成,用户需要编写从 AST 到 IR 的代码,而从 IR 到机器代码则是由 LLVM 自动生成。 10 | 11 | ## LLVM 架构下的编译器开发 12 | 13 | SOURCE CODE -> IR Code -> Native Machine Code 14 | 15 | 这真的很像 JVM,毕竟目前 JVM 也有 JIT 了。 16 | 17 | ## Clang 18 | 19 | clang 就是使用 LLVM 架构开发的 C/C++/Objective-C 的编译器。 20 | 21 | ## LLDB 22 | 23 | LLDB 是基于 LLVM 和 Clang 的调试器。 24 | 25 | ## LLD 26 | 27 | 另一个 linker. 28 | 29 | > 30 | -------------------------------------------------------------------------------- /docs/cpp/39. placement new.md: -------------------------------------------------------------------------------- 1 | # Placement new 2 | 3 | 用于在已分配的内存中创建一个对象。 4 | 5 | -------------------------------------------------------------------------------- /docs/cpp/41. 构造函数和析构函数.md: -------------------------------------------------------------------------------- 1 | # 构造函数和析构函数 2 | -------------------------------------------------------------------------------- /docs/cpp/44. 引用.md: -------------------------------------------------------------------------------- 1 | # 引用 2 | 3 | 声明引用时必须进行初始化。 4 | 5 | ## 引用折叠规则 6 | 7 | - 左值-左值 T& & 8 | - 左值-右值 T& && 9 | - 右值-左值 T&& & 10 | - 右值-右值 T&& && 11 | 12 | 如果任一引用为左值引用,则结果为左值引用,否则,结果为右值引用。 13 | -------------------------------------------------------------------------------- /docs/cpp/48. Move 语义.md: -------------------------------------------------------------------------------- 1 | # Move 语义 2 | 3 | ![Move 语义](./images/2023-03-09-16-02-19.png) 4 | 5 | 默认情况下,`push_back` 使用 copy 构造器。 6 | 7 | 所以这时我们应该使用 `push_back(std::move(s))` 8 | 9 | 对于 `push_back(getData())`,由于 getData 返回的是一个临时变量,也就是右值,所以这里不会拷贝。 10 | 11 | `std::move` says I no longer need this value here. It's just a mark! 12 | 13 | ![unnecessary copies in C++98/C++03](./images/2023-03-09-17-07-42.png) 14 | 15 | ![move constructor will be disabled](./images/2023-03-09-19-54-03.png) 16 | 17 | ![move constructor will also be disabled](./images/2023-03-09-19-57-57.png) 18 | 19 | ![perfect forwarding](./images/2023-03-09-20-15-04.png) 20 | 21 | ![two meanings of && declarations](./images/2023-03-09-20-17-16.png) 22 | -------------------------------------------------------------------------------- /docs/cpp/49. 动态链接库 vs 静态链接库.md: -------------------------------------------------------------------------------- 1 | # 动态库 vs 静态库 2 | 3 | 1. 静态库满足自足特性,在**编译时**与可执行文件一同编译,所以相应的可执行文件会很大 4 | 2. 动态库,在**运行时**由操作系统负责加载,编译可执行文件,并不会包含该动态库,所以相应的可执行文件相对较小 5 | -------------------------------------------------------------------------------- /docs/cpp/5. this.md: -------------------------------------------------------------------------------- 1 | # this 指针 2 | 3 | 1. 成员函数中,隐含着该指针,相当于 python 中的 self 变量 4 | 2. 调用成员函数时,编译器会先将对象的地址赋给 `this` 指针,在成员函数内部,存取数据时,都会隐式使用 `this` 指针 5 | 3. this 指针默认为 const 指针,即 `ClassName* const`,所以不能修改 this 指针的值,在 const 成员函数中,this 指针的类型是 `const ClassName* const`,所以不能修改 this 指针指向的对象(例外:可以修改声明为 mutable 的数据成员,see [mutable](./3.%20mutable.md)) 6 | 4. this 是一个常量右值指针 7 | -------------------------------------------------------------------------------- /docs/cpp/8. assert.md: -------------------------------------------------------------------------------- 1 | # assert() 2 | 3 | 断言,用于调试,可以使用 `#define NDEBUG` 关闭 4 | -------------------------------------------------------------------------------- /docs/cpp/9. sizeof.md: -------------------------------------------------------------------------------- 1 | # sizeof 2 | 3 | ```cpp 4 | #include 5 | #include 6 | 7 | using namespace std; 8 | 9 | int main() { 10 | int a = 3; 11 | cout << sizeof(a) << '\n'; // return sizeof integer, 4 12 | 13 | int *b = &a; 14 | cout << sizeof(b) << '\n'; // return sizeof pointer, 8 15 | 16 | int n[] = {1, 2, 3, 4}; 17 | cout << sizeof(n) << '\n'; // return size of array, 16 18 | 19 | int *p = n; 20 | cout << sizeof(p) << '\n'; // return sizeof pointer, 8 21 | 22 | string ss = "1"; 23 | cout << sizeof(ss) << '\n'; // return sizeof string pointer, 32 24 | } 25 | ``` 26 | 27 | ## string 的 sizeof 问题 28 | 29 | 实现字符串数据结构时,底层通常包括: 30 | 31 | 1. 一个指向字符串数据的指针(通常是 char 类型) 32 | 2. 一个指向分配的内存块的指针(通常是 void 类型),用于管理字符串的内存分配 33 | 3. 一个整数,用于表示字符串的大小或容量 34 | -------------------------------------------------------------------------------- /docs/cpp/Effective C++/1. 视C++为一个语言联邦.md: -------------------------------------------------------------------------------- 1 | # 条款 01: 视 C++ 为一个语言联邦 2 | 3 | 1. C 语言, pass by value 4 | 2. Object-Oriented C++,C++ 中的面向对象, pass by reference to const 5 | 3. Template C++, 泛型编程,模板元编程, pass by reference to const 6 | 4. STL,基于容器、迭代器、算法、函数对象的紧密配合, pass by value 7 | 8 | C++ 并不是一个带有一组守则的一体语言,它是从四个次语言组成的联邦,每个次语言都有自己的规约。 9 | 10 | -------------------------------------------------------------------------------- /docs/cpp/Effective C++/4. 确保对象被使用前已先被初始化.md: -------------------------------------------------------------------------------- 1 | # 条款 04: 确定对象被使用前已先被初始化 2 | 3 | 对于类数据成员,应该在成员初值列(memeber initialization list)中进行初始化。 4 | 5 | 类的成员变量总是以其声明次序被初始化。 6 | 7 | C++ 保证,函数内的 local static 对象会在“该函数被调用期间”“首次遇上该对象之定义式”时被初始化。因此,往往需要使用 local static 对象替代 non-local static 对象。 8 | -------------------------------------------------------------------------------- /docs/cpp/Effective C++/README.md: -------------------------------------------------------------------------------- 1 | # Effective C++ 2 | An amazing book writtern by Scott Meyers. 3 | 4 | -------------------------------------------------------------------------------- /docs/cpp/Effective C++/size_t.cc: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | int main() { size_t ss; } 4 | -------------------------------------------------------------------------------- /docs/cpp/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | sidebar_position: 2 3 | --- 4 | 5 | # Language 6 | 7 | ## 如何定义一个只能在堆上(栈上)生成对象的类? 8 | 9 | 只能在堆上:将析构函数设置为私有,C++ 是静态绑定语言,编译器管理栈上对象的生命周期,编译器在为类对象分配栈空间时,会先检查类的析构函数的访问性。若析构函数不可访问,则不能在栈上创建对象。 10 | 11 | 只能在栈上:在堆上生成对象,使用 new 关键字,分为两个阶段,第一阶段,在堆上寻找可用内存,分配给对象,第二阶段,调用构造函数生成对象。因此,将 new 关键字设置为私有,那么第一阶段就无法完成。 12 | 13 | > 14 | -------------------------------------------------------------------------------- /docs/cpp/STL/3. 容器适配器.md: -------------------------------------------------------------------------------- 1 | # 容器适配器 2 | 3 | 指封装了一些基本的容器,使之具备了新的函数功能,比如把 deque 封装变为一个具有 stack 功能的数据结构,这种新得到的数据结构就称为适配器。 4 | 5 | ## stack 6 | 7 | 后入先出 8 | 9 | ## queue 10 | 11 | 先入先出 12 | 13 | ## priority_queue 14 | 15 | 优先队列 16 | -------------------------------------------------------------------------------- /docs/cpp/STL/4. 空间配置器.md: -------------------------------------------------------------------------------- 1 | # 空间配置器 2 | 3 | STL 中,空间配置器用于实现内存空间的分配。关于内存空间的配置与释放,SGI STL 采用了两级配置器,一级配置器主要考虑大块内存空间,利用 malloc 和 free 进行实现,二级配置器主要是考虑了小块的内存空间,采用链表维护可用的内存池。 4 | 5 | 对应于 new 和 delete 中的两步操作(内存配置和对象构造,内存释放和对象释放),分别通过 alloc::allocate, alloc::deallocate 和 ::construct, ::destory 实现。 6 | -------------------------------------------------------------------------------- /docs/cpp/STL/5. 迭代器.md: -------------------------------------------------------------------------------- 1 | # 迭代器 2 | 3 | ## 迭代器什么时候会失效 4 | 5 | 迭代器把不同容器的访问逻辑抽象出来,从而在不用暴露容器内部结构的情况下达到循环遍历集合的效果。 6 | 7 | 1. 对于序列容器vector,deque来说,使用erase后,后边的每个元素的迭代器都会失效,后边每个元素都往前移动一位,erase返回下一个有效的迭代器。 8 | 2. 对于关联容器map,set来说,使用了erase后,当前元素的迭代器失效,但是其结构是红黑树,删除当前元素,不会影响下一个元素的迭代器,所以在调用erase之前,记录下一个元素的迭代器即可。 9 | 3. 对于list来说,它使用了不连续分配的内存,并且它的erase方法也会返回下一个有效的迭代器,因此上面两种方法都可以使用。 10 | 11 | ## 迭代器 vs 指针 12 | 13 | 迭代器不是指针,是类模板,表现的像指针。他只是模拟了指针的一些功能,重载了指针的一些操作符,-->、++、--等。迭代器封装了指针,是一个"可遍历STL( Standard Template Library)容器内全部或部分元素"的对象,本质是封装了原生指针,是指针概念的一种提升,提供了比指针更高级的行为,相当于一种智能指针,他可以根据不同类型的数据结构来实现不同的++,--等操作。 14 | 15 | 迭代器返回的是对象引用而不是对象的值,所以cout只能输出迭代器使用取值后的值而不能直接输出其自身。 16 | -------------------------------------------------------------------------------- /docs/cpp/STL/6. STL 中的线程安全.md: -------------------------------------------------------------------------------- 1 | # STL 中的线程安全 2 | 3 | STL 中没有线程安全的容器。 4 | 5 | 可以使用加锁操作保证线程安全。 6 | 7 | ## Reference 8 | 9 | 10 | -------------------------------------------------------------------------------- /docs/cpp/STL/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | sidebar_position: 3 3 | --- 4 | 5 | # STL 6 | 7 | STL 由算法 (Algorithm)、容器 (Container) 和迭代器 (Iterator) 组成。 8 | 9 | 1. 容器,是一种数据结构,如 vector, list, deque,以模板类的方法提供。 10 | 2. 算法,用于操作容器中的数据,如 sort 函数。 11 | 3. 迭代器提供了访问容器中数据的方法,类似于指针。 12 | 4. 仿函数(Function object)又称为函数对象,本质上是重载了操作符的 struct。 13 | 5. 适配器(Adaptor)用于修改现有类的接口。 14 | 6. 空间配置器(Allocator)管理对象的创建与销毁,内存的获取与释放。 15 | 16 | ## Reference 17 | 18 | 1. 牛客网: 19 | 2. C 语言中文网: 20 | -------------------------------------------------------------------------------- /docs/cpp/images/2023-03-03-19-40-27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/cpp/images/2023-03-03-19-40-27.png -------------------------------------------------------------------------------- /docs/cpp/images/2023-03-03-20-25-13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/cpp/images/2023-03-03-20-25-13.png -------------------------------------------------------------------------------- /docs/cpp/images/2023-03-04-16-00-22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/cpp/images/2023-03-04-16-00-22.png -------------------------------------------------------------------------------- /docs/cpp/images/2023-03-04-16-03-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/cpp/images/2023-03-04-16-03-32.png -------------------------------------------------------------------------------- /docs/cpp/images/2023-03-04-16-58-17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/cpp/images/2023-03-04-16-58-17.png -------------------------------------------------------------------------------- /docs/cpp/images/2023-03-04-17-01-22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/cpp/images/2023-03-04-17-01-22.png -------------------------------------------------------------------------------- /docs/cpp/images/2023-03-04-17-05-13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/cpp/images/2023-03-04-17-05-13.png -------------------------------------------------------------------------------- /docs/cpp/images/2023-03-04-17-06-27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/cpp/images/2023-03-04-17-06-27.png -------------------------------------------------------------------------------- /docs/cpp/images/2023-03-04-17-12-42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/cpp/images/2023-03-04-17-12-42.png -------------------------------------------------------------------------------- /docs/cpp/images/2023-03-04-17-15-35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/cpp/images/2023-03-04-17-15-35.png -------------------------------------------------------------------------------- /docs/cpp/images/2023-03-04-17-21-57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/cpp/images/2023-03-04-17-21-57.png -------------------------------------------------------------------------------- /docs/cpp/images/2023-03-04-17-35-59.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/cpp/images/2023-03-04-17-35-59.png -------------------------------------------------------------------------------- /docs/cpp/images/2023-03-07-15-52-53.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/cpp/images/2023-03-07-15-52-53.png -------------------------------------------------------------------------------- /docs/cpp/images/2023-03-09-16-02-19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/cpp/images/2023-03-09-16-02-19.png -------------------------------------------------------------------------------- /docs/cpp/images/2023-03-09-17-07-42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/cpp/images/2023-03-09-17-07-42.png -------------------------------------------------------------------------------- /docs/cpp/images/2023-03-09-19-54-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/cpp/images/2023-03-09-19-54-03.png -------------------------------------------------------------------------------- /docs/cpp/images/2023-03-09-19-57-57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/cpp/images/2023-03-09-19-57-57.png -------------------------------------------------------------------------------- /docs/cpp/images/2023-03-09-20-15-04.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/cpp/images/2023-03-09-20-15-04.png -------------------------------------------------------------------------------- /docs/cpp/images/2023-03-09-20-17-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/cpp/images/2023-03-09-20-17-16.png -------------------------------------------------------------------------------- /docs/cpp/images/2023-03-25-20-22-26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/cpp/images/2023-03-25-20-22-26.png -------------------------------------------------------------------------------- /docs/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | sidebar_position: 1 3 | --- 4 | 5 | # Get Start 6 | 7 | ## What is it 8 | 9 | 计算机常见知识总结。 10 | 11 | 1. [C++ 基础知识](./cpp/README) 12 | 2. [计算机网络](./计算机网络) 13 | 3. [计算机原理](./计算机原理) 14 | 4. [算法](./algorithm) 15 | 16 | ## Reference 17 | 18 | 1. [huihut/interview](https://github.com/huihut/interview) 19 | 2. [cppreference](https://en.cppreference.com/) 20 | 21 | -------------------------------------------------------------------------------- /docs/异构计算/1. OpenCL.md: -------------------------------------------------------------------------------- 1 | # OpenCL 2 | 3 | 另一种 GPU 并行框架。 -------------------------------------------------------------------------------- /docs/异构计算/4. GPU 内存结构.md: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /docs/异构计算/CUDA/CUDA_C_Programming_Guide.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/异构计算/CUDA/CUDA_C_Programming_Guide.pdf -------------------------------------------------------------------------------- /docs/异构计算/CUDA/Pasted image 20230808155928.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/异构计算/CUDA/Pasted image 20230808155928.png -------------------------------------------------------------------------------- /docs/异构计算/CUDA/Pasted image 20230808161005.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/异构计算/CUDA/Pasted image 20230808161005.png -------------------------------------------------------------------------------- /docs/异构计算/CUDA/Pasted image 20230808171058.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/异构计算/CUDA/Pasted image 20230808171058.png -------------------------------------------------------------------------------- /docs/异构计算/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | sidebar_position: 9 3 | --- 4 | 5 | # 并行计算 6 | -------------------------------------------------------------------------------- /docs/异构计算/常见深度学习算子优化思路记录.canvas: -------------------------------------------------------------------------------- 1 | { 2 | "nodes":[ 3 | {"type":"file","file":"docs/异构计算/算子加速思路/GEMM 算子调优.md","id":"f9fcd5cc21afe619","x":-1220,"y":-1060,"width":360,"height":260}, 4 | {"type":"text","text":"算子优化","id":"953c7828f68fb0d1","x":-1460,"y":-760,"width":120,"height":60,"color":"1"}, 5 | {"id":"33f40b94888ac2ba","x":-1220,"y":-730,"width":360,"height":210,"type":"file","file":"docs/异构计算/算子加速思路/Reduce 算子调优.md"} 6 | ], 7 | "edges":[ 8 | {"id":"50940febd2cb1789","fromNode":"953c7828f68fb0d1","fromSide":"right","toNode":"f9fcd5cc21afe619","toSide":"left"}, 9 | {"id":"22b139e5959dfa4c","fromNode":"953c7828f68fb0d1","fromSide":"right","toNode":"33f40b94888ac2ba","toSide":"left"} 10 | ] 11 | } -------------------------------------------------------------------------------- /docs/异构计算/算子加速思路/Pasted image 20230815113825.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/异构计算/算子加速思路/Pasted image 20230815113825.png -------------------------------------------------------------------------------- /docs/异构计算/算子加速思路/Pasted image 20230815114247.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/异构计算/算子加速思路/Pasted image 20230815114247.png -------------------------------------------------------------------------------- /docs/异构计算/算子加速思路/Pasted image 20230815114346.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/异构计算/算子加速思路/Pasted image 20230815114346.png -------------------------------------------------------------------------------- /docs/异构计算/算子加速思路/Pasted image 20230815145244.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/异构计算/算子加速思路/Pasted image 20230815145244.png -------------------------------------------------------------------------------- /docs/异构计算/算子加速思路/Pasted image 20230815150206.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/异构计算/算子加速思路/Pasted image 20230815150206.png -------------------------------------------------------------------------------- /docs/异构计算/算子加速思路/Reduce 算子调优.md: -------------------------------------------------------------------------------- 1 | > It's easy to implement in CUDA, but hard to get it right. 2 | 3 | 本质上就是计算:$x = x_0 \otimes x_1 \otimes ... \otimes x_n$ 4 | -------------------------------------------------------------------------------- /docs/游戏引擎/2. 坐标系统.md: -------------------------------------------------------------------------------- 1 | # 坐标系统 2 | 3 | OpenGL 希望在每次顶点着色器运行后,可见的所有顶点都为标准化设备坐标。 4 | 5 | ![OpenGL 坐标变换](./images/2023-03-04-12-39-09.png) 6 | 7 | ## 局部空间 8 | 9 | 以局部原点为参考的坐标,也是物体起始的坐标。 10 | 11 | ## 世界空间 12 | 13 | 局部空间坐标经过 Model Matrix,转化为世界空间坐标,世界空间坐标是处于一个更大的空间范围的。这些坐标相对于世界的全局原点,它们会和其它物体一起相对于世界的原点进行摆放。 14 | 15 | ## 观察空间 16 | 17 | 世界空间坐标经过 View Matrix,转变为观察空间坐标,这个坐标是相对于摄像机或者说观察者的。 18 | 19 | ## 裁剪空间 20 | 21 | 观察空间坐标经过 Projection Matrix,会被投影到裁剪空间,获得裁剪空间坐标,裁剪空间坐标会被处理到 -1 到 1的范围内。 22 | 23 | ## 屏幕空间 24 | 25 | 裁剪空间坐标经过视口变换,转化为屏幕坐标。 26 | -------------------------------------------------------------------------------- /docs/游戏引擎/Games101.md: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /docs/游戏引擎/images/2023-03-04-11-40-41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/游戏引擎/images/2023-03-04-11-40-41.png -------------------------------------------------------------------------------- /docs/游戏引擎/images/2023-03-04-12-39-09.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/游戏引擎/images/2023-03-04-12-39-09.png -------------------------------------------------------------------------------- /docs/算法/1. KMP.md: -------------------------------------------------------------------------------- 1 | # KMP 2 | 3 | > 代码随想录: 4 | 5 | KMP 算法主要应用于字符串匹配。 6 | 7 | 主要思想是当出现字符串不匹配时,可以知道一部分之前已经匹配的文本内容,利用这些信息,以避免从头匹配。 8 | 9 | 所以如何记录已经匹配的文本内容,是 KMP 的重点。 10 | 11 | 前缀表用于记录下标 i 之前的字符串中,有多大长度的相同**前缀**和**后缀**。 12 | 13 | 前缀指不包含最后一个字符的所有以第一个字符开头的连续子串;后缀指不包含第一个字符的所有以最后一个字符结尾的连续子串。 14 | 15 | 个人理解,KMP 的关键点在于如何利用已经匹配的部分,next 数组就是干这个的,利用前缀和后缀的概念,以实现字符串的匹配。 16 | 17 | 1. 构建 next 前缀数组,next[i] 表示子字符串 (0,..i) 的最长相等前后缀的长度 18 | 2. 遍历匹配,当匹配失败时,使匹配点位于 next[i-1],因为,next[i-1]存储着与(0,..i-1)的后缀相等的最长前缀的下标的后一位,这样,可以从这个位置继续匹配,如果还是匹配不上,则继续移动匹配点。 19 | -------------------------------------------------------------------------------- /docs/算法/10. 单调栈.md: -------------------------------------------------------------------------------- 1 | # 单调栈 2 | 3 | 单调栈用于寻找在任一个元素的右边或者左边第一个比自己大或者小的元素的位置。 4 | 5 | 单调栈本质是空间换时间,其存放元素的下标。 6 | -------------------------------------------------------------------------------- /docs/算法/11. 二叉树.md: -------------------------------------------------------------------------------- 1 | # 二叉树 2 | 3 | 1. 平衡二叉树:左右子树的高度差的绝对值不超过 1 4 | 2. 完全二叉树:一棵深度为 k 的有 n 个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为 i(1≤i≤n)的结点与满二叉树中编号为 i 的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。 5 | 6 | 堆是一颗完全二叉树。 7 | -------------------------------------------------------------------------------- /docs/算法/13. AVL Tree.md: -------------------------------------------------------------------------------- 1 | # AVL Tree 2 | -------------------------------------------------------------------------------- /docs/算法/15. 树形dp.md: -------------------------------------------------------------------------------- 1 | # 树形 dp 2 | 3 | 指在树上进行动态规划。 4 | -------------------------------------------------------------------------------- /docs/算法/16. 差分数组.md: -------------------------------------------------------------------------------- 1 | # 差分数组 2 | 3 | 差分数组的主要适用场景是频繁对原始数组的某个区间的元素进行增减。 4 | 5 | 拼车: 6 | 7 | ```cpp 8 | class Solution { 9 | public: 10 | bool carPooling(vector> &trips, int capacity) { 11 | if (trips.size() == 0) 12 | return true; 13 | 14 | // 构建差分数组 15 | vector diff(10001, 0); 16 | for (auto &item : trips) { 17 | diff[item[1]] += item[0]; 18 | diff[item[2]] -= item[0]; 19 | } 20 | 21 | // 构建原始数组 22 | vector passengers(10001, 0); 23 | for (int i = 0; i < 10001; i++) { 24 | if (i == 0) 25 | passengers[0] = diff[0]; 26 | else 27 | passengers[i] = passengers[i - 1] + diff[i]; 28 | 29 | if (passengers[i] > capacity) 30 | return false; 31 | } 32 | return true; 33 | } 34 | }; 35 | ``` 36 | -------------------------------------------------------------------------------- /docs/算法/17. ACM 建树.md: -------------------------------------------------------------------------------- 1 | # ACM 模式建树 2 | -------------------------------------------------------------------------------- /docs/算法/5. 前缀和算法.md: -------------------------------------------------------------------------------- 1 | # 前缀和算法 2 | 3 | 注意: 4 | 5 | `sum[i, j] = sum[0, j] - sum[0, i-1]` 6 | -------------------------------------------------------------------------------- /docs/算法/6. dijkstra.md: -------------------------------------------------------------------------------- 1 |  -------------------------------------------------------------------------------- /docs/算法/7. 回溯算法模板.md: -------------------------------------------------------------------------------- 1 | # 回溯算法模板 2 | 3 | > 4 | 5 | ```cpp 6 | void backtracking(参数) { 7 | if (终止条件) { 8 | 存放结果; 9 | return; 10 | } 11 | 12 | for (选择:本层集合中元素(树中节点孩子的数量就是集合的大小)) { 13 | 处理节点; 14 | backtracking(路径,选择列表); // 递归 15 | 回溯,撤销处理结果 16 | } 17 | } 18 | ``` 19 | -------------------------------------------------------------------------------- /docs/算法/8. 贪心算法.md: -------------------------------------------------------------------------------- 1 | # 贪心算法 2 | 3 | 贪心算法讲究的是从局部最优推出全局最优。 4 | -------------------------------------------------------------------------------- /docs/算法/9. 动态规划.md: -------------------------------------------------------------------------------- 1 | # 动态规划 2 | 3 | 动态规划中每一个状态一定是由上一个状态推导出来的。 4 | -------------------------------------------------------------------------------- /docs/算法/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | sidebar_position: 4 3 | --- 4 | 5 | # 算法 6 | -------------------------------------------------------------------------------- /docs/算法/images/2023-03-06-11-02-17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/算法/images/2023-03-06-11-02-17.png -------------------------------------------------------------------------------- /docs/计算机原理/11. 深入理解 Linux 虚拟内存管理.md: -------------------------------------------------------------------------------- 1 | # 深入理解 Linux 虚拟内存管理 2 | 3 | ## 什么是虚拟内存地址 4 | 5 | 虚拟地址是人为设计的一个概念,物理地址则是数据在物理内存中的真实存储位置。 6 | 7 | 以 Intel Core i7 处理器为例,64 位虚拟地址的格式为:全局页目录项(9 位)+ 上层页目录项(9 位)+ 中间页目录项(9 位)+ 页表项(9 位)+ 页内偏移(12 位)。共 48 位组成的虚拟内存地址。 8 | 9 | ## Linux 虚拟内存空间分布 10 | 11 | ![Linux虚拟内存空间](images/2023-03-10-18-00-54.png) 12 | -------------------------------------------------------------------------------- /docs/计算机原理/2. 计算机如何执行程序.md: -------------------------------------------------------------------------------- 1 | # 计算机执行程序的流程 2 | 3 | 计算机执行程序的流程,从操作系统的角度来看,可以概括为以下几个步骤: 4 | 5 | 加载程序:当用户启动一个程序时,操作系统会首先加载程序到内存中。在这个过程中,操作系统会将程序的代码和数据从硬盘上的存储设备读取到内存中。 6 | 7 | 分配内存:一旦程序被加载到内存中,操作系统将为其分配一定数量的内存空间。这些内存空间将用于存储程序的代码、数据和运行时状态。 8 | 9 | 解析程序:在程序加载到内存后,操作系统会解析程序的代码并确定程序的入口点。入口点通常是程序中的main函数,操作系统将从这个函数开始执行程序。 10 | 11 | 执行程序:一旦程序的入口点确定后,操作系统将开始执行程序的代码。程序代码将按照预定的顺序执行,执行期间可能需要读写数据、进行计算、调用系统函数等操作。 12 | 13 | 管理进程:当程序运行时,操作系统会将其视为一个进程,并为其分配一些系统资源,例如CPU时间、内存空间、文件句柄等。操作系统会管理进程的状态,例如运行、阻塞或等待,以确保它们在系统中正确地运行。 14 | 15 | 处理异常:在程序运行期间,可能会发生错误或异常情况,例如内存访问错误、系统调用失败等。操作系统会捕获这些异常,并采取适当的措施,例如弹出错误消息、终止程序或重新启动程序等。 16 | 17 | 退出程序:当程序运行结束时,操作系统会释放程序占用的内存空间,并终止该进程。操作系统还可以向用户显示一些有关程序运行的统计信息,例如运行时间、CPU使用率、内存使用率等。 18 | 19 | 总的来说,操作系统在计算机执行程序的过程中扮演了至关重要的角色。它负责管理进程、分配系统资源、处理异常、提供系统调用接口等功能,从而使程序能够在计算机上正确地运行。 20 | -------------------------------------------------------------------------------- /docs/计算机原理/5. 磁盘比硬盘慢几万倍.md: -------------------------------------------------------------------------------- 1 | # 磁盘与硬盘慢几万倍 2 | 3 | ![计算机存储器](./images/2023-03-09-21-53-00.png) 4 | 5 | CPU 缓存使用的是一种叫 SRAM(Static Random-Access Memory, 静态随机存储器)的芯片。包括 L1, L2, L3 三级缓存。 6 | 7 | 内存使用的是一种叫 DRAM(Dynamic Random-Access Memory, 动态随机存取存储器)的芯片。 8 | 9 | SSD(Solid-state disk)就是我们常说的固体硬盘,结构和内存类似。结构和内存类似,但是它相比内存的优点是断电后数据仍然存在,而内存、寄存器、高速缓存断电中数据都会丢失。 10 | 11 | HDD(Hard Disk Drive),通过物理读写的方式来访问数据。 12 | 13 | ![内存结构](./images/2023-03-09-22-01-24.png) 14 | 15 | L3 Cache 比 L1 Cache 和 L2 Cache 大很多,这是因为 L1 Cache 和 L2 Cache 都是每个 CPU 核心独有的,而 L3 Cache 是多个 CPU 核心共享的。 16 | -------------------------------------------------------------------------------- /docs/计算机原理/7. 局部性原理.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机原理/7. 局部性原理.md -------------------------------------------------------------------------------- /docs/计算机原理/9. 在 4GB 物理内存的机器上,申请 8G 内存.md: -------------------------------------------------------------------------------- 1 | # 在 4GB 物理内存的机器上,申请 8G 内存 2 | 3 | 对于 32 位系统,用户空间最大为 3GB,无法申请 4 | 5 | 对于 64 位系统,用户空间最大为 128TB,可以申请,访问的时候,如果开启了 swap 机制,可以正常访问,否则会触发 OOM Killer。 6 | 7 | -------------------------------------------------------------------------------- /docs/计算机原理/CSAPP/2. 信息的表示和处理.md: -------------------------------------------------------------------------------- 1 | # 信息的表示和处理 2 | 3 | 16 进制出现的目的是为了更好的与 2 进制之间转换。 4 | 5 | 如:FF(16 进制) 可以表示为 11111111(2 进制). 6 | 7 | - 10 进制转 2 进制:除 2 取余 8 | - 10 进制转 16 进制:除 16 取余 9 | 10 | ## 字长(word size) 11 | 12 | 每台计算机都有一个字长,表示整数和指针数据的标称大小(nominal size),虚拟地址是以这样一个字长进行编码的,所以字长决定了虚拟地址空间的大小,对于 32 位系统,最大寻址空间为 4GB。 13 | 14 | ## 小端法 vs 大端法 15 | 16 | ![大端法、小端法](images/2023-03-11-15-23-42.png) 17 | 18 | > ... 某些机器选择在存储器中按照从最低有效字节到最高有效字节的顺序存储对象,而另一些机器则按照从最高有效字节到最低有效字节的顺序存储。前一种称为小端法,后一种称为大端法。... 19 | 20 | 在十六进制 `0x01234567` 中,`0x01` 为最高有效字节,`0x67` 为最低有效字节。 21 | 22 | ## IEEE 浮点数表示 23 | 24 | IEEE 浮点标准使用 $V=(-1)^s * M * 2^E$ 表示一个数。 25 | 26 | -------------------------------------------------------------------------------- /docs/计算机原理/CSAPP/3. 程序的机器级表示.md: -------------------------------------------------------------------------------- 1 | # 程序的机器级表示 2 | 3 | -------------------------------------------------------------------------------- /docs/计算机原理/CSAPP/images/2023-03-11-15-23-42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机原理/CSAPP/images/2023-03-11-15-23-42.png -------------------------------------------------------------------------------- /docs/计算机原理/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | sidebar_position: 6 3 | --- 4 | 5 | # 计算机原理 6 | -------------------------------------------------------------------------------- /docs/计算机原理/images/2023-03-03-11-21-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机原理/images/2023-03-03-11-21-32.png -------------------------------------------------------------------------------- /docs/计算机原理/images/2023-03-09-21-35-33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机原理/images/2023-03-09-21-35-33.png -------------------------------------------------------------------------------- /docs/计算机原理/images/2023-03-09-21-43-41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机原理/images/2023-03-09-21-43-41.png -------------------------------------------------------------------------------- /docs/计算机原理/images/2023-03-09-21-53-00.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机原理/images/2023-03-09-21-53-00.png -------------------------------------------------------------------------------- /docs/计算机原理/images/2023-03-09-22-01-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机原理/images/2023-03-09-22-01-24.png -------------------------------------------------------------------------------- /docs/计算机原理/images/2023-03-10-13-39-37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机原理/images/2023-03-10-13-39-37.png -------------------------------------------------------------------------------- /docs/计算机原理/images/2023-03-10-13-42-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机原理/images/2023-03-10-13-42-16.png -------------------------------------------------------------------------------- /docs/计算机原理/images/2023-03-10-15-42-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机原理/images/2023-03-10-15-42-16.png -------------------------------------------------------------------------------- /docs/计算机原理/images/2023-03-10-18-00-54.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机原理/images/2023-03-10-18-00-54.png -------------------------------------------------------------------------------- /docs/计算机原理/images/2023-03-25-13-42-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机原理/images/2023-03-25-13-42-10.png -------------------------------------------------------------------------------- /docs/计算机原理/images/2023-03-25-13-46-46.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机原理/images/2023-03-25-13-46-46.png -------------------------------------------------------------------------------- /docs/计算机原理/images/2023-03-25-18-40-21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机原理/images/2023-03-25-18-40-21.png -------------------------------------------------------------------------------- /docs/计算机网络/1. TCP 和 UDP 的区别.md: -------------------------------------------------------------------------------- 1 | # TCP 和 UDP 的区别 2 | 3 | TCP 和 UDP 都是传输层的协议,服务于应用层程序。其中 TCP 提供面向连接的基于字节流的可靠传输,UDP 提供面向无连接的基于数据报的不可靠传输。所以,UDP 首部开销仅 8 字节,在实时性要求较高的场景中有很好的表现,如视频通话,而 TCP 首部开销最低 20 字节,在要求数据准确,对速度没有硬性要求的场景有很好的表现,常用于 FTP,HTTP,HTTPs 之中。 4 | 5 | ## TCP 如何判断丢包 6 | -------------------------------------------------------------------------------- /docs/计算机网络/10. TCP 连接失败怎么调试.md: -------------------------------------------------------------------------------- 1 | # TCP连接失败可能由于多种原因引起,以下是一些可能有用的调试步骤 2 | 3 | 1. 确认目标IP地址和端口号:请确保您正在尝试连接的IP地址和端口号是正确的,可以检查您的代码或配置文件中的设置是否正确,或者通过ping命令来测试目标IP地址是否可达。 4 | 2. 确认网络连接:如果您的设备连接到网络,请确保它可以与其他设备进行通信。您可以尝试ping其他设备来测试网络连接是否正常(**网络层、链路层、物理层**)。 5 | 3. 检查防火墙设置:如果您的设备上有防火墙,可以尝试关闭防火墙或在防火墙设置中添加允许TCP连接的规则。 6 | 4. 检查代理设置:如果您正在使用代理,请确保代理服务器的设置正确,并且代理服务器可以与目标服务器进行通信。 7 | 5. 尝试使用telnet命令测试连接:使用telnet命令可以帮助您测试TCP连接是否正常。在命令提示符或终端窗口中输入"telnet <目标IP地址> <目标端口号>"来测试连接(**传输层**)。 8 | 6. 检查日志文件:如果您的应用程序或操作系统记录了日志文件,请检查日志文件以获取更多信息。 9 | 7. 尝试使用抓包工具:使用网络抓包工具(例如Wireshark)来查看TCP连接的详细信息,包括连接请求和响应、数据包的大小和内容等。 10 | 11 | 如果以上步骤不能解决问题,可以考虑联系网络管理员或软件开发人员以获取更多帮助。 12 | -------------------------------------------------------------------------------- /docs/计算机网络/11. TCP 状态机.md: -------------------------------------------------------------------------------- 1 | # 有限状态自动机 2 | 3 | 1. CLOSED: 初始状态,表示 TCP 连接已经关闭 4 | 2. LISTEN: 表示服务器正在等待来自客户端的请求 5 | 3. SYS-SENT: 表示客户端已经向服务器发送连接请求,但还没有收到确认回复 6 | 4. SYS-RECIEVED: 表示服务器已经接收到客户端的连接请求,并向客户端发送了确认回复,但仍未收到客户端的确认回复 7 | 5. ESTANBLISHED: 表示连接已经建立,并且双方可以进行数据传输 8 | 6. FIN-WAIT-1: 表示客户端已经发送了连接关闭请求(FIN),并等待服务器确认 9 | 7. FIN-WAIT-2: 表示客户端已经收到了服务器的确认回复,并且等待服务器发送连接关闭请求 10 | 8. CLOSE-WAIT: 表示服务器已经收到了客户端的连接关闭请求,并且正在等待服务器发送数据 11 | 9. CLOSING: 表示客户端和服务器都已经发送了连接关闭请求,但仍未收到对方的确认回复 12 | 10. LAST-ACK: 表示服务器已经收到客户端的连接关闭请求,并向客户端发送了确认回复,但仍在等待最后一个数据包 13 | 11. TIME-WAIT: 表示连接已经关闭,但是等待可能存在的后续数据包 14 | 15 | 通过使用 TCP 状态机,TCP 协议可以确保连接的可靠性和稳定性,以及防止不同状态之间的错误转换。TCP 状态机的使用也可以帮助开发人员在调试和排查 TCP 连接问题时更快地定位问题。 16 | -------------------------------------------------------------------------------- /docs/计算机网络/13. 路由相关算法.md: -------------------------------------------------------------------------------- 1 | # 路由相关算法 2 | -------------------------------------------------------------------------------- /docs/计算机网络/14. 负载均衡.md: -------------------------------------------------------------------------------- 1 | # 负载均衡 2 | 3 | > 4 | 5 | 负载均衡是高可用网络基础架构的关键组件,通常用于将工作负载分布到多个服务器来提高网站、应用、数据库或其他服务的性能和可靠性。 6 | 7 | ## 负载均衡算法 8 | 9 | 负载均衡算法决定了后端的哪些健康服务器会被选中。几个常用的算法: 10 | 11 | - Round Robin(轮询):为第一个请求选择列表中的第一个服务器,然后按顺序向下移动列表直到结尾,然后循环。 12 | - Least Connections(最小连接):优先选择连接数最少的服务器,在普遍会话较长的情况下推荐使用。 13 | - Source:根据请求源的 IP 的散列(hash)来选择要转发的服务器。这种方式可以一定程度上保证特定用户能连接到相同的服务器。 14 | 15 | // TODO 16 | -------------------------------------------------------------------------------- /docs/计算机网络/16. 一致性哈希.md: -------------------------------------------------------------------------------- 1 | # 一致性哈希 2 | 3 | > 负载均衡 4 | 5 | 传统哈希算法难以应对系统扩容时,造成的数据迁移。 6 | -------------------------------------------------------------------------------- /docs/计算机网络/3. Get VS Post.md: -------------------------------------------------------------------------------- 1 | # Http Get Vs Post 2 | 3 | Get 主要用于获取数据,Post 主要用于提交数据。 4 | 5 | Get 的长度限制为 2048 字节,而 Post 没有长度限制。 6 | 7 | Get 的参数是显式的,附加在 url 之后,Post 的参数是隐式的,可以通过工具查看。 8 | -------------------------------------------------------------------------------- /docs/计算机网络/4. URL 到 显示内容.md: -------------------------------------------------------------------------------- 1 | # 浏览器从输入 URL 到页面显示内容,发生了什么 2 | 3 | 1. 用户输入,如果是搜索内容,则首先合成 URL,如果是 URL,则进入下一步 4 | 2. 浏览器进程通过进程间通信(IPC)把URL请求发送给网络进程 5 | 3. 网络进程查找本地缓存是否包含该资源,如果有缓存资源,那么直接返回资源给浏览器进程,否则网络进程向web服务器发起http请求: 6 | 1. DNS 解析,获取请求域名的服务器 IP 地址以及端口 7 | 2. 利用 IP 地址和服务器建立 TCP 连接,建立连接后,浏览器端会构建请求行,请求头信息,并把和该域名相关的 Cookie 等数据附加到请求头中,然后向服务器发送构建的请求信息 8 | 3. 服务器收到请求信息后,生成响应数据,包括响应行,响应头和响应体 9 | 4. 网络进程接收到响应数据后,如果发现返回的状态码是 301 或 302,说明服务器需要浏览器重定向到其它 URL,重新开始,如果是 200,则继续处理请求 10 | 5. 检查响应类型 Content-Type 字段,如果是字节流类型,则将该请求提交给下载管理器,流程结束,如果是 html 则通知浏览器进程准备渲染 11 | 6. 浏览器进程会检查当前 URL 是否与之前打开的渲染进程根域名相同,如果相同,则复用之前的进程,否则开启新的渲染进程 12 | 7. 渲染进程准备好后,浏览器向渲染进程发起“提交文档”信息,渲染进程接收到“提交文档”的消息后,会和网络进程建立传输数据的管道,获取数据后,向浏览器发送“确认提交”的消息 13 | 8. 浏览器进程接受到“确认”消息后更新浏览器界面的状态,包括地址栏 URL、前进后退的历史状态,Web 页面内容等 14 | -------------------------------------------------------------------------------- /docs/计算机网络/7. TCP 粘包.md: -------------------------------------------------------------------------------- 1 | # TCP 粘包 2 | 3 | 通俗来说,就是发送方发送的多个数据包,到接收方后粘连在一起,导致数据包不完整。 4 | 5 | ## 原因 6 | 7 | ### 发送方的原因 8 | 9 | TCP 协议默认采用 Nagle 算法,以合并相连的小数据包,再一次性发送,以提升网络的传输效率,但接收方并不知晓发送方合并数据包,而且数据包的合并在 TCP 协议中是没有分界线的,所以导致接收方无法还原原来的数据包。 10 | 11 | ### 接收方的原因 12 | 13 | TCP 是基于字节流的,网络传输数据的速度可能会快过接收方处理数据的速度,这时候可能会导致接收方在读取缓冲区时,缓冲区内存在多个数据包,而在 TCP 协议中,接收方应该一次性读取缓冲区内的所有内容,所以不能还原原本的数据包。 14 | 15 | ## 解决方法 16 | 17 | 1. 禁用 Nagle 算法 18 | 2. 自定义协议,类似于 http 协议,为发送的数据添加包头。 19 | -------------------------------------------------------------------------------- /docs/计算机网络/8. TCP 拥塞控制.md: -------------------------------------------------------------------------------- 1 | # Tcp reno算法 拥塞控制 2 | 3 | 拥塞会导致超时 4 | 5 | 6 | 7 | ## 慢启动 8 | 9 | 慢启动意思就是拥塞窗口(cwnd)从最小值 1 开始变大。 10 | 11 | 将发送窗口的大小在初始的情况下设置为1,在收到接收方确认后,再修改其发送窗口为原来的两倍,也就是2。这样子的话,就是指数增长。 12 | 13 | 一般在慢启动阶段,碰到第一次丢包的时候会将慢启动阈值(ssthresh)设为当前窗口大小值的一半。 14 | 而慢启动到拥塞避免的分界线就是慢启动阈值(ssthresh)。 15 | 16 | ## 拥塞避免 17 | 18 | 在慢启动阶段达到阈值(ssthresh)后就会进入拥塞避免阶段,拥塞避免阶段窗口的增长是线性的 19 | 20 | 这个阶段会持续到发生下一次丢包(超时)。如果发生了超时(TO),就会将阈值(ssthresh)设置为当前窗口的一半,然后窗口大小从1重新开始慢启动算法(慢恢复)。 21 | 22 | ## 快重传 23 | 24 | 收到了 3 次或以上的重复确认,此时 A 就会知道 5 号数据包丢包,不等 5 号的计时器超时,便直接重传 5 号数据包,这就是 TCP 快速重传。 25 | 26 | ## 快恢复 27 | 28 | 快恢复算法是和快重传配合使用的算法,一般发生了快重传的时候,发送方能收到三次连续重复确认,说明此时网络并不是拥塞,只是单纯的丢包。此时会将阈值(ssthresh)设置为当前窗口的一半,然后窗口大小从阈值(ssthresh)重新开始拥塞避免算法(快恢复)。 29 | -------------------------------------------------------------------------------- /docs/计算机网络/9. TCP 流量控制.md: -------------------------------------------------------------------------------- 1 | # Tcp 流量控制算法 2 | 3 | 如果发送者发送数据过快,接收者来不及接收,那么就会有分组丢失。为了避免分组丢失,控制发送者的发送速度,使得接收者来得及接收,这就是流量控制。流量控制根本目的是防止分组丢失,它是构成TCP可靠性的一方面。 4 | 5 | ## 如何实现流量控制? 6 | 7 | 由滑动窗口协议(连续ARQ协议)实现。滑动窗口协议既保证了分组无差错、有序接收,也实现了流量控制。主要的方式就是接收方返回的 ACK 中会包含自己的接收窗口的大小,并且利用大小来控制发送方的数据发送。 8 | 9 | ## 流量控制引发的死锁?怎么避免死锁的发生? 10 | 11 | 当发送者收到了一个窗口为0的应答,发送者便停止发送,等待接收者的下一个应答。但是如果这个窗口不为0的应答在传输过程丢失,发送者一直等待下去,而接收者以为发送者已经收到该应答,等待接收新数据,这样双方就相互等待,从而产生死锁。 12 | 13 | 为了避免流量控制引发的死锁,TCP使用了持续计时器。每当发送者收到一个零窗口的应答后就启动该计时器。时间一到便主动发送报文询问接收者的窗口大小。若接收者仍然返回零窗口,则重置该计时器继续等待;若窗口不为0,则表示应答报文丢失了,此时重置发送窗口后开始发送,这样就避免了死锁的产生。 14 | 15 | ## 拥塞控制和流量控制的区别 16 | 17 | 拥塞控制:拥塞控制是作用于网络的,它是防止过多的数据注入到网络中,避免出现网络负载过大的情况;常用的方法就是:(1)慢开始、拥塞避免(2)快重传、快恢复。 18 | 19 | 流量控制:流量控制是作用于接收者的,它是控制发送者的发送速度从而使接收者来得及接收,防止分组丢失的。 20 | -------------------------------------------------------------------------------- /docs/计算机网络/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | sidebar_position: 7 3 | --- 4 | 5 | # 计算机网络 6 | -------------------------------------------------------------------------------- /docs/计算机网络/images/2023-03-06-13-34-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机网络/images/2023-03-06-13-34-50.png -------------------------------------------------------------------------------- /docs/计算机网络/images/2023-03-20-21-06-24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机网络/images/2023-03-20-21-06-24.png -------------------------------------------------------------------------------- /docs/计算机网络/images/2023-03-20-21-14-13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机网络/images/2023-03-20-21-14-13.png -------------------------------------------------------------------------------- /docs/计算机网络/images/2023-03-20-21-17-53.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机网络/images/2023-03-20-21-17-53.png -------------------------------------------------------------------------------- /docs/计算机网络/images/2023-03-25-21-54-15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机网络/images/2023-03-25-21-54-15.png -------------------------------------------------------------------------------- /docs/计算机网络/小林 coding/HTTP 常见面试题.md: -------------------------------------------------------------------------------- 1 | # HTTP 常见面试题 2 | 3 | ## 基本概念 4 | 5 | HTTP 是超文本传输协议,全称 HyperText Transfer Protocol. 6 | 7 | ## 常见状态码 8 | 9 | - 1xx: 提示信息,表示目前是协议处理的中间状态,还需要后续操作 10 | - 2xx: 成功,报文已经收到并正确处理 11 | - 3xx: 重定向,资源位置发生变动,需要客户端重新发送请求 12 | - 4xx: 客户端错误,请求报文有误,服务器无法处理 13 | - 5xx: 服务端错误,服务器在处理请求时内部发生了错误 14 | 15 | ## HTTP 缓存技术 16 | 17 | ### HTTP 缓存实现方式 18 | 19 | 强制缓存和协商缓存。 20 | 21 | ## HTTPS 22 | 23 | ![HTTPS](./images/2023-03-06-16-50-55.png) 24 | 25 | Https 在 http 与 TCP 层之间加入了 SSL/TLS 协议。 26 | 27 | 公钥加密,私钥解密。这个目的是为了保证内容传输的安全,因为被公钥加密的内容,其他人是无法解密的,只有持有私钥的人,才能解密出实际的内容; 28 | 29 | 私钥加密,公钥解密。这个目的是为了保证消息不会被冒充,因为私钥是不可泄露的,如果公钥能正常解密出私钥加密的内容,就能证明这个消息是来源于持有私钥身份的人发送的。 30 | -------------------------------------------------------------------------------- /docs/计算机网络/小林 coding/Ip.md: -------------------------------------------------------------------------------- 1 | # 网络层 2 | 3 | IP 地址中,有两个 IP 是特殊的,主机号全为 1 指定某个网络下的所有主机,用于广播,主机号全为 0 指定某个网络。 4 | 5 | 广播地址可以分为本地广播(在本网络内广播的)和直接广播(在不同网络之间的广播)。 6 | 7 | ## NAT 8 | -------------------------------------------------------------------------------- /docs/计算机网络/小林 coding/LVS.md: -------------------------------------------------------------------------------- 1 | # LVS 2 | 3 | Linux Virtual Server. 4 | 5 | 是一个基于四层、具有强大性能的反向代理服务器。 6 | -------------------------------------------------------------------------------- /docs/计算机网络/小林 coding/Linux 系统是如何收发网络包的.md: -------------------------------------------------------------------------------- 1 | # Linux 系统如何收发网络包 2 | 3 | Linux 系统是按照 TCP/IP 四层网络模型实现网络协议栈的。 4 | 5 | - 应用层:负责向用户提供一组应用程序,比如 HTTP,DNS,FTP 等 6 | - 传输层:负责端到端的通信,比如 TCP、UDP 等 7 | - 网络层:负责网络包的封装、分片、路由、转发,比如 IP、ICMP 等 8 | - 网络接口层:负责网络包在物理网络中的传输,比如网络包的封帧、MAC 寻址、差错检,以及通过网卡传输网络帧等 9 | 10 | Linux 网络协议栈: 11 | 12 | ![Linux 网络协议栈](./images/2023-03-06-16-12-44.png) 13 | 14 | > 15 | -------------------------------------------------------------------------------- /docs/计算机网络/小林 coding/TCP 重传、滑动窗口、流量控制、拥塞控制.md: -------------------------------------------------------------------------------- 1 | # TCP 重传、滑动窗口、流量控制、拥塞控制 2 | 3 | RTT: 包的往返时间 4 | 5 | RTO: 超时重传时间 6 | -------------------------------------------------------------------------------- /docs/计算机网络/小林 coding/images/2023-03-03-15-06-36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机网络/小林 coding/images/2023-03-03-15-06-36.png -------------------------------------------------------------------------------- /docs/计算机网络/小林 coding/images/2023-03-06-13-29-14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机网络/小林 coding/images/2023-03-06-13-29-14.png -------------------------------------------------------------------------------- /docs/计算机网络/小林 coding/images/2023-03-06-14-47-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机网络/小林 coding/images/2023-03-06-14-47-11.png -------------------------------------------------------------------------------- /docs/计算机网络/小林 coding/images/2023-03-06-14-54-01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机网络/小林 coding/images/2023-03-06-14-54-01.png -------------------------------------------------------------------------------- /docs/计算机网络/小林 coding/images/2023-03-06-15-01-58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机网络/小林 coding/images/2023-03-06-15-01-58.png -------------------------------------------------------------------------------- /docs/计算机网络/小林 coding/images/2023-03-06-15-04-18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机网络/小林 coding/images/2023-03-06-15-04-18.png -------------------------------------------------------------------------------- /docs/计算机网络/小林 coding/images/2023-03-06-15-07-27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机网络/小林 coding/images/2023-03-06-15-07-27.png -------------------------------------------------------------------------------- /docs/计算机网络/小林 coding/images/2023-03-06-15-10-26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机网络/小林 coding/images/2023-03-06-15-10-26.png -------------------------------------------------------------------------------- /docs/计算机网络/小林 coding/images/2023-03-06-15-11-35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机网络/小林 coding/images/2023-03-06-15-11-35.png -------------------------------------------------------------------------------- /docs/计算机网络/小林 coding/images/2023-03-06-15-45-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机网络/小林 coding/images/2023-03-06-15-45-12.png -------------------------------------------------------------------------------- /docs/计算机网络/小林 coding/images/2023-03-06-16-12-44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机网络/小林 coding/images/2023-03-06-16-12-44.png -------------------------------------------------------------------------------- /docs/计算机网络/小林 coding/images/2023-03-06-16-50-55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机网络/小林 coding/images/2023-03-06-16-50-55.png -------------------------------------------------------------------------------- /docs/计算机网络/小林 coding/images/2023-03-09-10-34-47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机网络/小林 coding/images/2023-03-09-10-34-47.png -------------------------------------------------------------------------------- /docs/计算机网络/小林 coding/images/2023-03-09-11-06-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机网络/小林 coding/images/2023-03-09-11-06-10.png -------------------------------------------------------------------------------- /docs/计算机网络/小林 coding/images/2023-03-09-11-08-03.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机网络/小林 coding/images/2023-03-09-11-08-03.png -------------------------------------------------------------------------------- /docs/计算机网络/小林 coding/images/2023-03-09-11-50-43.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机网络/小林 coding/images/2023-03-09-11-50-43.png -------------------------------------------------------------------------------- /docs/计算机网络/计算机网络微课堂/1. 物理层.md: -------------------------------------------------------------------------------- 1 | # 物理层概述 2 | 3 | ## 物理层要实现的功能 4 | 5 | 它要做的是“透明的”在各种传输媒体上传输 0 和 1。 6 | “透明”:数据链路层看不见(也无需看见)物理层究竟是用的是什么方法来传输比特流。只需要享受物理层提供的比特流传输服务即可。 7 | 8 | ## 物理层接口特性 9 | 10 | 机械特性:形状和尺寸,引脚数目和排列,固定和锁定装置 11 | 电气特性:信号电压的范围,阻抗匹配的情况,传输速率,距离限制 12 | 功能特性:规定接口电缆的各条信号线的作用 13 | 过程特性:规定在信号线上传输比特流的一组操作过程,包括各信号间的时序关系 14 | 15 | ## 物理层下面的传输媒体 16 | -------------------------------------------------------------------------------- /docs/计算机网络/计算机网络微课堂/images/2023-03-02-15-04-38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机网络/计算机网络微课堂/images/2023-03-02-15-04-38.png -------------------------------------------------------------------------------- /docs/计算机网络/计算机网络微课堂/images/2023-03-02-15-06-44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机网络/计算机网络微课堂/images/2023-03-02-15-06-44.png -------------------------------------------------------------------------------- /docs/计算机网络/计算机网络微课堂/images/2023-03-02-15-23-37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机网络/计算机网络微课堂/images/2023-03-02-15-23-37.png -------------------------------------------------------------------------------- /docs/计算机网络/计算机网络微课堂/images/三种交换方式的对比.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机网络/计算机网络微课堂/images/三种交换方式的对比.png -------------------------------------------------------------------------------- /docs/计算机网络/计算机网络微课堂/images/协议数据单元.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机网络/计算机网络微课堂/images/协议数据单元.png -------------------------------------------------------------------------------- /docs/计算机网络/计算机网络微课堂/images/奇偶校验.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机网络/计算机网络微课堂/images/奇偶校验.png -------------------------------------------------------------------------------- /docs/计算机网络/计算机网络微课堂/images/应用层的一些常见问题.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机网络/计算机网络微课堂/images/应用层的一些常见问题.png -------------------------------------------------------------------------------- /docs/计算机网络/计算机网络微课堂/images/数据链路层在网络体系结构中所处的地位.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机网络/计算机网络微课堂/images/数据链路层在网络体系结构中所处的地位.png -------------------------------------------------------------------------------- /docs/计算机网络/计算机网络微课堂/images/数据链路层的一些常见问题.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机网络/计算机网络微课堂/images/数据链路层的一些常见问题.png -------------------------------------------------------------------------------- /docs/计算机网络/计算机网络微课堂/images/时延.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机网络/计算机网络微课堂/images/时延.png -------------------------------------------------------------------------------- /docs/计算机网络/计算机网络微课堂/images/比特填充.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机网络/计算机网络微课堂/images/比特填充.png -------------------------------------------------------------------------------- /docs/计算机网络/计算机网络微课堂/images/物理层的一些常见问题.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机网络/计算机网络微课堂/images/物理层的一些常见问题.png -------------------------------------------------------------------------------- /docs/计算机网络/计算机网络微课堂/images/网络层的一些常见问题.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机网络/计算机网络微课堂/images/网络层的一些常见问题.png -------------------------------------------------------------------------------- /docs/计算机网络/计算机网络微课堂/images/计算机网络体系结构.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机网络/计算机网络微课堂/images/计算机网络体系结构.png -------------------------------------------------------------------------------- /docs/计算机网络/计算机网络微课堂/images/计算机网络速率-例子.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机网络/计算机网络微课堂/images/计算机网络速率-例子.png -------------------------------------------------------------------------------- /docs/计算机网络/计算机网络微课堂/images/运输层的一些常见问题.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机网络/计算机网络微课堂/images/运输层的一些常见问题.png -------------------------------------------------------------------------------- /docs/计算机网络/计算机网络微课堂/images/透明传输.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/计算机网络/计算机网络微课堂/images/透明传输.png -------------------------------------------------------------------------------- /docs/面试记录/暑期实习/完美世界.md: -------------------------------------------------------------------------------- 1 | # 游戏引擎 2 | 3 | 1. 计算机中断机制: 4 | 2. OpenGL 怎么保证在 CPU 修改数据的时候,高速渲染 5 | 3. GPU 硬件结构,存储方式,执行方式: 6 | 4. lock-free 程序实现,无锁编程: 7 | 5. atomic、mutex、conditional_variable 底层实现方式: 8 | 6. unordered_map 和 map 的区别,和分别的使用场景: 9 | 7. CPU 底层架构: 10 | 8. TEST-AND-SET 指令,CAS 指令: 11 | 9. 信号量: 12 | 10. Lua 内存机制: 13 | 14 | -------------------------------------------------------------------------------- /docs/面试记录/暑期实习/阿里云/Pasted image 20230301111857.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/面试记录/暑期实习/阿里云/Pasted image 20230301111857.png -------------------------------------------------------------------------------- /docs/面试记录/暑期实习/阿里云/Pasted image 20230301111956.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/面试记录/暑期实习/阿里云/Pasted image 20230301111956.png -------------------------------------------------------------------------------- /docs/面试记录/暑期实习/阿里云/Pasted image 20230301112124.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/面试记录/暑期实习/阿里云/Pasted image 20230301112124.png -------------------------------------------------------------------------------- /docs/面试记录/暑期实习/阿里云/Pasted image 20230301112258.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/docs/面试记录/暑期实习/阿里云/Pasted image 20230301112258.png -------------------------------------------------------------------------------- /docs/项目/README.md: -------------------------------------------------------------------------------- 1 | --- 2 | sidebar_position: 5 3 | --- 4 | 5 | # 项目 6 | -------------------------------------------------------------------------------- /docs/项目/Scheme Interpreter/README.md: -------------------------------------------------------------------------------- 1 | # Scheme 解释器 2 | 3 | 设计 Expression 数据结构时,使用 `std::variant` 数据结构,每一项在逻辑上都应该是 `Expression`,例如 `1` 是 expression,`+` 是 expression,`Eval` 用于计算 `Expression`,所以 `Eval` 中不应该存在对 token 的解析过程,这部分必须由 `parser` 完成,同时,计算的结果也应该是 `Expression`。 4 | 5 | `Eval` 计算时,对于用户自定义的 `procedure`,必须新建一个 `Environment`,然后在这个环境之中绑定相关参数。 6 | -------------------------------------------------------------------------------- /static/.nojekyll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/static/.nojekyll -------------------------------------------------------------------------------- /static/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Civitasv/cpp/d0bf39930e0f3a7f3a79f357bd9b9c23eb04db71/static/img/favicon.ico --------------------------------------------------------------------------------