{"id":28966162,"url":"https://github.com/hblvsjtu/java_interview_study","last_synced_at":"2025-07-09T23:04:21.703Z","repository":{"id":125647404,"uuid":"181649450","full_name":"hblvsjtu/Java_Interview_Study","owner":"hblvsjtu","description":"之前一直再看类似于Java编程思想、核心技术等书籍，但是理论终归是理论，还需要看看市场上所需要掌握的技术到底是什么。所以后面将会以Java面试作为主线，加强面试能力和算法能力，希望有一个好的结果^_ ^","archived":false,"fork":false,"pushed_at":"2019-05-01T15:56:11.000Z","size":4404,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-06-24T07:11:28.495Z","etag":null,"topics":["interview","java"],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hblvsjtu.png","metadata":{"files":{"readme":"README.html","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-04-16T08:39:22.000Z","updated_at":"2019-09-30T07:37:18.000Z","dependencies_parsed_at":null,"dependency_job_id":"550e468d-2c19-4089-a60d-4660ad2dfcf2","html_url":"https://github.com/hblvsjtu/Java_Interview_Study","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/hblvsjtu/Java_Interview_Study","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hblvsjtu%2FJava_Interview_Study","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hblvsjtu%2FJava_Interview_Study/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hblvsjtu%2FJava_Interview_Study/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hblvsjtu%2FJava_Interview_Study/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hblvsjtu","download_url":"https://codeload.github.com/hblvsjtu/Java_Interview_Study/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hblvsjtu%2FJava_Interview_Study/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264504929,"owners_count":23618870,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["interview","java"],"created_at":"2025-06-24T07:10:59.364Z","updated_at":"2025-07-09T23:04:21.696Z","avatar_url":"https://github.com/hblvsjtu.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!DOCTYPE html\u003e\u003chtml\u003e\u003chead\u003e\u003cmeta charset=\"utf-8\"\u003e\u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1\"\u003e\u003cstyle\u003ebody {\n  max-width: 980px;\n  border: 1px solid #ddd;\n  outline: 1300px solid #fff;\n  margin: 16px auto;\n}\n\nbody .markdown-body\n{\n  padding: 45px;\n}\n\n@font-face {\n  font-family: fontawesome-mini;\n  src: url(data:font/woff;charset=utf-8;base64,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) format('woff');\n}\n\n.markdown-body {\n  font-family: sans-serif;\n  -ms-text-size-adjust: 100%;\n  -webkit-text-size-adjust: 100%;\n  color: #333333;\n  overflow: hidden;\n  font-family: \"Helvetica Neue\", Helvetica, \"Segoe UI\", Arial, freesans, sans-serif;\n  font-size: 16px;\n  line-height: 1.6;\n  word-wrap: break-word;\n}\n\n.markdown-body a {\n  background: transparent;\n}\n\n.markdown-body a:active,\n.markdown-body a:hover {\n  outline: 0;\n}\n\n.markdown-body b,\n.markdown-body strong {\n  font-weight: bold;\n}\n\n.markdown-body mark {\n  background: #ff0;\n  color: #000;\n  font-style: italic;\n  font-weight: bold;\n}\n\n.markdown-body sub,\n.markdown-body sup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n.markdown-body sup {\n  top: -0.5em;\n}\n.markdown-body sub {\n  bottom: -0.25em;\n}\n\n.markdown-body h1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\n\n.markdown-body img {\n  border: 0;\n}\n\n.markdown-body hr {\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  height: 0;\n}\n\n.markdown-body pre {\n  overflow: auto;\n}\n\n.markdown-body code,\n.markdown-body kbd,\n.markdown-body pre,\n.markdown-body samp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\n\n.markdown-body input {\n  color: inherit;\n  font: inherit;\n  margin: 0;\n}\n\n.markdown-body html input[disabled] {\n  cursor: default;\n}\n\n.markdown-body input {\n  line-height: normal;\n}\n\n.markdown-body input[type=\"checkbox\"] {\n  box-sizing: border-box;\n  padding: 0;\n}\n\n.markdown-body table {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\n\n.markdown-body td,\n.markdown-body th {\n  padding: 0;\n}\n\n.markdown-body .codehilitetable {\n  border: 0;\n  border-spacing: 0;\n}\n\n.markdown-body .codehilitetable tr {\n  border: 0;\n}\n\n.markdown-body .codehilitetable pre,\n.markdown-body .codehilitetable div.codehilite {\n  margin: 0;\n}\n\n.markdown-body .linenos,\n.markdown-body .code,\n.markdown-body .codehilitetable td {\n  border: 0;\n  padding: 0;\n}\n\n.markdown-body td:not(.linenos) .linenodiv {\n  padding: 0 !important;\n}\n\n.markdown-body .code {\n  width: 100%;\n}\n\n.markdown-body .linenos div pre,\n.markdown-body .linenodiv pre,\n.markdown-body .linenodiv {\n  border: 0;\n  -webkit-border-radius: 0;\n  -moz-border-radius: 0;\n  border-radius: 0;\n  -webkit-border-top-left-radius: 3px;\n  -webkit-border-bottom-left-radius: 3px;\n  -moz-border-radius-topleft: 3px;\n  -moz-border-radius-bottomleft: 3px;\n  border-top-left-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n\n.markdown-body .code div pre,\n.markdown-body .code div {\n  border: 0;\n  -webkit-border-radius: 0;\n  -moz-border-radius: 0;\n  border-radius: 0;\n  -webkit-border-top-right-radius: 3px;\n  -webkit-border-bottom-right-radius: 3px;\n  -moz-border-radius-topright: 3px;\n  -moz-border-radius-bottomright: 3px;\n  border-top-right-radius: 3px;\n  border-bottom-right-radius: 3px;\n}\n\n.markdown-body * {\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\n\n.markdown-body input {\n  font: 13px Helvetica, arial, freesans, clean, sans-serif, \"Segoe UI Emoji\", \"Segoe UI Symbol\";\n  line-height: 1.4;\n}\n\n.markdown-body a {\n  color: #4183c4;\n  text-decoration: none;\n}\n\n.markdown-body a:hover,\n.markdown-body a:focus,\n.markdown-body a:active {\n  text-decoration: underline;\n}\n\n.markdown-body hr {\n  height: 0;\n  margin: 15px 0;\n  overflow: hidden;\n  background: transparent;\n  border: 0;\n  border-bottom: 1px solid #ddd;\n}\n\n.markdown-body hr:before,\n.markdown-body hr:after {\n  display: table;\n  content: \" \";\n}\n\n.markdown-body hr:after {\n  clear: both;\n}\n\n.markdown-body h1,\n.markdown-body h2,\n.markdown-body h3,\n.markdown-body h4,\n.markdown-body h5,\n.markdown-body h6 {\n  margin-top: 15px;\n  margin-bottom: 15px;\n  line-height: 1.1;\n}\n\n.markdown-body h1 {\n  font-size: 30px;\n}\n\n.markdown-body h2 {\n  font-size: 21px;\n}\n\n.markdown-body h3 {\n  font-size: 16px;\n}\n\n.markdown-body h4 {\n  font-size: 14px;\n}\n\n.markdown-body h5 {\n  font-size: 12px;\n}\n\n.markdown-body h6 {\n  font-size: 11px;\n}\n\n.markdown-body blockquote {\n  margin: 0;\n}\n\n.markdown-body ul,\n.markdown-body ol {\n  padding: 0;\n  margin-top: 0;\n  margin-bottom: 0;\n}\n\n.markdown-body ol ol,\n.markdown-body ul ol {\n  list-style-type: lower-roman;\n}\n\n.markdown-body ul ul ol,\n.markdown-body ul ol ol,\n.markdown-body ol ul ol,\n.markdown-body ol ol ol {\n  list-style-type: lower-alpha;\n}\n\n.markdown-body dd {\n  margin-left: 0;\n}\n\n.markdown-body code,\n.markdown-body pre,\n.markdown-body samp {\n  font-family: Consolas, \"Liberation Mono\", Menlo, Courier, monospace;\n  font-size: 12px;\n}\n\n.markdown-body pre {\n  margin-top: 0;\n  margin-bottom: 0;\n}\n\n.markdown-body kbd {\n  background-color: #e7e7e7;\n  background-image: -moz-linear-gradient(#fefefe, #e7e7e7);\n  background-image: -webkit-linear-gradient(#fefefe, #e7e7e7);\n  background-image: linear-gradient(#fefefe, #e7e7e7);\n  background-repeat: repeat-x;\n  border-radius: 2px;\n  border: 1px solid #cfcfcf;\n  color: #000;\n  padding: 3px 5px;\n  line-height: 10px;\n  font: 11px Consolas, \"Liberation Mono\", Menlo, Courier, monospace;\n  display: inline-block;\n}\n\n.markdown-body\u003e*:first-child {\n  margin-top: 0 !important;\n}\n\n.markdown-body\u003e*:last-child {\n  margin-bottom: 0 !important;\n}\n\n.markdown-body .headerlink {\n  font: normal 400 16px fontawesome-mini;\n  vertical-align: middle;\n  margin-left: -16px;\n  float: left;\n  display: inline-block;\n  text-decoration: none;\n  opacity: 0;\n  color: #333;\n}\n\n.markdown-body .headerlink:focus {\n  outline: none;\n}\n\n.markdown-body h1 .headerlink {\n  margin-top: 0.8rem;\n}\n\n.markdown-body h2 .headerlink,\n.markdown-body h3 .headerlink {\n  margin-top: 0.6rem;\n}\n\n.markdown-body h4 .headerlink {\n  margin-top: 0.2rem;\n}\n\n.markdown-body h5 .headerlink,\n.markdown-body h6 .headerlink {\n  margin-top: 0;\n}\n\n.markdown-body .headerlink:hover,\n.markdown-body h1:hover .headerlink,\n.markdown-body h2:hover .headerlink,\n.markdown-body h3:hover .headerlink,\n.markdown-body h4:hover .headerlink,\n.markdown-body h5:hover .headerlink,\n.markdown-body h6:hover .headerlink {\n  opacity: 1;\n  text-decoration: none;\n}\n\n.markdown-body h1 {\n  padding-bottom: 0.3em;\n  font-size: 2.25em;\n  line-height: 1.2;\n  border-bottom: 1px solid #eee;\n}\n\n.markdown-body h2 {\n  padding-bottom: 0.3em;\n  font-size: 1.75em;\n  line-height: 1.225;\n  border-bottom: 1px solid #eee;\n}\n\n.markdown-body h3 {\n  font-size: 1.5em;\n  line-height: 1.43;\n}\n\n.markdown-body h4 {\n  font-size: 1.25em;\n}\n\n.markdown-body h5 {\n  font-size: 1em;\n}\n\n.markdown-body h6 {\n  font-size: 1em;\n  color: #777;\n}\n\n.markdown-body p,\n.markdown-body blockquote,\n.markdown-body ul,\n.markdown-body ol,\n.markdown-body dl,\n.markdown-body table,\n.markdown-body pre,\n.markdown-body .admonition {\n  margin-top: 0;\n  margin-bottom: 16px;\n}\n\n.markdown-body hr {\n  height: 4px;\n  padding: 0;\n  margin: 16px 0;\n  background-color: #e7e7e7;\n  border: 0 none;\n}\n\n.markdown-body ul,\n.markdown-body ol {\n  padding-left: 2em;\n}\n\n.markdown-body ul ul,\n.markdown-body ul ol,\n.markdown-body ol ol,\n.markdown-body ol ul {\n  margin-top: 0;\n  margin-bottom: 0;\n}\n\n.markdown-body li\u003ep {\n  margin-top: 16px;\n}\n\n.markdown-body dl {\n  padding: 0;\n}\n\n.markdown-body dl dt {\n  padding: 0;\n  margin-top: 16px;\n  font-size: 1em;\n  font-style: italic;\n  font-weight: bold;\n}\n\n.markdown-body dl dd {\n  padding: 0 16px;\n  margin-bottom: 16px;\n}\n\n.markdown-body blockquote {\n  padding: 0 15px;\n  color: #777;\n  border-left: 4px solid #ddd;\n}\n\n.markdown-body blockquote\u003e:first-child {\n  margin-top: 0;\n}\n\n.markdown-body blockquote\u003e:last-child {\n  margin-bottom: 0;\n}\n\n.markdown-body table {\n  display: block;\n  width: 100%;\n  overflow: auto;\n  word-break: normal;\n  word-break: keep-all;\n}\n\n.markdown-body table th {\n  font-weight: bold;\n}\n\n.markdown-body table th,\n.markdown-body table td {\n  padding: 6px 13px;\n  border: 1px solid #ddd;\n}\n\n.markdown-body table tr {\n  background-color: #fff;\n  border-top: 1px solid #ccc;\n}\n\n.markdown-body table tr:nth-child(2n) {\n  background-color: #f8f8f8;\n}\n\n.markdown-body img {\n  max-width: 100%;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\n\n.markdown-body code,\n.markdown-body samp {\n  padding: 0;\n  padding-top: 0.2em;\n  padding-bottom: 0.2em;\n  margin: 0;\n  font-size: 85%;\n  background-color: rgba(0,0,0,0.04);\n  border-radius: 3px;\n}\n\n.markdown-body code:before,\n.markdown-body code:after {\n  letter-spacing: -0.2em;\n  content: \"\\00a0\";\n}\n\n.markdown-body pre\u003ecode {\n  padding: 0;\n  margin: 0;\n  font-size: 100%;\n  word-break: normal;\n  white-space: pre;\n  background: transparent;\n  border: 0;\n}\n\n.markdown-body .codehilite {\n  margin-bottom: 16px;\n}\n\n.markdown-body .codehilite pre,\n.markdown-body pre {\n  padding: 16px;\n  overflow: auto;\n  font-size: 85%;\n  line-height: 1.45;\n  background-color: #f7f7f7;\n  border-radius: 3px;\n}\n\n.markdown-body .codehilite pre {\n  margin-bottom: 0;\n  word-break: normal;\n}\n\n.markdown-body pre {\n  word-wrap: normal;\n}\n\n.markdown-body pre code {\n  display: inline;\n  max-width: initial;\n  padding: 0;\n  margin: 0;\n  overflow: initial;\n  line-height: inherit;\n  word-wrap: normal;\n  background-color: transparent;\n  border: 0;\n}\n\n.markdown-body pre code:before,\n.markdown-body pre code:after {\n  content: normal;\n}\n\n/* Admonition */\n.markdown-body .admonition {\n  -webkit-border-radius: 3px;\n  -moz-border-radius: 3px;\n  position: relative;\n  border-radius: 3px;\n  border: 1px solid #e0e0e0;\n  border-left: 6px solid #333;\n  padding: 10px 10px 10px 30px;\n}\n\n.markdown-body .admonition table {\n  color: #333;\n}\n\n.markdown-body .admonition p {\n  padding: 0;\n}\n\n.markdown-body .admonition-title {\n  font-weight: bold;\n  margin: 0;\n}\n\n.markdown-body .admonition\u003e.admonition-title {\n  color: #333;\n}\n\n.markdown-body .attention\u003e.admonition-title {\n  color: #a6d796;\n}\n\n.markdown-body .caution\u003e.admonition-title {\n  color: #d7a796;\n}\n\n.markdown-body .hint\u003e.admonition-title {\n  color: #96c6d7;\n}\n\n.markdown-body .danger\u003e.admonition-title {\n  color: #c25f77;\n}\n\n.markdown-body .question\u003e.admonition-title {\n  color: #96a6d7;\n}\n\n.markdown-body .note\u003e.admonition-title {\n  color: #d7c896;\n}\n\n.markdown-body .admonition:before,\n.markdown-body .attention:before,\n.markdown-body .caution:before,\n.markdown-body .hint:before,\n.markdown-body .danger:before,\n.markdown-body .question:before,\n.markdown-body .note:before {\n  font: normal normal 16px fontawesome-mini;\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  line-height: 1.5;\n  color: #333;\n  position: absolute;\n  left: 0;\n  top: 0;\n  padding-top: 10px;\n  padding-left: 10px;\n}\n\n.markdown-body .admonition:before {\n  content: \"\\f056\\00a0\";\n  color: 333;\n}\n\n.markdown-body .attention:before {\n  content: \"\\f058\\00a0\";\n  color: #a6d796;\n}\n\n.markdown-body .caution:before {\n  content: \"\\f06a\\00a0\";\n  color: #d7a796;\n}\n\n.markdown-body .hint:before {\n  content: \"\\f05a\\00a0\";\n  color: #96c6d7;\n}\n\n.markdown-body .danger:before {\n  content: \"\\f057\\00a0\";\n  color: #c25f77;\n}\n\n.markdown-body .question:before {\n  content: \"\\f059\\00a0\";\n  color: #96a6d7;\n}\n\n.markdown-body .note:before {\n  content: \"\\f040\\00a0\";\n  color: #d7c896;\n}\n\n.markdown-body .admonition::after {\n  content: normal;\n}\n\n.markdown-body .attention {\n  border-left: 6px solid #a6d796;\n}\n\n.markdown-body .caution {\n  border-left: 6px solid #d7a796;\n}\n\n.markdown-body .hint {\n  border-left: 6px solid #96c6d7;\n}\n\n.markdown-body .danger {\n  border-left: 6px solid #c25f77;\n}\n\n.markdown-body .question {\n  border-left: 6px solid #96a6d7;\n}\n\n.markdown-body .note {\n  border-left: 6px solid #d7c896;\n}\n\n.markdown-body .admonition\u003e*:first-child {\n  margin-top: 0 !important;\n}\n\n.markdown-body .admonition\u003e*:last-child {\n  margin-bottom: 0 !important;\n}\n\n/* progress bar*/\n.markdown-body .progress {\n  display: block;\n  width: 300px;\n  margin: 10px 0;\n  height: 24px;\n  -webkit-border-radius: 3px;\n  -moz-border-radius: 3px;\n  border-radius: 3px;\n  background-color: #ededed;\n  position: relative;\n  box-shadow: inset -1px 1px 3px rgba(0, 0, 0, .1);\n}\n\n.markdown-body .progress-label {\n  position: absolute;\n  text-align: center;\n  font-weight: bold;\n  width: 100%; margin: 0;\n  line-height: 24px;\n  color: #333;\n  text-shadow: 1px 1px 0 #fefefe, -1px -1px 0 #fefefe, -1px 1px 0 #fefefe, 1px -1px 0 #fefefe, 0 1px 0 #fefefe, 0 -1px 0 #fefefe, 1px 0 0 #fefefe, -1px 0 0 #fefefe, 1px 1px 2px #000;\n  -webkit-font-smoothing: antialiased !important;\n  white-space: nowrap;\n  overflow: hidden;\n}\n\n.markdown-body .progress-bar {\n  height: 24px;\n  float: left;\n  -webkit-border-radius: 3px;\n  -moz-border-radius: 3px;\n  border-radius: 3px;\n  background-color: #96c6d7;\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .5), inset 0 -1px 0 rgba(0, 0, 0, .1);\n  background-size: 30px 30px;\n  background-image: -webkit-linear-gradient(\n    135deg, rgba(255, 255, 255, .4) 27%,\n    transparent 27%,\n    transparent 52%, rgba(255, 255, 255, .4) 52%,\n    rgba(255, 255, 255, .4) 77%,\n    transparent 77%, transparent\n  );\n  background-image: -moz-linear-gradient(\n    135deg,\n    rgba(255, 255, 255, .4) 27%, transparent 27%,\n    transparent 52%, rgba(255, 255, 255, .4) 52%,\n    rgba(255, 255, 255, .4) 77%, transparent 77%,\n    transparent\n  );\n  background-image: -ms-linear-gradient(\n    135deg,\n    rgba(255, 255, 255, .4) 27%, transparent 27%,\n    transparent 52%, rgba(255, 255, 255, .4) 52%,\n    rgba(255, 255, 255, .4) 77%, transparent 77%,\n    transparent\n  );\n  background-image: -o-linear-gradient(\n    135deg,\n    rgba(255, 255, 255, .4) 27%, transparent 27%,\n    transparent 52%, rgba(255, 255, 255, .4) 52%,\n    rgba(255, 255, 255, .4) 77%, transparent 77%,\n    transparent\n  );\n  background-image: linear-gradient(\n    135deg,\n    rgba(255, 255, 255, .4) 27%, transparent 27%,\n    transparent 52%, rgba(255, 255, 255, .4) 52%,\n    rgba(255, 255, 255, .4) 77%, transparent 77%,\n    transparent\n  );\n}\n\n.markdown-body .progress-100plus .progress-bar {\n  background-color: #a6d796;\n}\n\n.markdown-body .progress-80plus .progress-bar {\n  background-color: #c6d796;\n}\n\n.markdown-body .progress-60plus .progress-bar {\n  background-color: #d7c896;\n}\n\n.markdown-body .progress-40plus .progress-bar {\n  background-color: #d7a796;\n}\n\n.markdown-body .progress-20plus .progress-bar {\n  background-color: #d796a6;\n}\n\n.markdown-body .progress-0plus .progress-bar {\n  background-color: #c25f77;\n}\n\n.markdown-body .candystripe-animate .progress-bar{\n  -webkit-animation: animate-stripes 3s linear infinite;\n  -moz-animation: animate-stripes 3s linear infinite;\n  animation: animate-stripes 3s linear infinite;\n}\n\n@-webkit-keyframes animate-stripes {\n  0% {\n    background-position: 0 0;\n  }\n\n  100% {\n    background-position: 60px 0;\n  }\n}\n\n@-moz-keyframes animate-stripes {\n  0% {\n    background-position: 0 0;\n  }\n\n  100% {\n    background-position: 60px 0;\n  }\n}\n\n@keyframes animate-stripes {\n  0% {\n    background-position: 0 0;\n  }\n\n  100% {\n    background-position: 60px 0;\n  }\n}\n\n.markdown-body .gloss .progress-bar {\n  box-shadow:\n    inset 0 4px 12px rgba(255, 255, 255, .7),\n    inset 0 -12px 0 rgba(0, 0, 0, .05);\n}\n\n/* MultiMarkdown Critic Blocks */\n.markdown-body .critic_mark {\n  background: #ff0;\n}\n\n.markdown-body .critic_delete {\n  color: #c82829;\n  text-decoration: line-through;\n}\n\n.markdown-body .critic_insert {\n  color: #718c00 ;\n  text-decoration: underline;\n}\n\n.markdown-body .critic_comment {\n  color: #8e908c;\n  font-style: italic;\n}\n\n.markdown-body .headeranchor {\n  font: normal normal 16px fontawesome-mini;\n  line-height: 1;\n  display: inline-block;\n  text-decoration: none;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n\n.headeranchor:before {\n  content: '\\e157';\n}\n\n.markdown-body .task-list-item {\n  list-style-type: none;\n}\n\n.markdown-body .task-list-item+.task-list-item {\n  margin-top: 3px;\n}\n\n.markdown-body .task-list-item input {\n  margin: 0 4px 0.25em -20px;\n  vertical-align: middle;\n}\n\n/* Media */\n@media only screen and (min-width: 480px) {\n  .markdown-body {\n    font-size:14px;\n  }\n}\n\n@media only screen and (min-width: 768px) {\n  .markdown-body {\n    font-size:16px;\n  }\n}\n\n@media print {\n  .markdown-body * {\n    background: transparent !important;\n    color: black !important;\n    filter:none !important;\n    -ms-filter: none !important;\n  }\n\n  .markdown-body {\n    font-size:12pt;\n    max-width:100%;\n    outline:none;\n    border: 0;\n  }\n\n  .markdown-body a,\n  .markdown-body a:visited {\n    text-decoration: underline;\n  }\n\n  .markdown-body .headeranchor-link {\n    display: none;\n  }\n\n  .markdown-body a[href]:after {\n    content: \" (\" attr(href) \")\";\n  }\n\n  .markdown-body abbr[title]:after {\n    content: \" (\" attr(title) \")\";\n  }\n\n  .markdown-body .ir a:after,\n  .markdown-body a[href^=\"javascript:\"]:after,\n  .markdown-body a[href^=\"#\"]:after {\n    content: \"\";\n  }\n\n  .markdown-body pre {\n    white-space: pre;\n    white-space: pre-wrap;\n    word-wrap: break-word;\n  }\n\n  .markdown-body pre,\n  .markdown-body blockquote {\n    border: 1px solid #999;\n    padding-right: 1em;\n    page-break-inside: avoid;\n  }\n\n  .markdown-body .progress,\n  .markdown-body .progress-bar {\n    -moz-box-shadow: none;\n    -webkit-box-shadow: none;\n    box-shadow: none;\n  }\n\n  .markdown-body .progress {\n    border: 1px solid #ddd;\n  }\n\n  .markdown-body .progress-bar {\n    height: 22px;\n    border-right: 1px solid #ddd;\n  }\n\n  .markdown-body tr,\n  .markdown-body img {\n    page-break-inside: avoid;\n  }\n\n  .markdown-body img {\n    max-width: 100% !important;\n  }\n\n  .markdown-body p,\n  .markdown-body h2,\n  .markdown-body h3 {\n    orphans: 3;\n    widows: 3;\n  }\n\n  .markdown-body h2,\n  .markdown-body h3 {\n    page-break-after: avoid;\n  }\n}\n\u003c/style\u003e\u003cstyle\u003e/*GitHub*/\n.codehilite {background-color:#fff;color:#333333;}\n.codehilite .hll {background-color:#ffffcc;}\n.codehilite .c{color:#999988;font-style:italic}\n.codehilite .err{color:#a61717;background-color:#e3d2d2}\n.codehilite .k{font-weight:bold}\n.codehilite .o{font-weight:bold}\n.codehilite .cm{color:#999988;font-style:italic}\n.codehilite .cp{color:#999999;font-weight:bold}\n.codehilite .c1{color:#999988;font-style:italic}\n.codehilite .cs{color:#999999;font-weight:bold;font-style:italic}\n.codehilite .gd{color:#000000;background-color:#ffdddd}\n.codehilite .ge{font-style:italic}\n.codehilite .gr{color:#aa0000}\n.codehilite .gh{color:#999999}\n.codehilite .gi{color:#000000;background-color:#ddffdd}\n.codehilite .go{color:#888888}\n.codehilite .gp{color:#555555}\n.codehilite .gs{font-weight:bold}\n.codehilite .gu{color:#800080;font-weight:bold}\n.codehilite .gt{color:#aa0000}\n.codehilite .kc{font-weight:bold}\n.codehilite .kd{font-weight:bold}\n.codehilite .kn{font-weight:bold}\n.codehilite .kp{font-weight:bold}\n.codehilite .kr{font-weight:bold}\n.codehilite .kt{color:#445588;font-weight:bold}\n.codehilite .m{color:#009999}\n.codehilite .s{color:#dd1144}\n.codehilite .n{color:#333333}\n.codehilite .na{color:teal}\n.codehilite .nb{color:#0086b3}\n.codehilite .nc{color:#445588;font-weight:bold}\n.codehilite .no{color:teal}\n.codehilite .ni{color:purple}\n.codehilite .ne{color:#990000;font-weight:bold}\n.codehilite .nf{color:#990000;font-weight:bold}\n.codehilite .nn{color:#555555}\n.codehilite .nt{color:navy}\n.codehilite .nv{color:teal}\n.codehilite .ow{font-weight:bold}\n.codehilite .w{color:#bbbbbb}\n.codehilite .mf{color:#009999}\n.codehilite .mh{color:#009999}\n.codehilite .mi{color:#009999}\n.codehilite .mo{color:#009999}\n.codehilite .sb{color:#dd1144}\n.codehilite .sc{color:#dd1144}\n.codehilite .sd{color:#dd1144}\n.codehilite .s2{color:#dd1144}\n.codehilite .se{color:#dd1144}\n.codehilite .sh{color:#dd1144}\n.codehilite .si{color:#dd1144}\n.codehilite .sx{color:#dd1144}\n.codehilite .sr{color:#009926}\n.codehilite .s1{color:#dd1144}\n.codehilite .ss{color:#990073}\n.codehilite .bp{color:#999999}\n.codehilite .vc{color:teal}\n.codehilite .vg{color:teal}\n.codehilite .vi{color:teal}\n.codehilite .il{color:#009999}\n.codehilite .gc{color:#999;background-color:#EAF2F5}\n\u003c/style\u003e\u003ctitle\u003eREADME\u003c/title\u003e\u003c/head\u003e\u003cbody\u003e\u003carticle class=\"markdown-body\"\u003e\u003ch1 id=\"java_interview_study\"\u003eJava_Interview_Study\u003ca class=\"headerlink\" href=\"#java_interview_study\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h1\u003e\n\u003ch2 id=\"_1\"\u003e作者：冰红茶\u003ca class=\"headerlink\" href=\"#_1\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h2\u003e\n\u003ch2 id=\"java4-offer\"\u003e参考书籍：《Java面试宝典》第4版 《剑指Offer》\u003ca class=\"headerlink\" href=\"#java4-offer\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h2\u003e\n\u003chr /\u003e\n\u003cp\u003e之前一直再看类似于Java编程思想、核心技术等书籍，但是理论终归是理论，还需要看看市场上所需要掌握的技术到底是什么。所以后面将会以Java面试作为主线，加强面试能力和算法能力，希望有一个好的结果^_ ^\u003c/p\u003e\n\u003ch2 id=\"_2\"\u003e目录\u003ca class=\"headerlink\" href=\"#_2\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h2\u003e\n\u003ch2 id=\"java\"\u003e\u003ca href=\"#1\"\u003e一、Java程序设计基本概念\u003c/a\u003e\u003ca class=\"headerlink\" href=\"#java\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"11-jvm\"\u003e\u003ca href=\"#1.1\"\u003e1.1 JVM\u003c/a\u003e\u003ca class=\"headerlink\" href=\"#11-jvm\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h3\u003e\n\u003ch3 id=\"12-i\"\u003e\u003ca href=\"#1.2\"\u003e1.2 类型转换、i++和运算符\u003c/a\u003e\u003ca class=\"headerlink\" href=\"#12-i\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h3\u003e\n\u003ch3 id=\"13\"\u003e\u003ca href=\"#1.3\"\u003e1.3 异常\u003c/a\u003e\u003ca class=\"headerlink\" href=\"#13\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h3\u003e\n\u003ch2 id=\"_3\"\u003e\u003ca href=\"#2\"\u003e二、传递与引用和循环\u003c/a\u003e\u003ca class=\"headerlink\" href=\"#_3\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"21\"\u003e\u003ca href=\"#2.1\"\u003e2.1 传值与引用\u003c/a\u003e\u003ca class=\"headerlink\" href=\"#21\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h3\u003e\n\u003ch3 id=\"22\"\u003e\u003ca href=\"#2.2\"\u003e2.2 静态变量和私有变量\u003c/a\u003e\u003ca class=\"headerlink\" href=\"#22\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h3\u003e\n\u003ch3 id=\"23\"\u003e\u003ca href=\"#2.3\"\u003e2.3 输入/输出流和序列化\u003c/a\u003e\u003ca class=\"headerlink\" href=\"#23\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h3\u003e\n\u003ch3 id=\"24\"\u003e\u003ca href=\"#2.4\"\u003e2.4 典型的递归问题\u003c/a\u003e\u003ca class=\"headerlink\" href=\"#24\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h3\u003e\n\u003ch2 id=\"java_1\"\u003e\u003ca href=\"#3\"\u003e三、Java内存管理\u003c/a\u003e\u003ca class=\"headerlink\" href=\"#java_1\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"31\"\u003e\u003ca href=\"#3.1\"\u003e3.1 典型的递归问题\u003c/a\u003e\u003ca class=\"headerlink\" href=\"#31\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h3\u003e\n\u003ch3 id=\"22-clone\"\u003e\u003ca href=\"#3.2\"\u003e2.2 clone\u003c/a\u003e\u003ca class=\"headerlink\" href=\"#22-clone\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h3\u003e\n\u003ch3 id=\"23_1\"\u003e\u003ca href=\"#3.3\"\u003e2.3 输入/输出流和序列化\u003c/a\u003e\u003ca class=\"headerlink\" href=\"#23_1\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h3\u003e\n\u003ch2 id=\"_4\"\u003e\u003ca href=\"#3\"\u003e四、面向对象\u003c/a\u003e\u003ca class=\"headerlink\" href=\"#_4\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h2\u003e\n\u003ch3 id=\"41\"\u003e\u003ca href=\"#4.1\"\u003e4.1 典型的递归问题\u003c/a\u003e\u003ca class=\"headerlink\" href=\"#41\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h3\u003e\n\u003ch3 id=\"42-clone\"\u003e\u003ca href=\"#4.2\"\u003e4.2 clone\u003c/a\u003e\u003ca class=\"headerlink\" href=\"#42-clone\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h3\u003e\n\u003chr /\u003e\n\u003ch2 id='1'\u003e一、Java程序设计基本概念\u003c/h2\u003e\n\n\u003ch3 id='1.1'\u003e1.1 JVM\u003c/h3\u003e\n\n\u003ch4 id=\"1-classloader\"\u003e1) ClassLoader\u003ca class=\"headerlink\" href=\"#1-classloader\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h4\u003e\n\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003eClassLoader在JVM运行的时候加载Java核心的API和用户自定义的类；\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003ebootstrap classloader 启动类加载器\u003c/li\u003e\n\u003cli\u003eclassloader 用户定义加载器\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003eExtClassLoader 用来加载Java拓展API，也就是/lib/ext\u003c/li\u003e\n\u003cli\u003eAppClassLoader 用来加载用户自定义类\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/li\u003e\n\u003cli\u003e加载流程：当运行一个程序的时候，JVM启动，运行bootstrap classloader，该ClassLoader加载核心API（ExtClassLoader和AppClassLoader）也在此时候被加载，然后调用ExtClassLoader加载拓展API，最后AppClassLoader加载CLASSPATH目录下定义的Class\u003c/li\u003e\n\u003cli\u003eJVM加载类的三个步骤\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003e装载 找到相应的class，读入JVM\u003c/li\u003e\n\u003cli\u003e连接 分成三个阶段：验证class是否符合规格；准备，就是为类变量分配内存的同时设置默认初始值；解释，这里的解释是指根据类中的符号引用查找相应的实体，再把符号引用替换成一个直接引用的过程。\u003c/li\u003e\n\u003cli\u003e初始化 class文件的初始化\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/li\u003e\n\u003cli\u003e类加载的这种关系称为双亲委派模式，需要注意的是他们之间不是继承关系，而是组合关系，在执行类加载的动作时，首先都是交给父类去加载，如果父类无法加载再交给子类去完成，直到调用用户自定义的类加载器去加载，如果全部都无法加载，就会抛出ClassNotFoundException。\u003ca href=\"https://blog.csdn.net/caomiao2006/article/details/47735245\"\u003e出处\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e父类委托 超类被加载后，子类的Classloader没必要再加载一次，如果没有超类（即自己就是超类）时，就使用bootstrap classloader进行加载。原因有二：\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003e这样做可以避免重复加载\u003c/li\u003e\n\u003cli\u003e考虑到安全的因素。 如果不采用这种方式，用户就可以自己加载String类来动态代替Java的核心API定义的类型，这样会存在很大的安全隐患。这由于采用了父类委托，String已经在启动的时候被加载，所以用户自定义类无法加载一个自定义的ClassLoader\u003cblockquote\u003e\n\u003cblockquote\u003e\n\u003cblockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cimg alt=\"图1-1 Java类加载器.png\" src=\"https://github.com/hblvsjtu/Java_Interview_Study/blob/master/picture/%E5%9B%BE1-1%20Java%E7%B1%BB%E5%8A%A0%E8%BD%BD%E5%99%A8.png?raw=true\" /\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/blockquote\u003e\n\u003c/blockquote\u003e\n\u003c/blockquote\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e一些重要的方法\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003eloadClass \u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"codehilite\"\u003e\u003cpre\u003e            class loadClass(String name, boolean resolve)\n\u003c/pre\u003e\u003c/div\u003e\n\n\n\u003cblockquote\u003e\n\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003edefineClass 将原始字节组成的数组转换成class对象，并且是final的无法被覆盖\u003c/li\u003e\n\u003cli\u003efindSystemClass 从本地文件中寻找类文件，如果存在，则使用defineClass转换称class对象\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"codehilite\"\u003e\u003cpre\u003e            public class findClass(String name) {\n                byte[] data = loadClassData(name);\n                return defineClass(name, data, 0, data.length);\n            }\n\u003c/pre\u003e\u003c/div\u003e\n\n\n\u003cblockquote\u003e\n\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003efindClass Java的自定义加载器 loadClass默认实现调用这个新方法，寻找所有Classload的特殊代码。findClass（）用于写类加载逻辑、loadClass（）方法的逻辑里如果父类加载器加载失败则会调用自己的findClass（）方法完成加载，保证了双亲委派规则。如果不想打破双亲委派模型，那么只需要重写findClass方法即可。如果想打破双亲委派模型，那么就重写整个loadClass方法。\u003ca href=\"https://blog.csdn.net/cqc__c/article/details/81583877\"\u003ecqc__c的CSDN\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eforName(name, initialize, loader)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"codehilite\"\u003e\u003cpre\u003e            Class.forNmae(\u0026quot;something\u0026quot;, true, CALLCLASS.class.getClassLoader());\n\u003c/pre\u003e\u003c/div\u003e\n\n\n\u003ch4 id=\"2-unicode\"\u003e2) Unicode\u003ca class=\"headerlink\" href=\"#2-unicode\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h4\u003e\n\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003eJava中字符只以一种形式存在，那就是Unicode\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"codehilite\"\u003e\u003cpre\u003e            char han = \u0026#39;永\u0026#39;；\n            System.out.printf(\u0026quot;%x\u0026quot;, (short)han);\n\n            // 0x6c38\n\u003c/pre\u003e\u003c/div\u003e\n\n\n\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003eJVM约定字符只分为两个部分，JVM内部和OS文件系统的，在JVM内部统一使用Unicode，当字符被输入输出的时候，就会进行编码转换。也就是说，编码转换只会发生在边界的地方。而I/O也分两大阵型，一个是面向字符，另一个是面向字节\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e面向类型\u003c/th\u003e\n\u003cth\u003e特点\u003c/th\u003e\n\u003cth\u003e使用范围\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e字节\u003c/td\u003e\n\u003ctd\u003e保证系统中文件的二进制内容和读入JVM内部的二进制内容一致，不进行编码转换\u003c/td\u003e\n\u003ctd\u003e视频或者音频文件 InputStream和OutputStream类为后缀的类\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e字符\u003c/td\u003e\n\u003ctd\u003e保证系统中文件的字符和读入内存的字符一致，隐式地使用系统默认的编码方式做编码转换（而且这种编码方式无法自己选择）\u003c/td\u003e\n\u003ctd\u003e以Reader和Write为后缀的类\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e字节-字符\u003c/td\u003e\n\u003ctd\u003eJava中能指定转换编码的地方也就在字符和字节转换的地方\u003c/td\u003e\n\u003ctd\u003eInputStreamReader类和OutputStreamWriter类\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch3 id='1.2'\u003e1.2 类型转换、i++和运算符\u003c/h3\u003e\n\n\u003ch4 id=\"1\"\u003e1) 类型转换\u003ca class=\"headerlink\" href=\"#1\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h4\u003e\n\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003e数字和字节相加，会将数字进行隐式转换成字符\u003c/li\u003e\n\u003cli\u003e数字和字节相减，会在编译的时候报错\u003c/li\u003e\n\u003cli\u003e数字和字符相加，会将字符进行隐式转换成Ascii码再进行相加减\u003c/li\u003e\n\u003cli\u003e系统默认的浮点类型是double,所以如果是float类型需要在数字后加上f标记进行转换\u003c/li\u003e\n\u003cli\u003eshort后面不需要加S，会执行自动装箱\u003c/li\u003e\n\u003cli\u003echar后面也不需要加c,char向高级类型转换时会转化成Ascii码\u003c/li\u003e\n\u003cli\u003e高级类型转低级类型需要强行转换，而且只能是针对数值类型而非包装类进行转换，否则会出错\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"codehilite\"\u003e\u003cpre\u003e            package Interview;\n\n            /**\n             * @author LvHongbin\n             *\n             */\n            public class Go {\n\n                public static void main(String[] arg) {\n                    System.out.println(1 + \u0026quot;0\u0026quot;);\n                    System.out.println(\u0026quot;1\u0026quot; + 0);\n                    System.out.println(1 + \u0026#39;0\u0026#39;);\n                    System.out.println(\u0026#39;1\u0026#39; + 0);\n                }\n            }\n\n            // 控制台\n            10\n            10\n            49\n            49\n\u003c/pre\u003e\u003c/div\u003e\n\n\n\u003ch4 id=\"2\"\u003e2) 包装类\u003ca class=\"headerlink\" href=\"#2\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h4\u003e\n\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003eCharacter、Boolean、Integer、Long、Float、Double共6个\u003c/li\u003e\n\u003cli\u003eString和Data本身就是类，所以没有包装类这一说法\u003c/li\u003e\n\u003cli\u003e过渡型类型转换\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"codehilite\"\u003e\u003cpre\u003e            float f = 100.0f;\n            Float F = new Float(f);\n            double d = F.doubleValue();\n\u003c/pre\u003e\u003c/div\u003e\n\n\n\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003ch4 id=\"3\"\u003e3) 中间缓存机制\u003ca class=\"headerlink\" href=\"#3\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h4\u003e\n\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003e适用与自增的变量同时出现在等号左右两边\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"codehilite\"\u003e\u003cpre\u003e            int j1 = 0 ;\n            int j2 = 0 ;\n            int j3 = 0 ;\n            for(int i =0; i\u0026lt;100; i++) {\n                j1 = j1++;\n                j2 = ++j2;\n            }\n            j3 = j3++ + j3++ + j3++ + ++j3;\n            System.out.printf(\u0026quot;j1 = %d, j2 = %d, j3 = %d\u0026quot;, j1, j2, j3);\n\n            // 控制台\n            j1 = 0, j2 = 100, j3 = 7\n\n\n            j1 = j1++;\n            等效于\n            temp = j1;\n            j1 = j1 + 1;\n            j1 = temp;\n\n            j2 = ++j2;\n            等效于\n            j2= j2 + 1;\n            temp = j2;\n            j2 = temp;\n\n            j3 = 0 + 1 + 2 + 4 = 7\n\u003c/pre\u003e\u003c/div\u003e\n\n\n\u003ch4 id=\"4\"\u003e4) 三目运算符\u003ca class=\"headerlink\" href=\"#4\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h4\u003e\n\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003e返回类型会进行自动匹配，而匹配的类型跟问号后的值相同\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"codehilite\"\u003e\u003cpre\u003e            System.out.println(\u0026quot;value = \u0026quot;  + (true == false ? 10.9 : 9));\n\n            // 控制台\n            value = 9.0\n\u003c/pre\u003e\u003c/div\u003e\n\n\n\u003ch4 id=\"5\"\u003e5) 移位操作符\u003ca class=\"headerlink\" href=\"#5\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h4\u003e\n\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003e移位的位数先要进行模32运算\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"codehilite\"\u003e\u003cpre\u003e            System.out.println(\u0026quot;value = \u0026quot;  + (32 \u0026gt;\u0026gt; 33));\n\n            // 控制台\n            value = 16\n\u003c/pre\u003e\u003c/div\u003e\n\n\n\u003ch3 id='1.3'\u003e1.3 异常\u003c/h3\u003e\n\n\u003ch4 id=\"1_1\"\u003e1) 异常类型\u003ca class=\"headerlink\" href=\"#1_1\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h4\u003e\n\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003eThrowable类衍生Error类和Exception类\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003eError类程序无法靠自身解决，所以Java不作处理，所以是unchecked exception\u003c/li\u003e\n\u003cli\u003eException也分为运行时错误（如被0除、空字符串、空句柄）和非运行时错误（如IOException），对于运行时错误，由于编译器无法在静态检查中检查出，所以是unchecked exception\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/li\u003e\n\u003cli\u003eJava编译器要求捕获或者声明所有非运行时错误\u003c/li\u003e\n\u003cli\u003e针对\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003ch4 id=\"2_1\"\u003e2) 异常关键字\u003ca class=\"headerlink\" href=\"#2_1\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h4\u003e\n\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003etry、catch、finally分别有自己独立的代码块，相互之间不能访问，如果需要访问则可以把变量放在关键字代码块之前\u003c/li\u003e\n\u003cli\u003ethrow 用在方法体内部\u003c/li\u003e\n\u003cli\u003ethrows 用在方法体外部，用于声明可能会抛出的异常，里面可以不写catch\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003ch4 id=\"3-finally\"\u003e3) finally\u003ca class=\"headerlink\" href=\"#3-finally\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h4\u003e\n\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003e即便try()代码块内部有return语句，如果存在finally关键字，那么finally里面的方法块会在return前执行\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"codehilite\"\u003e\u003cpre\u003e            /**\n             * \n             */\n            package Interview;\n\n            /**\n             * @author LvHongbin\n             *\n             */\n            public class Go {\n\n                public static void main(String[] arg) {\n                    System.out.println(fin());\n                }\n\n                private static int fin() {\n                    try {\n                        System.out.println(\u0026quot;I am try\u0026quot;);\n                        return \u0026quot;I am return\u0026quot;;\n                    }finally {\n                        System.out.println(\u0026quot;I am finally\u0026quot;);\n                    }\n                }\n            }\n\n            // 控制台\n            I am try\n            I am finally\n            I am return\n\u003c/pre\u003e\u003c/div\u003e\n\n\n\u003chr /\u003e\n\u003ch2 id='2'\u003e二、传递与引用\u003c/h2\u003e\n\n\u003ch3 id='2.1'\u003e2.1 传值与传引用\u003c/h3\u003e\n\n\u003ch4 id=\"1_2\"\u003e1) 规律\u003ca class=\"headerlink\" href=\"#1_2\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h4\u003e\n\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003e不管Java参数类型是什么，一律传递的是参数的副本\u003c/li\u003e\n\u003cli\u003e如果参数是值，那么传得就是值的副本\u003c/li\u003e\n\u003cli\u003e如果参数是引用，那么传得就是引用的副本，也就是“被复制的钥匙”，这就意味着不能修改“原来的钥匙”\u003c/li\u003e\n\u003cli\u003e这里跟C++不同，C++在传递引用的时候是真的传递引用，而Java是传递引用的副本。其实两者在方法里都可以改掉被引用的内容。\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003ch3 id='2.2'\u003e2.2 静态变量和私有变量\u003c/h3\u003e\n\n\u003ch4 id=\"1_3\"\u003e1) 初始化\u003ca class=\"headerlink\" href=\"#1_3\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h4\u003e\n\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003e定义在类中的变量会被赋予一个默认的值\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003ch4 id=\"2_2\"\u003e2) 静态方法\u003ca class=\"headerlink\" href=\"#2_2\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h4\u003e\n\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003e静态方法访问外部变量或者方法时只能访问静态变量或者静态方法，否则会出错\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003ch3 id='2.3'\u003e2.3 输入/输出流和序列化\u003c/h3\u003e\n\n\u003ch4 id=\"1_4\"\u003e1) 读入有很多数据的大文件\u003ca class=\"headerlink\" href=\"#1_4\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h4\u003e\n\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003enew StringBuffer(new InputStreamReader(new FileInputStream(\u0026ldquo;file.name\u0026rdquo;)));\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003ch4 id=\"2_3\"\u003e2) 从键盘输入数字的两种方法\u003ca class=\"headerlink\" href=\"#2_3\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h4\u003e\n\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003e使用Scanner类\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"codehilite\"\u003e\u003cpre\u003e            Scanner scan = new Scanner(System.in);\n            System.out.println(\u0026quot;请输入第一个数字：\u0026quot;);\n            int i1 = scan.nextInt();\n            System.out.println(\u0026quot;请输入第二个数字：\u0026quot;);\n            int i2 = scan.nextInt();\n            System.out.println(\u0026quot;两数之和：\u0026quot; + (i1 + i2));\n            scan.close();\n\n            // 控制台\n            请输入第一个数字：\n            1\n            请输入第二个数字：\n            2\n            两数之和：3\n\u003c/pre\u003e\u003c/div\u003e\n\n\n\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003e使用BufferedReader类和InputStreamReader类\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"codehilite\"\u003e\u003cpre\u003e            int i3 = 0;\n            int i4 = 0;\n            BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in));\n            try {\n                System.out.println(\u0026quot;请输入第一个数字：\u0026quot;);\n                i3 = Integer.parseInt(buffer.readLine());\n                System.out.println(\u0026quot;请输入第二个数字：\u0026quot;);\n                i4 = Integer.parseInt(buffer.readLine());   \n            } catch (IOException e) {\n                // TODO Auto-generated catch block\n                e.printStackTrace();\n            }finally {\n                System.out.println(\u0026quot;两数之和：\u0026quot; + (i3 + i4));\n                try {\n                    buffer.close();\n                } catch (IOException e) {\n                    // TODO Auto-generated catch block\n                    e.printStackTrace();\n                }\n            }\n\n            // 控制台\n            请输入第一个数字：\n            1\n            请输入第二个数字：\n            2\n            两数之和：3\n\u003c/pre\u003e\u003c/div\u003e\n\n\n\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003eStringBuffer是一个处理字符串的类，而BufferReader是一个I/O流\u003c/li\u003e\n\u003cli\u003e字符流和字节流分类\u003cblockquote\u003e\n\u003cblockquote\u003e\n\u003cblockquote\u003e\n\u003cblockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cimg alt=\"图1-2 IO流分类.png\" src=\"https://github.com/hblvsjtu/Java_Interview_Study/blob/master/picture/%E5%9B%BE1-2%20IO%E6%B5%81%E5%88%86%E7%B1%BB.png?raw=true\" /\u003e\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/blockquote\u003e\n\u003c/blockquote\u003e\n\u003c/blockquote\u003e\n\u003c/blockquote\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003ch4 id=\"3_1\"\u003e3) 序列化\u003ca class=\"headerlink\" href=\"#3_1\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h4\u003e\n\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003eJava的“对象序列化”能将一个实现了Serializable接口的对象转换成一组byte，这样日后要用的时候就可以把这些byte数据恢复成对象\u003c/li\u003e\n\u003cli\u003e使用ObjectInputStream和ObjectOutputStream类\u003c/li\u003e\n\u003cli\u003e调用readObject()方法和writeObject()方法\u003c/li\u003e\n\u003cli\u003e主要是用于远程传递对象\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003ch3 id='2.4'\u003e2.4 典型的递归问题\u003c/h3\u003e\n\n\u003ch4 id=\"1_5\"\u003e1) 斐波那契数列\u003ca class=\"headerlink\" href=\"#1_5\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h4\u003e\n\u003cdiv class=\"codehilite\"\u003e\u003cpre\u003e            private static int fib(int i) {\n                return i\u0026lt;3 ? 1 : fib(i-1) + fib(i-2);\n            }\n\u003c/pre\u003e\u003c/div\u003e\n\n\n\u003chr /\u003e\n\u003ch2 id='3'\u003e三、Java内存管理\u003c/h2\u003e\n\n\u003ch3 id='3.1'\u003e3.1 垃圾收集\u003c/h3\u003e\n\n\u003ch4 id=\"1-java\"\u003e1) Java垃圾收集机制\u003ca class=\"headerlink\" href=\"#1-java\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h4\u003e\n\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003e优势：Java不像C和C++，不要求程序员显式地分配内存，释放内存。避免很多潜在的问题，Java在创建对象时会自动分配内存，并当该对象的引用不存在时释放这块内存\u003c/li\u003e\n\u003cli\u003e工作机制：Java使用对象表来将软指针映射为对象的引用。之所以称为“软指针”，因为这些指针并不是直接指向对象，而是指向对象的引用。使用软指针，Java的垃圾收集器可以以单独的线程在后台存在，并依次检查每一个对象，通过更改对象表项来标记对象、移除对象、移动对象或者检查对象。\u003c/li\u003e\n\u003cli\u003e调用System类中的静态gc()方法可以运行垃圾收集器，但不能保证立即回收指定对象，只是向JVM发出回收垃圾的申请而已。具体的原理请参考\u003ca href=\"\"\u003e深入理解Java虚拟机\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e调用protected void finalize() throws Throwable或者进行重写。在finalize()方法返回之后，对象消失，垃圾收集开始执行。属于一种强制执行垃圾回收的方法。\u003c/li\u003e\n\u003cli\u003e判断一块内存空间是否符合垃圾收集器收集的标准，只有两条原则\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003e给对象赋予了null，而且再也没有被调用\u003c/li\u003e\n\u003cli\u003e给对象赋予了新值，即重新分配了内存，那么旧的内存可以被回收\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/li\u003e\n\u003cli\u003e养成良好的编程习惯，让引用变量退出活动域后，自动设置为null，暗示垃圾手机器来收集该对象。注意，局部变量不再使用的时候，没有必要显式设置为null，对于这些变量的引用将随着方法的退出而自动清除。\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003ch4 id=\"2-java\"\u003e2) Java中的内存泄露\u003ca class=\"headerlink\" href=\"#2-java\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h4\u003e\n\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003e在Java中，内存泄露就是存在一些被分配的对象，这些对象有两个特点：\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003e对象是可达的，即在有向图中，存在通路可以与其相连\u003c/li\u003e\n\u003cli\u003e对象是无用的，即程序以后不会再使用这些对象\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/li\u003e\n\u003cli\u003e本质上是占用着内存却不会再被使用的对象\u003cblockquote\u003e\n\u003cblockquote\u003e\n\u003cblockquote\u003e\n\u003cblockquote\u003e\n\u003cblockquote\u003e\n\u003cp\u003e\u003cimg alt=\"图3-1 Java内存分配.png\" src=\"https://github.com/hblvsjtu/Java_Interview_Study/blob/master/picture/%E5%9B%BE1-2%20IO%E6%B5%81%E5%88%86%E7%B1%BB.png?raw=true\" /\u003e\n\u003ch3 id='3.2'\u003e3.2 clone\u003c/h3\u003e  \u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/blockquote\u003e\n\u003c/blockquote\u003e\n\u003c/blockquote\u003e\n\u003c/blockquote\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003ch4 id=\"1_6\"\u003e1) 特点\u003ca class=\"headerlink\" href=\"#1_6\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h4\u003e\n\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003eclone()是Object的一个方法，任何类都自动继承拥有这个类\u003c/li\u003e\n\u003cli\u003e但是继承而来的clone()方法类不能直接调用，需要显式添加“implements Cloneable”作为标记\u003c/li\u003e\n\u003cli\u003e“implements Cloneable”只是起一个标记的作用，不需要重写或者覆盖clone()方法，这是由Javac或者Java决定的\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003ch4 id=\"2_4\"\u003e2) 检验类型\u003ca class=\"headerlink\" href=\"#2_4\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h4\u003e\n\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003eclone()方法对对象是否属于cloneable类型是要进行检验\u003c/li\u003e\n\u003cli\u003e证据就是类必须实现Cloneable接口，但是这个接口的实现只是作为标记，不起实质上的作用\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003ch4 id=\"3_2\"\u003e3) 深拷贝的定义\u003ca class=\"headerlink\" href=\"#3_2\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h4\u003e\n\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003ex.clone() != x\u003c/li\u003e\n\u003cli\u003ex.clone().getClass() == x.getClass()\u003c/li\u003e\n\u003cli\u003ex.equal(x.clone()) == true;\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003chr /\u003e\n\u003ch2 id='4'\u003e四、面向对象\u003c/h2\u003e\n\n\u003ch3 id='4.1'\u003e4.1 类和对象\u003c/h3\u003e\n\n\u003ch4 id=\"1-equal\"\u003e1) equal\u003ca class=\"headerlink\" href=\"#1-equal\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h4\u003e\n\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003e貌似只要是不同的对象就不相等\u003c/li\u003e\n\u003cli\u003e除非你重写equal方法\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"codehilite\"\u003e\u003cpre\u003e            Go go1 = new Go();\n            Go go2 = new Go();\n            Object go3 = new Go();\n            System.out.println(go1 == go2);\n            System.out.println(go1.equals(go2));\n            System.out.println(go1.equals(go1.clone()));\n            System.out.println(go2 == go3);\n            System.out.println(go3.equals(go2));\n            System.out.println(go2.equals(go3));\n\n            // 控制台\n            false\n            false\n            false\n            false\n            false\n            false\n\u003c/pre\u003e\u003c/div\u003e\n\n\n\u003ch4 id=\"2_5\"\u003e2) 创建对象的几种方式\u003ca class=\"headerlink\" href=\"#2_5\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h4\u003e\n\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003enew关键字\u003c/li\u003e\n\u003cli\u003eclone()方法\u003c/li\u003e\n\u003cli\u003e反序列化 ObjectInputStream()\u003c/li\u003e\n\u003cli\u003e运用反射的方法，调用java.lang.Class或者java.lang.reflect.constructor类\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003ch4 id=\"3-innner-class\"\u003e3) 嵌套类innner class\u003ca class=\"headerlink\" href=\"#3-innner-class\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h4\u003e\n\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003e静态内部类意味着：\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003e创建一个static内部类的对象，不需要一个外部类对象\u003c/li\u003e\n\u003cli\u003e不能从一个static内部类对象中访问外部类对象\n\u003ch3 id='4.2'\u003e4.2 集合类\u003c/h3\u003e  \u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003ch4 id=\"1_7\"\u003e1) 分类\u003ca class=\"headerlink\" href=\"#1_7\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h4\u003e\n\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003eCollection 类似于数组\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003eList 以特定的次序储存元素，取出时未必按照原来的顺序\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003eArrayList 擅长随机访问元素，如果需要在中间插入、移动、删除元素则会花费较多的时间\u003c/li\u003e\n\u003cli\u003eLinkedList 不擅长随机访问元素，如果需要在中间插入、移动、删除元素则会花费较少的时间\u003c/li\u003e\n\u003cli\u003eVector 不进行边界检查，可以确切知道它所持有的对象隶属什么类别，Vector总比ArrayList慢\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/li\u003e\n\u003cli\u003eSet 每个值只保存一个对象，不能还有重复的元素，顺序是随机的\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003eHashSet 使用散列函数\u003c/li\u003e\n\u003cli\u003eTreeSet 使用红黑树\u003c/li\u003e\n\u003cli\u003eLinkedHashSet 使用链表结合散列函数\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/li\u003e\n\u003cli\u003eQueue 先进先出\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003ePriorityQueue\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/li\u003e\n\u003cli\u003eMap 类似于键名对 不允许有重复值\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003eHashMap 适用于快速查找 允许一个null键和多个null值\u003c/li\u003e\n\u003cli\u003eHashTable \u003c/li\u003e\n\u003cli\u003eHashTree 用来维护排序状态，比较玄学\u003c/li\u003e\n\u003cli\u003eTreeMap 适用于已经排好序的的序列\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003ch4 id=\"2_6\"\u003e2) 特点\u003ca class=\"headerlink\" href=\"#2_6\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h4\u003e\n\u003cblockquote\u003e\n\u003cul\u003e\n\u003cli\u003eList、Set、Map将所有对象都是为Object\u003c/li\u003e\n\u003cli\u003eCollection、List、Set、Map都是接口，不能实例化。只有他们的子类才能创建始类\u003c/li\u003e\n\u003cli\u003eCollections是一个帮助类，它提供一系列静态的方法实现对各种集合的搜索、排序、线程完全化操作，如\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\n\u003cdiv class=\"codehilite\"\u003e\u003cpre\u003e            List\u0026lt;Integer\u0026gt; list = new ArrayList\u0026lt;Integer\u0026gt;();\n            list.add(1);\n            list.add(9);\n            list.add(6);\n            list.add(3);\n            for(int i: list) {\n                System.out.print(i);\n            }\n            Collections.sort(list);\n            for(int i: list) {\n                System.out.print(i);\n            }\n\n            //控制台\n            19631369\n\u003c/pre\u003e\u003c/div\u003e\n\n\n\u003cblockquote\u003e\n\u003ch2 id=\"-\"\u003e-\u003ca class=\"headerlink\" href=\"#-\" title=\"Permanent link\"\u003e\u003c/a\u003e\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/blockquote\u003e\u003c/article\u003e\u003c/body\u003e\u003c/html\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhblvsjtu%2Fjava_interview_study","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhblvsjtu%2Fjava_interview_study","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhblvsjtu%2Fjava_interview_study/lists"}