Les quatre choses les plus déroutantes pour les développeurs Java valent la peine d'être regardées! Document d'entrevue sur les MTD

Harmonios Learning 2021-11-25 18:58:35
les quatre choses les routantes

}

}

//?end?of?class?scope.

  1. Vous pouvez utiliser n'importe quelle méthode de construction pour créer une classe anonyme.Notez que les paramètres de la méthode de construction sont également utilisés ici.

  2. Les classes anonymes peuvent étendre les classes de haut niveau,Et implémenter des classes abstraites ou des interfaces.Alors...,Les règles relatives au contrôle d'accès s'appliquent toujours.Nous avons accès àprotectedVariables,Au lieu deprivateIl n'y a pas d'accès.

  3. En raison de l'extension du code ci - dessusFootballCatégorie,Nous n'avons pas besoin de surcharger toutes les méthodes.Mais,Si c'est une interface ou une classe abstraite,La mise en oeuvre doit alors être prévue pour toutes les méthodes non mises en oeuvre.

  4. Impossible de définir une méthode d'initialisation statique ou une interface Membre dans une classe anonyme.

  5. Les classes anonymes peuvent avoir des variables membres statiques,Mais elles doivent être constantes.

Utilisation de la classe anonyme:

  1. **Une structure de projet plus claire:**En général, nous utilisons des classes anonymes lorsque nous avons besoin de changer l'implémentation de certaines méthodes d'une classe à tout moment.Pour ce faire, il n'est pas nécessaire d'ajouter un nouveau*.javaFichier pour définir la classe de haut niveau.Surtout si la classe supérieure n'est utilisée qu'une seule fois,Cette méthode fonctionne très bien.

  2. **UIMoniteur d'événements:**Applications dans les interfaces graphiques

《Grandes usines de première ligneJavaAnalyse des questions d'entrevue+Notes d'apprentissage pour le développement de l'arrière - plan+La dernière vidéo d'architecture+Document d'information sur le code source du projet en direct》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 Partage open source du contenu complet

Dans l'ordre, L'utilisation la plus courante des classes anonymes est de créer divers gestionnaires d'événements .Par exemple,Code suivant:

button.setOnClickListener(new?View.OnClickListener()?{

public?void?onClick(View?v)?{

//?your?handler?code?here

}

});

Nous avons créé une classe anonyme ,C'est fait.setOnClickListenerInterface. Il est déclenché lorsque l'utilisateur clique sur le bouton onClickMéthodes.

Multithreading

Java Plusieurs Threads peuvent exécuter plusieurs Threads en même temps . Les fils sont des sous - processus légers , C'est aussi la plus petite unité de traitement . Le but principal de l'utilisation du Multithreading est de maximiser CPUTaux d & apos; utilisation. Nous utilisons plusieurs fils au lieu de plusieurs processus , Parce que les fils sont plus légers , Vous pouvez également partager de l'espace mémoire dans le même processus . Multithreading pour multitâche .

Cycle de vie du fil

Java Les quatre choses les plus déroutantes pour les développeurs ,Ça vaut le coup.!,BATDocuments d'entrevue_Interview

Comme le montre la figure ci - dessus, Le cycle de vie du fil est principalement 5Statut. Expliquons chaque état à tour de rôle .

  1. New: Après avoir créé une instance du thread ,Il va entrer.newStatut, C'est le premier état , Mais le thread n'est pas prêt à fonctionner .

  2. Runanble: Appeler la classe thread start()Méthodes, L'état passera de newDevenirRunnable, Ça veut dire que le thread peut fonctionner , Mais quand commence - t - il à fonctionner ,Dépend deJavaThread Scheduler, Parce que l'ordonnanceur peut être occupé à exécuter d'autres Threads . L'ordonnanceur de thread prendra FIFO(Premier entré, premier sorti) Comment choisir un thread dans un pool de Threads .

  3. Blocked: Il y a beaucoup de situations qui font que le thread devient blockedStatut,Comme attendreI/OFonctionnement、 Attendre la connexion au réseau, etc .En outre, Les Threads plus prioritaires peuvent transformer les Threads actuellement en cours d'exécution en blockedStatut.

  4. Waiting: Le thread peut appeler wait()EntréewaitingStatut.Quand d'autres Threads appellentnotify()Heure, Il reviendra à runnableStatut.

  5. Terminated:start() Sortie de la méthode ,Thread intoterminatedStatut.

Pourquoi utiliser Multithreading?

L'utilisation de Threads permet Java L'application fait plusieurs choses en même temps , Pour accélérer la course .En termes techniques, Les fils peuvent vous aider à Java Mise en œuvre de l'opération parallèle dans le programme .En raison de la modernitéCPUTrès vite, Peut également contenir plusieurs noyaux , Donc un seul thread ne peut pas utiliser tous les noyaux .

Points à retenir

  • Multithreading peut être mieux utilisé CPU.

  • Améliorer la réactivité ,Améliorer l'expérience utilisateur

  • Réduire le temps de réponse

  • Services simultanés pour plusieurs clients

Il y a deux façons principales de créer un thread :

  1. ExtensionThreadCatégorie

  2. RéalisationRunnableInterface

Par extensionThreadClasse pour créer un thread

Créer une extension de classe ThreadCatégorie. Cette classe devrait être surchargée ThreadDans la classerun()Méthodes.Thread inrun() Début du cycle de vie dans la méthode . Nous créons des objets pour la nouvelle classe ,Puis appelezstart() La méthode commence à exécuter le thread .InThreadDans l'objet,start()Appellerun().

public?class?MultithreadingTest?extends?Thread{

public?void?run()

{

try{

System.out.println(“Thread?”+Thread.currentThread().getName()+“?is?now?running”);

}catch?(Exception?ex)?{

ex.printStackTrace();

}

}

public?static?void?main(String[]?args)

{

for(int?i=0;i<10;i++)

{

MultithreadingTest?multithreadingTest?=?new?MultithreadingTest();

multithreadingTest.start();

}

}

}

Vous pouvez également créer des classes via des interfaces .

Le code suivant crée une classe ,Réalisationjava.lang.Runnable Interface et surcharge run()Méthodes. Puis nous instancions un ThreadObjet,Appeler l'objetstart()Méthodes.

public?class?MultithreadingTest?implements?Runnable{

@Override

public?void?run()?{

System.out.println(“Thread?”+Thread.currentThread().getName()+“?is?now?running”);?//To?change?body?of?generated?methods,?choose?Tools?|?Templates.

}

public?static?void?main(String[]?args)

{

for(int?i=0;i<10;i++)

{

Thread?thread?=?new?Thread(new?MultithreadingTest());

thread.start();

}

}

}

ThreadClasse etRunnableInterface

  • ExtensionThreadCatégorie, Impossible d'étendre plus de classes ,Parce queJavaL'héritage multiple n'est pas autorisé. .L'héritage multiple peut être réalisé par l'interface . Il est donc préférable d'utiliser l'interface plutôt que ThreadCatégorie.

  • Si l'extension ThreadCatégorie, Il y a aussi des méthodes ,Par exemple:yield()、interrupt()Attendez., Notre programme pourrait ne pas fonctionner .EtRunnable Il n'y a pas de telles méthodes inutiles dans l'interface .

Synchroniser

La synchronisation fait référence à la synchronisation multithreadée .synchronized Le bloc de code pour ne peut être exécuté que par un seul thread à la fois .Java La synchronisation est un concept important ,Parce queJavaEst une langue multithreadée, Plusieurs Threads peuvent être exécutés en parallèle .Dans un environnement multithreadé,Java Synchronisation des objets ,Ou plutôtJava La synchronisation des classes est très importante .

Pourquoi synchroniser ?

Si le Code est exécuté dans un environnement multithreadé , La synchronisation est donc nécessaire entre les objets partagés dans plusieurs Threads , Pour éviter les dommages , Ou provoquer un comportement inattendu .

Comprendre le problème avant de plonger dans le concept de synchronisation .

class?Table?{

void?printTable(int?n)?{//method?not?synchronized??

for?(int?i?=?1;?i?<=?5;?i++)?{

System.out.print(n?*?i+“?”);

try?{

Thread.sleep(400);

}?catch?(Exception?e)?{

System.out.println(e);

}

}

}

}

class?MyThread1?extends?Thread?{

Table?t;

MyThread1(Table?t)?{

this.t?=?t;

}

public?void?run()?{

t.printTable(5);

}

}

class?MyThread2?extends?Thread?{

Table?t;

MyThread2(Table?t)?{

this.t?=?t;

}

public?void?run()?{

t.printTable(100);

}

}

class?TestSynchronization1?{

public?static?void?main(String?args[])?{

Table?obj?=?new?Table();//only?one?object??

MyThread1?t1?=?new?MyThread1(obj);

MyThread2?t2?=?new?MyThread2(obj);

t1.start();

t2.start();

}

}

Lancez ce code et vous remarquerez , Les résultats sont très instables , Parce qu'il n'y a pas de synchronisation . Regardons la sortie du programme .

Produits:

100?5?200?10?300?15?20?400?500?25?

class?Table?{

synchronized?void?printTable(int?n)?{//synchronized?method??

for?(int?i?=?1;?i?<=?5;?i++)?{

System.out.print(n?*?i+“?”);

try?{

Thread.sleep(400);

}?catch?(Exception?e)?{

System.out.println(e);

}

}

}

}

class?TestSynchronization3?{

public?static?void?main(String?args[])?{

final?Table?obj?=?new?Table();//only?one?object??

Thread?t1?=?new?Thread()?{

public?void?run()?{

obj.printTable(5);

}

};

Thread?t2?=?new?Thread()?{

public?void?run()?{

obj.printTable(100);

}

};

t1.start();

t2.start();

}

}

Voilà.printTable()Méthode plussynchronized,Alorssynchronized La méthode ne permet pas à d'autres Threads d'entrer dans . La sortie suivante est très stable .

Produits:

5?10?15?20?25?100?200?300?400?500?

De même,,Java Les classes et objets de peuvent également être synchronisés .

**Attention!:** Nous n'avons pas besoin de synchroniser toute la méthode . Parfois, il est préférable de ne synchroniser qu'une petite partie de la méthode .JavaDesynchronized Le fragment de code peut le faire .

Sérialisation

Java La sérialisation en est un mécanisme , Vous pouvez écrire l'état de l'objet dans le flux d'octets . L'opération inverse est appelée désrialisation , Convertir un flux d'octets en objet .

Les processus de sérialisation et de désrialisation sont indépendants de la plateforme ,C'est - à - dire, Sérialisation d'objets sur une plate - forme , Vous pouvez alors désrialiser sur une autre plateforme .

Appelé lors de la sérialisation ObjectOutputStreamDewriteObject()Méthodes,Appel de désérialisationObjectInputStreamClassereadObject()Méthodes.

Dans la figure ci - dessous,Java Objet converti en flux d'octets , Il est ensuite stocké sous différentes formes , Ce processus s'appelle sérialisation . Figure à droite , Le flux d'octets en mémoire est converti en JavaObjet, Ce processus s'appelle désérialisation .

Java Les quatre choses les plus déroutantes pour les développeurs ,Ça vaut le coup.!,BATDocuments d'entrevue_Développement de l'arrière - plan_02

Pourquoi sérialiser

Apparemment.,CrééJava Classe après la fin ou la fin de l'exécution du programme ,L'objet est détruit.Pour éviter ce problème,Java La sérialisation est disponible , Il permet de stocker des objets , Ou perpétuer l'état , Pour une utilisation ultérieure , Ou sur d'autres plateformes .

Le code suivant illustre le processus .

public?class?Employee?implements?Serializable?{

private?static?final?long?serialVersionUID?=?1L;

private?String?serializeValueName;

private?transient?int?nonSerializeValueSalary;

public?String?getSerializeValueName()?{

return?serializeValueName;

}

public?void?setSerializeValueName(String?serializeValueName)?{

this.serializeValueName?=?serializeValueName;

}

public?int?getNonSerializeValueSalary()?{

return?nonSerializeValueSalary;

}

public?void?setNonSerializeValueSalary(int?nonSerializeValueSalary)?{

this.nonSerializeValueSalary?=?nonSerializeValueSalary;

}

@Override

public?String?toString()?{

return?“Employee?[serializeValueName=”?+?serializeValueName?+?“]”;

}

}

import?java.io.FileOutputStream;

import?java.io.IOException;

import?java.io.ObjectOutputStream;

public?class?SerializingObject?{

public?static?void?main(String[]?args)?{

Employee?employeeOutput?=?null;

FileOutputStream?fos?=?null;

ObjectOutputStream?oos?=?null;

employeeOutput?=?new?Employee();

employeeOutput.setSerializeValueName(“Aman”);

employeeOutput.setNonSerializeValueSalary(50000);

try?{

fos?=?new?FileOutputStream(“Employee.ser”);

oos?=?new?ObjectOutputStream(fos);

oos.writeObject(employeeOutput);

System.out.println(“Serialized?data?is?saved?in?Employee.ser?file”);

oos.close();

fos.close();

}?catch?(IOException?e)?{

e.printStackTrace();

}?

}

}

Produits:

Serialized?data?is?saved?in?Employee.ser?file.

import?java.io.FileInputStream;

import?java.io.IOException;

import?java.io.ObjectInputStream;

public?class?DeSerializingObject?{

public?static?void?main(String[]?args)?{

Employee?employeeInput?=?null;

FileInputStream?fis?=?null;

ObjectInputStream?ois?=?null;

try?{

fis?=?new?FileInputStream(“Employee.ser”);

ois?=?new?ObjectInputStream(fis);

employeeInput?=?(Employee)ois.readObject();

Enfin

En fait, les besoins de recrutement des grandes usines sont maintenant visibles,Une grande expérience de la concurrence dans les exigences de recrutement est préférable,Y compris beaucoup d'amis qui travaillaient auparavant dans des industries traditionnelles ou des projets d'externalisation,A été dans une petite entreprise,La technologie est assez simple,Il n'y a rien de mal avec les systèmes distribués,Mais aujourd'hui, les entreprises Internet font généralement des systèmes distribués.

Alors dis,Si vous voulez entrer dans une grande usine,Pour s'éloigner de l'industrie traditionnelle,Ces connaissances techniques sont essentielles,J'en ai pris un moi - même.JavaSchéma de pensée du système simultané,J'espère que ça t'aidera..

Java Les quatre choses les plus déroutantes pour les développeurs ,Ça vaut le coup.!,BATDocuments d'entrevue_Java_03

Cet article a été publié par CODINGProjet Open Source:【Grandes usines de première ligneJavaAnalyse des questions d'entrevue+Résumé de base notes d'étude+Dernière vidéo d'explication+Code source du projet opérationnel】Inclus

版权声明
本文为[Harmonios Learning]所创,转载请带上原文链接,感谢
https://javamana.com/2021/11/20211125185549189S.html

  1. 图解 Kafka 线程模型及其设计缺陷
  2. Add data files for Oracle tablespaces or temporary tablespaces
  3. Intellij IDEA神器居然还有这些小技巧,mysql集群搭建视频
  4. IntelliJ IDEA(2019)之Web项目创建,掌门一对一java面试题
  5. InnoDB(2,如何访问Redis中的海量数据
  6. InheritableThreadLocal使用详解,java多线程面试题及答案整理
  7. How does Oracle modify the data type of a column
  8. Oracle 12C 12.1.0.1.0 management control file official document translation instructions
  9. Oracle 10g 10.2.0.1 in Oracle Linux 5.4 32bit RAC installation manual (Yimo Xiyang)
  10. Oracle 12C in Oracle Linux 6.5 64bit installation manual
  11. 一天十道Java面试题----第一天(面向对象-------》ArrayList和LinkedList)
  12. Schéma du modèle de fil Kafka et de ses défauts de conception
  13. Starting and shutting down Oracle RAC database cluster
  14. CRS_ Oracle CRS stack is already configured and will be running under init(1M)
  15. Common skills of Oracle stored procedure
  16. Check the number of CPUs, core books and threads of the Linux system
  17. jQuery-实例方法
  18. Oracle de duplicated data
  19. jQuery-dom和jQuery,入口函数(基本知识)
  20. Oracle creates unique constraints on columns that already have duplicate data
  21. JavaScript-拷贝
  22. JavaScript-this指向问题
  23.  There is ^ [[a garbled code problem in the up and down keys in Oracle sqlplus
  24. JavaScript-封装与继承(两种)
  25. JavaScript-包装类型
  26. JavaScript-传值(引用类型,基本类型)
  27. JavaScript-面向对象(构造函数,实例成员,静态成员)
  28. JavaScript-解构赋值
  29. JavaScript-箭头函数
  30. JavaScript-参数
  31. JavaScript-预解析(变量提升)
  32. JavaScript-闭包closure
  33. JavaScript-声明变量的关键字
  34. JavaScript - mot - clé pour déclarer une variable
  35. Fermeture de fermeture JavaScript
  36. JavaScript Pre - parse (promotion des variables)
  37. Paramètres JavaScript
  38. Fonction de flèche JavaScript
  39. JavaScript - déconstruction assignations
  40. Common annotations in springboot
  41. Building CentOS 7.6 with Linux
  42. JavaScript - orienté objet (constructeur, membre d'instance, membre statique)
  43. JavaScript value Transfer (reference type, Basic type)
  44. JavaScript - type d'emballage
  45. linux deepin/ubuntu安装flameshot火焰截图
  46. JavaScript - encapsulation et héritage (deux)
  47. JavaScript JS method for writing 99 multiplication table
  48. 從零開始學java - 第二十五天
  49. Apprendre Java à partir de zéro - jour 25
  50. Les voitures d'hiver, les voitures électriques et les voitures à essence ne sont pas les mêmes?
  51. JavaScript - ceci pointe vers le problème
  52. Copie JavaScript
  53. Spring boot quickly integrates swagger
  54. linux deepin/ubuntu安裝flameshot火焰截圖
  55. Capture d'écran de flamme de l'installateur de flamme Linux deepin / Ubuntu
  56. Jquery DOM et jquery, fonctions d'entrée (bases)
  57. Méthode d'instance jquery
  58. Méthode et démonstration de code dans l'interface de liste en Java
  59. Démarrage du Zookeeper
  60. Java oom Cognition