Voisitko kertoa meille projekteista, joissa olet työskennellyt, mitä teknologiapinoa käytit ja minkä sisällön kehittämisestä vastasit? (projektikokemus)
Mitkä ovat kahdeksan perustietotyyppiä? (Perus)
Voitko kertoa minulle, voidaanko pitkää tyyppiä ajaa suoraan? Pitäisi kysyä, voidaanko se laskea suoraan? (Peruskohta)
Ymmärrätkö singleton mallin? Voitko puhua siitä (Design Patterns)
Mitä eroa on laiska mies -tilan ja nälkäisen miehen tilan välillä?
Mitkä ovat transaktioiden ominaisuudet? (tapahtuma)
Kerro minulle poikkeuksista, joita olet kohdannut työskennellessään projekteissa? (epänormaali)
Puhutaanpa kolmesta yleisesti käytetystä aikakategoriasta? (Peruskohta)
Puhutaanko kolmesta kalenterimenetelmästä?
Puhutaanpa istunnon elinkaaresta. (istunto)
Oletko koskaan havainnut liukulukutarkkuuden menetystä projektin parissa? Miten ratkaisit sen?
Sitten meillä on laskenta liukulukulla Minkä tietotyypin valitsisit laskettavaksi?
Voitko kertoa minulle joitain yleisesti käytettyjä merkintöjä? Kevät? Tai jotain muuta?
Tiedätkö säikeistä?
Mitä eroa langan ja prosessin välillä on?
Joten kerro minulle mikä on langan turvallisuus?
Kerro minulle ero == ja yhtäläisten välillä?
Oletko siis koskaan käyttänyt linuxia? Voitko kertoa lyhyesti joistakin yleisesti käytetyistä komennoista?
ongelma ratkaistu
- 我想问一下你这边有做过什么项目吗?
Luulen, että voit valita yhden tai kaksi suhteellisen taitavaa hanketta puhuaksesi.
- 你方便讲一下你做过的那些项目吗,用了什么技术栈,包括你负责开发的内容是什么?
Valitse tutuin projekti, josta puhut.
- 八大基本数据类型是什么?
tavu, lyhyt, int, pitkä, float, tupla, merkki, boolean
- 你说一下long类型能直接运转吗(Luulen, että se kysyy, voidaanko pitkän tyyppistä dataa käyttää suoraan)
Pitkän tyypin dataa voidaan käyttää suoraan Kun yhdistät lausekkeessa int- ja long type -arvot, int-tyypin arvo nostetaan automaattisesti pitkäksi, jotta koko lausekkeen tulos on pitkä.
- 你了解单例模式吗?你可以讲一下吗
Singleton Pattern on yleisesti käytetty ohjelmistosuunnittelumalli. Sen tarkoituksena on varmistaa, että luokassa on vain yksi ilmentymä, ja tarjota globaali tukiasema tämän ainutlaatuisen ilmentymän saamiseksi. Tämä malli on hyödyllinen, kun haluat hallita resurssien käyttöä tai kun objektien luominen on resurssiintensiivistä tai aikaa vievää, ja vain yksi näistä resursseista tai ilmentymistä tarvitaan maailmanlaajuisesti. Yksittäisen tilan yleisiä toteutusmenetelmiä ovat pääasiassa: laiska tila ja nälkätila.
- 懒汉模式跟饿汉模式有什么区别?
Voidaan saada osoitteestaObjektin alustuksen ajoitus, säikeen turvallisuus ja resurssien käyttöVertaa muilta osin:
Alustamisen ajoitus
laiska tila: Laiska tila on a延迟加载 singleton kuvio.Sille on ominaista第一次使用时创建实例对象 , sen sijaan, että luot sen, kun luokka ladataan.Tämä malli välttää esimerkiksi objektien tarpeen, kun资源浪费, luodaan vain tarvittaessa.
Nälkäinen tila: Hungry man -tila on eräänlainen在类加载时就创建实例 singleton kuvio. Sen ominaispiirre on, että ilmentymäobjekti luodaan, kun luokka ladataan, riippumatta siitä, käytetäänkö sitä.Tämä menetelmä varmistaa, että sama ilmentymäobjekti voidaan saada kaikissa olosuhteissa, mutta se voi aiheuttaa joitain性能和资源上的浪费, varsinkin joissakin tapauksissa ilmentymäobjektia ei käytetä.
langan turvallisuutta
laiska tila: Lazy-tila itsessään on非线程安全的 , koska on mahdollista, että useat säikeet kutsuvat getInstance()-metodia samanaikaisesti ja syöttävät tuomiolausekkeen samaan aikaan, jolloin syntyy useita esiintymiä.Säikeen turvallisuuden saavuttamiseksi voit käyttää getInstance()-menetelmää添加synchronized关键字 , mutta tämä lisää suorituskykyä. Lisäksi voit käyttää myös kaksoistarkistettua lukitusta (Double-Checked Locking) ja muita menetelmiä synkronoinnin vähentämiseksi.
Nälkäinen tila: Hungry mode on线程安全Kyllä, koska ilmentymäobjekti on luotu, kun luokka ladataan, monisäikeisessä ympäristössä ei ole kilpailuongelmaa.
Resurssien käyttö ja suorituskyky
laiska tila : Lazy-tila voi säästää resursseja, koska se välttää resurssien tuhlaamisen, kun ilmentymäobjekteja ei tarvita. Koska se on kuitenkin alustettava ensimmäisellä käyttökerralla, suorituskyky voi heikentyä, jos alustusprosessi on monimutkainen tai kestää kauan.
Nälkäinen tila : Nälkäinen tila ei välttämättä ole yhtä joustava kuin laiska tila resurssien käytön suhteen, koska se luo ilmentymäobjekteja riippumatta siitä, käytetäänkö niitä. Koska ilmentymäobjekti on kuitenkin jo luotu, kun luokka ladataan, se on nopeampi ensimmäisellä kutsulla, koska alustusta ei tarvita.
Sovellettava kohtaus
laiska tila: KoskeeSkenaario, jossa objekti luodaan vain, kun sitä käytetään ensimmäisen kerran, eikä ilmentymäobjektin alustusprosessin aikana ole monimutkaisia säikeen turvallisuusvaatimuksia. . Esimerkiksi,TiedostonhallintaTämä on tyypillinen esimerkki, koska sinun ei ehkä tarvitse lukea ja kirjoittaa tiedostoja heti sovelluksen käynnistyessä, vaan suorittaa vain tarvittavat toiminnot.
Nälkäinen tila : Sopii resursseille, jotka on alustettava ohjelman käynnistyessä ja joita käytetään sovelluksen koko elinkaaren ajan. Esimerkiksi loggeri on hyvä ehdokas Hungry Patternille, koska kirjaustoimintojen on yleensä oltava valmiina sovelluksen käynnistyessä ja lokiviestit koko sovelluksen ajon ajan.
Yhteenvetona voidaan todeta, että laiska mies- ja nälkäinen mies -moodilla on kummallakin omat hyvät ja huonot puolensa, ja käytännön sovelluksissa ne tulee harkita kokonaisvaltaisesti ja suunnitella tiettyjen skenaarioiden mukaan.
- 说一下事务的几种特性?
Transaktiolla on neljä perusominaisuutta, joita kutsutaan myös nimelläHAPPOOminaisuuksiin kuuluvat erityisesti:
Atomuus : Atomuus tarkoittaa, että kaikki tapahtuman toiminnot ovat joko suoritettuja tai niitä ei suoriteta. Ne ovat jakamaton työyksikkö. Jos tapahtuman suorittamisen aikana tapahtuu virheitä tai epäonnistumisia, tehdyt toiminnot kumotaan (palautetaan takaisin), ja koko tapahtuma on kuin toiminto, jota ei koskaan tapahtunut. Tämä ominaisuus varmistaa tapahtumien eheyden ja johdonmukaisuuden.
Johdonmukaisuus : Johdonmukaisuus tarkoittaa, että tapahtuman on muutettava tietokanta yhdestä johdonmukaisuustilasta toiseen johdonmukaisuustilaan. Ennen tapahtuman alkamista ja tapahtuman päätyttyä tietokannan eheysrajoitukset (kuten ensisijaisen avaimen rajoitukset, vierasavaimen rajoitukset jne.) eivät tuhoudu, ja kaikki tiedot säilyttävät loogisen johdonmukaisuuden. Jos tietokannan eheys vaarantuu tapahtuman suorittamisen aikana, tapahtuma keskeytetään ja suoritetut toiminnot peruutetaan.
Eristäytyminen : Eristäminen tarkoittaa, että kun useita tapahtumia suoritetaan samanaikaisesti, jokainen tapahtuma on eristetty toisistaan, eivätkä muut tapahtumat voi häiritä yhden tapahtuman suorittamista. Tietokantajärjestelmä tarjoaa tietyn tason eristystä, jotta samanaikaisesti suoritettavat tapahtumat eivät häiritse toisiaan, mikä varmistaa tietojen oikeellisuuden ja johdonmukaisuuden. Eristäminen saavutetaan yleensä mekanismeilla, kuten lukoilla (kuten rivilukot, pöytälukot jne.) tai moniversion samanaikaisuuden ohjauksella (MVCC).
Kestävyys : Kestävyys, jota kutsutaan myös pysyvyydeksi, tarkoittaa, että kun tapahtuma on sitoutunut, sen muutokset tietokantaan ovat pysyviä eivätkä katoa, vaikka järjestelmä epäonnistuu. Tietokantajärjestelmä varmistaa tapahtumien kestävyyden lokien ja palautusmekanismien avulla Vaikka järjestelmävika tapahtuisi, järjestelmä voi palauttaa tietokantaan tehdyt muutokset lokien kautta.
- 说一下你在做项目的过程中都遇到过哪些异常吗?(Lista vain muutamia)
Koodipoikkeukset:
NullPointerException : heitetään, kun yritetään päästä käsiksi alustamattomaan kohteeseen tai käyttää sitä. On yleistä, että unohtuu tarkistaa, onko objekti tyhjä, ja käyttää sitä suoraan.
Array out of bounds -poikkeus (ArrayIndexOutOfBoundsException): taulukkoa käytettäessä käytettiin virheellistä indeksiä (indeksi on pienempi kuin 0 tai suurempi tai yhtä suuri kuin taulukon koko).
Tyyppimuunnospoikkeus (ClassCastException): Castingissa muunnettava objekti ei ole kohdetyypin esiintymä tai sen alaluokka.
Aritmeettinen poikkeus // nollalla: Jakotoimintoa suoritettaessa jakaja on nolla.
Tietojen poikkeukset:
Datamuotovirhe: Esimerkiksi JSON- tai XML-tietoja jäsennettäessä tietomuoto ei täytä odotuksia.
Tietojen eheyspoikkeus: Jos tietokannan vieraan avaimen rajoitus epäonnistuu, tietojen eheyssääntöjä rikotaan yritettäessä lisätä tai päivittää tietoja.
Tietoja ei löytynyt poikkeus: Jos vastaavaa dataa ei löydy annettujen ehtojen mukaisesti tietokantaa haettaessa.
Verkkopoikkeukset:
Yhteyden aikakatkaisu (ConnectTimeoutException): Yrittäessä muodostaa verkkoyhteyttä yhteyspyyntö aikakatkaistiin odottaessaan vastausta.
Lukuaikakatkaisu (SocketTimeoutException): Toiminto aikakatkaistiin luettaessa tietoja yhteydestä.
Verkkoon ei saada yhteyttä (UnknownHostException):Palvelimen nimeä ei löydy.
Yhteys hylätty (ConnectionRefusedError): Kohdekone hylkäsi yhteyspyynnön.
Järjestelmäresurssien poikkeukset:
Muistin ylivuoto (OutOfMemoryError): JVM:llä ei ollut tarpeeksi muistitilaa, kun muistia yritettiin varata.
Tiedostoa ei ole olemassa (FileNotFoundException): Tiedostoa tai hakemistoa, jota yrität käyttää, ei ole olemassa.
Riittämättömät oikeudet (SecurityException/AccessDeniedException): Riittämättömät oikeudet toiminnon suorittamiseen, kuten tiedostojen lukemiseen ja kirjoittamiseen, verkkoresurssien käyttämiseen jne.
Kolmannen osapuolen palvelupoikkeukset:
Palvelu ei ole käytettävissä (ServiceUnavailableException): riippuvainen kolmannen osapuolen palvelu on tilapäisesti poissa käytöstä.
API-raja (RateLimitException): Pyyntö kolmannen osapuolen API:lle ylittää rajansa (kuten pyyntöjen tiheysrajan).
Todennus epäonnistui (AuthenticationException): Kolmannen osapuolen palveluita käytettäessä todennustiedot ovat virheellisiä tai vanhentuneet.
Loogisia poikkeuksia:
Liiketoiminnan logiikkavirhe: Esimerkiksi tilaussumma on laskettu väärin, varastoa ei ole riittävästi, mutta tilaus on edelleen käsitelty jne.
Epäjohdonmukainen tila: Tietty järjestelmän tila ei ole odotusten mukainen, minkä seurauksena myöhemmät toiminnot ovat mahdottomia.
- 说一下时间常用的三个类?
LocalDate, LocalTime, LocalDateTime. (Lista vain mitkä tahansa kolme)
Javassa yleisesti käytetyt käsittelyajan luokat ovat Java 8:ssa käyttöön otettujen kolmen paketin java.util.Date, java.util.Calendar ja java.time alla olevat luokat (esim.LocalDate, LocalTime, LocalDateTimeodota)
- 说一下日历的三个方法?
Kalenteriin liittyvien toimintojen osalta ajattelemme yleensä luokkaa java.util.Calendar, koska se on abstrakti luokka, joka tarjoaa menetelmiä kalenterikenttien (kuten vuosi, kuukausi, päivä, tunti jne.) käyttämiseen.Java 8:sta alkaen otettiin käyttöön uusi päivämäärä ja aika -sovellusliittymä (sijaitsee java.time-paketin alla), mikä tarjoaa paremmat päivämäärän ja ajan käsittelyominaisuudet.
Johdatus yleisiin LocalDateTimen menetelmiin:
Luo LocalDateTime-objekti
now(): Luo LocalDateTime-objektin, joka edustaa nykyistä päivämäärää ja aikaa.
of(): Luo LocalDateTime-objektin, jossa on määritetty vuosi, kuukausi, päivä, tunti, minuutti, sekunti (ja valinnainen nanosekunti). Esimerkiksi: LocalDateTime.of(2023, kuukausi.TAMMIKUU, 1, 12, 0, 0).
Hanki LocalDateTime-objektin ominaisuudet
getYear(), getMonth(), getDayOfMonth(), getHour(), getMinute(), getSecond() jne.: käytetään hankkimaan vuosi, kuukausi, päivä, tunti, minuutti ja sekunti-attribuutit vastaavasti LocalDateTime-objektissa.
Muokkaa LocalDateTime-objektin ominaisuuksia
withYear(), withMonth(), withDayOfMonth(), withHour(), withMinute(), withSecond() jne.: Aseta LocalDateTime-objektin ominaisuus määritettyyn arvoon ja palauta uusi LocalDateTime-objekti Alkuperäinen objekti pysyy muuttumattomana muuttuja (koska LocalDateTime on muuttumaton).
Päivämäärän ja kellonajan yhteen- ja vähennys
plusYears(), plusMonths(), plusDays(), plusHours(), plusMinutes(), plusSeconds() jne.: Lisää määritetty aikajakso LocalDateTime-objektiin ja palauta uusi LocalDateTime-objekti. miinusYears(), miinusKuukaudet(), miinusDays(), miinusHours(), miinusMinutes(), miinusSeconds() jne.: Vähennä määritetty aikajakso LocalDateTime-objektista ja palauta uusi LocalDateTime-objekti.
Vertaa LocalDateTime-objekteja
isBefore(LocalDateTime muu): Määritä, onko nykyinen objekti aikaisempi kuin määritetty LocalDateTime-objekti.
isAfter(LocalDateTime muu): Määritä, onko nykyinen objekti myöhempi kuin määritetty LocalDateTime-objekti.
Vaikka LocalDateTime itsessään ei tarjoa menetelmää aikaeron laskemiseen suoraan, voit käyttää Duration- tai ChronoUnit-luokkaa laskeaksesi aikaeron kahden LocalDateTime-objektin välillä.
Käytä Duration-luokkaa: Kesto kesto = Duration.between(alku, loppu); ja sitten saat aikaeron tietyn arvon, kuten sekuntia, millisekuntia jne., kestoobjektin kautta.
ChronoUnit-luokan käyttäminen: voit määrittää aikaeron laskentayksikön, kuten vuosi, kuukausi, päivä, tunti jne. Esimerkiksi: pitkät päivät = ChronoUnit.DAYS.between(alku, loppu);.
- 说一下session的生命周期吧。
Istunnon luominen
Luomisen aika:Istuntoa käytetään, kun käyttäjä ensimmäisen kerran käyttää palvelinta ja pyytää JSP:tä, Servletiä jne.动态资源 luotu kun.Käytä vain HTML-koodia, kuvia jne.静态资源 Se ei käynnistä istunnon luomista. Tarvittaessa voit pakottaa istunnon luomisen kutsumalla request.getSession(true).
varastointisijainti: Istunto tallennetaan palvelimen puolelle, yleensä palvelimen muistiin nopeaa pääsyä varten.
Istunnon ylläpito
Päivitä viimeinen käyttöaika: Niin kauan kuin käyttäjä jatkaa pääsyä palvelimelle, palvelin päivittää istunnon viimeisen käyttöajan ja ylläpitää istunnon jokaiselle pyynnölle riippumatta siitä, luetaanko vai kirjoitetaanko istunto. Tämä osoittaa, että käyttäjän istunto on "aktiivisessa" tilassa.
istunnon ainutlaatuisuus : Jokaisella käyttäjällä on itsenäinen istunto, joka tunnistetaan yksilöllisesti istuntotunnuksella. Istuntotunnus lähetetään yleensä asiakkaalle evästeen (nimeltään JSESSIONID) kautta, jotta palvelin voi tunnistaa eri käyttäjäistunnot.
Istunnon tuhoaminen
Tuhoa automaattisesti : Kun istunnon elinkaari vanhenee (eli toimintaa ei ole pitkään aikaan), palvelin tyhjentää sen automaattisesti muistista. Tämä aika on yleensä määritettävissä ja oletuksena on 30 minuuttia Tomcatissa.
Manuaalinen tuhoaminen : Kehittäjät voivat tuhota istunnon manuaalisesti kutsumalla istunnon invalidate()-metodia. Tätä käytetään yleensä skenaarioissa, kuten uloskirjautumisessa ja aikakatkaisussa.