├── test ├── java_pid23700.hprof ├── Figure ├── 01-Map接口继承关系.png ├── 03-Collections工具类.png └── 02-Collection继承关系图.png ├── out └── testagent │ └── testagent.jar ├── src └── main │ ├── java │ ├── designpattern │ │ ├── uml │ │ │ ├── aggregation │ │ │ │ ├── Mouse.java │ │ │ │ ├── Moniter.java │ │ │ │ └── Computer.java │ │ │ ├── composition │ │ │ │ ├── Head.java │ │ │ │ ├── Mouse.java │ │ │ │ ├── IDCard.java │ │ │ │ ├── Moniter.java │ │ │ │ ├── Person.java │ │ │ │ └── Computer.java │ │ │ ├── dependence │ │ │ │ ├── IDCard.java │ │ │ │ ├── Person.java │ │ │ │ ├── Department.java │ │ │ │ ├── PersonDao.java │ │ │ │ └── PersonServiceBean.java │ │ │ ├── generalization │ │ │ │ ├── PersonServiceBean.java │ │ │ │ └── DaoSupport.java │ │ │ ├── implementation │ │ │ │ ├── PersonService.java │ │ │ │ └── PersonServiceBean.java │ │ │ └── Person.java │ │ ├── proxy │ │ │ ├── cglib │ │ │ │ ├── asm.jar │ │ │ │ ├── asm-tree.jar │ │ │ │ ├── cglib-2.2.jar │ │ │ │ ├── asm-commons.jar │ │ │ │ ├── TeacherDao.java │ │ │ │ └── Client.java │ │ │ ├── staticproxy │ │ │ │ ├── ITeacherDao.java │ │ │ │ ├── TeacherDao.java │ │ │ │ ├── Client.java │ │ │ │ └── TeacherDaoProxy.java │ │ │ └── dynamic │ │ │ │ ├── ITeacherDao.java │ │ │ │ ├── TeacherDao.java │ │ │ │ └── Client.java │ │ ├── strategy │ │ │ ├── improve │ │ │ │ ├── QuackBehavior.java │ │ │ │ ├── FlyBehavior.java │ │ │ │ ├── NoFlyBehavior.java │ │ │ │ ├── BadFlyBehavior.java │ │ │ │ ├── GoodFlyBehavior.java │ │ │ │ ├── ToyDuck.java │ │ │ │ ├── WildDuck.java │ │ │ │ ├── PekingDuck.java │ │ │ │ ├── Client.java │ │ │ │ └── Duck.java │ │ │ ├── Client.java │ │ │ ├── WildDuck.java │ │ │ ├── PekingDuck.java │ │ │ ├── Duck.java │ │ │ └── ToyDuck.java │ │ ├── bridge │ │ │ ├── Brand.java │ │ │ ├── application │ │ │ │ └── bridgeTest.java │ │ │ ├── Phone.java │ │ │ ├── Vivo.java │ │ │ ├── XiaoMi.java │ │ │ ├── UpRightPhone.java │ │ │ ├── FoldedPhone.java │ │ │ └── Client.java │ │ ├── flyweight │ │ │ ├── WebSite.java │ │ │ ├── User.java │ │ │ ├── ConcreteWebSite.java │ │ │ └── WebSiteFactory.java │ │ ├── adapter │ │ │ ├── classadapter │ │ │ │ ├── IVoltage5V.java │ │ │ │ ├── Voltage220V.java │ │ │ │ ├── Client.java │ │ │ │ ├── Phone.java │ │ │ │ └── VoltageAdapter.java │ │ │ ├── objectadapter │ │ │ │ ├── IVoltage5V.java │ │ │ │ ├── Voltage220V.java │ │ │ │ ├── Client.java │ │ │ │ ├── Phone.java │ │ │ │ └── VoltageAdapter.java │ │ │ ├── interfaceadapter │ │ │ │ ├── Interface4.java │ │ │ │ ├── AbsAdapter.java │ │ │ │ └── Client.java │ │ │ └── application │ │ │ │ └── AdapterTest.java │ │ ├── visitor │ │ │ ├── Person.java │ │ │ ├── Action.java │ │ │ ├── Man.java │ │ │ ├── Woman.java │ │ │ ├── Fail.java │ │ │ ├── Wait.java │ │ │ ├── Success.java │ │ │ ├── ObjectStructure.java │ │ │ └── Client.java │ │ ├── decorator │ │ │ ├── DeCaf.java │ │ │ ├── Espresso.java │ │ │ ├── LongBlack.java │ │ │ ├── ShortBlack.java │ │ │ ├── Coffee.java │ │ │ ├── Milk.java │ │ │ ├── Soy.java │ │ │ ├── Chocolate.java │ │ │ ├── Drink.java │ │ │ ├── application │ │ │ │ └── DecoratorTest.java │ │ │ └── Decorator.java │ │ ├── command │ │ │ ├── Command.java │ │ │ ├── TVReceiver.java │ │ │ ├── LightReceiver.java │ │ │ ├── NoCommand.java │ │ │ ├── TVOnCommand.java │ │ │ ├── TVOffCommand.java │ │ │ ├── LightOffCommand.java │ │ │ ├── LightOnCommand.java │ │ │ └── newfile.cld │ │ ├── observer │ │ │ ├── improve │ │ │ │ ├── Observer.java │ │ │ │ ├── Subject.java │ │ │ │ ├── CurrentConditions.java │ │ │ │ ├── BaiduSite.java │ │ │ │ └── Client.java │ │ │ ├── application │ │ │ │ └── observerTest.java │ │ │ ├── Client.java │ │ │ └── CurrentConditions.java │ │ ├── template │ │ │ ├── PeanutSoyaMilk.java │ │ │ ├── RedBeanSoyaMilk.java │ │ │ ├── improve │ │ │ │ ├── PeanutSoyaMilk.java │ │ │ │ ├── RedBeanSoyaMilk.java │ │ │ │ ├── PureSoyaMilk.java │ │ │ │ ├── Client.java │ │ │ │ └── SoyaMilk.java │ │ │ ├── appilication │ │ │ │ └── templateTest.java │ │ │ ├── Client.java │ │ │ └── SoyaMilk.java │ │ ├── builder │ │ │ ├── Client.java │ │ │ ├── AbstractHouse.java │ │ │ ├── application │ │ │ │ └── BuilderJdk.java │ │ │ ├── improve │ │ │ │ ├── HouseBuilder.java │ │ │ │ ├── CommonHouse.java │ │ │ │ ├── HighBuilding.java │ │ │ │ ├── House.java │ │ │ │ ├── HouseDirector.java │ │ │ │ └── Client.java │ │ │ └── CommonHouse.java │ │ ├── factory │ │ │ ├── absfactory │ │ │ │ └── pizzastore │ │ │ │ │ ├── order │ │ │ │ │ ├── AbsFactory.java │ │ │ │ │ ├── PizzaStore.java │ │ │ │ │ ├── LDFactory.java │ │ │ │ │ └── BJFactory.java │ │ │ │ │ └── pizza │ │ │ │ │ ├── BJPepperPizza.java │ │ │ │ │ ├── LDPepperPizza.java │ │ │ │ │ ├── LDCheesePizza.java │ │ │ │ │ ├── BJCheesePizza.java │ │ │ │ │ └── Pizza.java │ │ │ ├── simplefactory │ │ │ │ └── pizzastore │ │ │ │ │ ├── pizza │ │ │ │ │ ├── GreekPizza.java │ │ │ │ │ ├── PepperPizza.java │ │ │ │ │ ├── CheesePizza.java │ │ │ │ │ └── Pizza.java │ │ │ │ │ └── order │ │ │ │ │ └── PizzaStore.java │ │ │ ├── factorymethod │ │ │ │ └── pizzastore │ │ │ │ │ ├── pizza │ │ │ │ │ ├── BJPepperPizza.java │ │ │ │ │ ├── LDPepperPizza.java │ │ │ │ │ ├── LDCheesePizza.java │ │ │ │ │ ├── BJCheesePizza.java │ │ │ │ │ └── Pizza.java │ │ │ │ │ └── order │ │ │ │ │ ├── PizzaStore.java │ │ │ │ │ ├── BJOrderPizza.java │ │ │ │ │ └── LDOrderPizza.java │ │ │ └── application │ │ │ │ └── FactoryJdk.java │ │ ├── memento │ │ │ ├── theory │ │ │ │ ├── Memento.java │ │ │ │ ├── Caretaker.java │ │ │ │ └── Originator.java │ │ │ └── game │ │ │ │ ├── Caretaker.java │ │ │ │ ├── Memento.java │ │ │ │ ├── Client.java │ │ │ │ └── GameRole.java │ │ ├── iterator │ │ │ ├── College.java │ │ │ ├── eml.puml │ │ │ ├── Department.java │ │ │ ├── application │ │ │ │ └── iteratorTest.java │ │ │ └── Client.java │ │ ├── singleton │ │ │ ├── application │ │ │ │ └── SingletonJdk.java │ │ │ ├── type8 │ │ │ │ └── SingletonTest08.java │ │ │ ├── type1 │ │ │ │ └── SingletonTest01.java │ │ │ ├── type3 │ │ │ │ └── SingletonTest03.java │ │ │ └── type4 │ │ │ │ └── SingletonTest04.java │ │ ├── state │ │ │ ├── State.java │ │ │ ├── ClientTest.java │ │ │ ├── money │ │ │ │ ├── StateEnum.java │ │ │ │ └── ClientTest.java │ │ │ ├── DispenseOutState.java │ │ │ └── NoRaffleState.java │ │ ├── mediator │ │ │ └── smarthouse │ │ │ │ ├── Mediator.java │ │ │ │ ├── Colleague.java │ │ │ │ ├── Curtains.java │ │ │ │ ├── Alarm.java │ │ │ │ ├── ClientTest.java │ │ │ │ ├── TV.java │ │ │ │ └── CoffeeMachine.java │ │ ├── interpreter │ │ │ ├── Expression.java │ │ │ ├── SubExpression.java │ │ │ ├── VarExpression.java │ │ │ ├── AddExpression.java │ │ │ ├── SymbolExpression.java │ │ │ └── application │ │ │ │ └── interpretetTest.java │ │ ├── facade │ │ │ ├── Client.java │ │ │ ├── Screen.java │ │ │ ├── Popcorn.java │ │ │ ├── Stereo.java │ │ │ ├── Projector.java │ │ │ ├── DVDPlayer.java │ │ │ └── TheaterLight.java │ │ ├── responsibilitychain │ │ │ ├── Approver.java │ │ │ ├── PurchaseRequest.java │ │ │ ├── SchoolMasterApprover.java │ │ │ ├── DepartmentApprover.java │ │ │ ├── CollegeApprover.java │ │ │ └── ViceSchoolMasterApprover.java │ │ ├── principle │ │ │ ├── singleresponsibility │ │ │ │ └── SingleResponsibility1.java │ │ │ ├── inversion │ │ │ │ ├── DependecyInversion.java │ │ │ │ └── improve │ │ │ │ │ └── DependecyInversion.java │ │ │ ├── composite │ │ │ │ └── newfile.cld │ │ │ └── segregation │ │ │ │ └── newfile2.cld │ │ ├── prototype │ │ │ ├── deepclone │ │ │ │ └── DeepCloneableTarget.java │ │ │ ├── Client.java │ │ │ └── Sheep.java │ │ └── composite │ │ │ └── Department.java │ ├── concurrent │ │ ├── juctools │ │ │ ├── imooccache │ │ │ │ ├── ImoocCache11.java │ │ │ │ └── computable │ │ │ │ │ ├── Computable.java │ │ │ │ │ ├── ExpensiveFunction.java │ │ │ │ │ └── MayFail.java │ │ │ ├── collections │ │ │ │ ├── concurrenthashmap │ │ │ │ │ └── ConcurrentHashMapDemo.java │ │ │ │ ├── predecessor │ │ │ │ │ ├── VectorDemo.java │ │ │ │ │ ├── HashtableDemo.java │ │ │ │ │ ├── SynList.java │ │ │ │ │ └── MapDemo.java │ │ │ │ └── copyonwrite │ │ │ │ │ └── CopyOnWriteArrayListDemo2.java │ │ │ ├── aqs │ │ │ │ └── AQSDemo.java │ │ │ ├── cas │ │ │ │ └── SimulatedCAS.java │ │ │ ├── immutable │ │ │ │ ├── FinalStringDemo1.java │ │ │ │ ├── FinalStringDemo2.java │ │ │ │ ├── Person.java │ │ │ │ ├── FinalVariableDemo.java │ │ │ │ ├── ImmutableDemo.java │ │ │ │ ├── FinalMethodDemo.java │ │ │ │ └── TestFinal.java │ │ │ ├── threadpool │ │ │ │ ├── EveryTaskOneThread.java │ │ │ │ ├── CachedThreadPool.java │ │ │ │ ├── SingleThreadExecutor.java │ │ │ │ ├── ForLoop.java │ │ │ │ ├── ScheduledThreadPoolTest.java │ │ │ │ ├── FixedThreadPoolOOM.java │ │ │ │ └── FixedThreadPoolTest.java │ │ │ ├── lock │ │ │ │ ├── lock │ │ │ │ │ ├── PessimismOptimismLock.java │ │ │ │ │ └── MustUnlock.java │ │ │ │ └── reentrantlock │ │ │ │ │ ├── RecursionDemo.java │ │ │ │ │ └── GetHoldCount.java │ │ │ ├── flowcontrol │ │ │ │ └── locksupport │ │ │ │ │ └── LockSupportDemo.java │ │ │ ├── future │ │ │ │ └── RunnableCantThrowsException.java │ │ │ ├── atomic │ │ │ │ └── LongAccumulatorDemo.java │ │ │ └── threadlocal │ │ │ │ └── ThreadLocalNPE.java │ │ ├── base │ │ │ ├── singleton │ │ │ │ ├── Singleton8.java │ │ │ │ ├── Singleton1.java │ │ │ │ ├── Singleton2.java │ │ │ │ ├── Singleton3.java │ │ │ │ ├── Singleton7.java │ │ │ │ ├── Singleton4.java │ │ │ │ ├── Singleton5.java │ │ │ │ └── Singleton6.java │ │ │ ├── background │ │ │ │ ├── JavaAndThreads.java │ │ │ │ └── Create100Threads.java │ │ │ ├── threadcoreknowledge │ │ │ │ ├── createthreads │ │ │ │ │ ├── wrongways │ │ │ │ │ │ ├── Lambda.java │ │ │ │ │ │ ├── DemoTimmerTask.java │ │ │ │ │ │ ├── AnonymousInnerClassDemo.java │ │ │ │ │ │ └── ThreadPool5.java │ │ │ │ │ ├── ThreadStyle.java │ │ │ │ │ ├── RunnableStyle.java │ │ │ │ │ └── BothRunnableThread.java │ │ │ │ ├── startthread │ │ │ │ │ ├── CantStartTwice.java │ │ │ │ │ └── StartAndRunMethod.java │ │ │ │ ├── threadobjectclasscommonmethods │ │ │ │ │ ├── ThreadSetName.java │ │ │ │ │ ├── Id.java │ │ │ │ │ └── CurrentThread.java │ │ │ │ ├── uncaughtexception │ │ │ │ │ ├── ExceptionInChildThread.java │ │ │ │ │ └── MyUncaughtExceptionHandler.java │ │ │ │ └── stopthreads │ │ │ │ │ ├── RunThrowException.java │ │ │ │ │ └── RightWayStopThreadWithoutSleep.java │ │ │ └── jmm │ │ │ │ └── NoVolatile.java │ │ ├── SynMark.java │ │ └── SynExample2.java │ ├── jvm │ │ ├── TestOperation.java │ │ ├── agent │ │ │ └── asm │ │ │ │ ├── MyTest.java │ │ │ │ ├── TestAgent.java │ │ │ │ ├── Attacher.java │ │ │ │ ├── Base.java │ │ │ │ └── JavassistTest.java │ │ ├── command │ │ │ ├── jps │ │ │ │ └── ScannerTest.java │ │ │ ├── jstat │ │ │ │ ├── ScannerTest.java │ │ │ │ └── GCTest.java │ │ │ ├── jstack │ │ │ │ ├── TreadSleepTest.java │ │ │ │ └── AllStackTrace.java │ │ │ └── jmap │ │ │ │ └── GCTest.java │ │ ├── tools │ │ │ ├── memoryleak │ │ │ │ └── MemoryLeak.java │ │ │ ├── mat │ │ │ │ └── OOMTest.java │ │ │ ├── jprofiler │ │ │ │ ├── OOMTest.java │ │ │ │ └── JProfilerTest.java │ │ │ ├── jvisualvm │ │ │ │ ├── OomTest.java │ │ │ │ └── HeapInstanceTest.java │ │ │ └── jconsole │ │ │ │ └── HeapInstanceTest.java │ │ ├── gclog │ │ │ ├── LambdaGC.java │ │ │ └── GCLogTest.java │ │ ├── Test1.java │ │ └── jvmargs │ │ │ └── GCLogTest.java │ ├── algorithm │ │ ├── tu │ │ │ ├── Edge.java │ │ │ ├── Graph.java │ │ │ ├── Node.java │ │ │ ├── N_01_BFS.java │ │ │ ├── N_02_DFS.java │ │ │ ├── GraphGenerator.java │ │ │ └── N_03_TopologySort.java │ │ ├── common │ │ │ ├── LinkedNode.java │ │ │ ├── TreeNode.java │ │ │ ├── DoubleLinkedNode.java │ │ │ ├── RandomListNode.java │ │ │ ├── TreeLinkedNode.java │ │ │ └── TrieNode.java │ │ ├── array │ │ │ ├── L_面1601_交换数字.java │ │ │ ├── L_面1617_连续数列.java │ │ │ ├── L_面0101_判断字符是否唯一.java │ │ │ ├── L_面1704_消失的数字.java │ │ │ └── L_面53_排序数组中缺失的数.java │ │ ├── dynamic │ │ │ └── N_01_N阶乘.java │ │ ├── string │ │ │ ├── L_面0104_回文序列.java │ │ │ └── L_面0502_二进制转字符串.java │ │ └── tree │ │ │ └── N_05_折纸问题.java │ ├── redis6 │ │ └── distributelock │ │ │ └── redlock │ │ │ └── config │ │ │ ├── RedisSingleProperties.java │ │ │ ├── RedisPoolProperties.java │ │ │ └── RedisProperties.java │ ├── ionio │ │ ├── bio │ │ │ └── accept │ │ │ │ ├── BioClient01.java │ │ │ │ ├── BioClient02.java │ │ │ │ └── BioServer.java │ │ └── zerocopy │ │ │ └── SendFileTest.java │ └── javase │ │ ├── LocalDateUtils.java │ │ ├── LRU.java │ │ ├── StreamTest.java │ │ └── User.java │ └── resources │ └── application.properties ├── 10-网络目录.md ├── 06-技术栈目录.md ├── MANIFEST.MF └── .gitignore /test: -------------------------------------------------------------------------------- 1 | commit 1 2 | commit 2 3 | commit 3 4 | commit 4qq 5 | 6 | 7 | -------------------------------------------------------------------------------- /java_pid23700.hprof: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsfxuebao/java-study/HEAD/java_pid23700.hprof -------------------------------------------------------------------------------- /Figure/01-Map接口继承关系.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsfxuebao/java-study/HEAD/Figure/01-Map接口继承关系.png -------------------------------------------------------------------------------- /Figure/03-Collections工具类.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsfxuebao/java-study/HEAD/Figure/03-Collections工具类.png -------------------------------------------------------------------------------- /out/testagent/testagent.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsfxuebao/java-study/HEAD/out/testagent/testagent.jar -------------------------------------------------------------------------------- /Figure/02-Collection继承关系图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsfxuebao/java-study/HEAD/Figure/02-Collection继承关系图.png -------------------------------------------------------------------------------- /src/main/java/designpattern/uml/aggregation/Mouse.java: -------------------------------------------------------------------------------- 1 | package designpattern.uml.aggregation; 2 | 3 | public class Mouse { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/designpattern/uml/composition/Head.java: -------------------------------------------------------------------------------- 1 | package designpattern.uml.composition; 2 | 3 | public class Head { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/designpattern/uml/composition/Mouse.java: -------------------------------------------------------------------------------- 1 | package designpattern.uml.composition; 2 | 3 | public class Mouse { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/designpattern/uml/dependence/IDCard.java: -------------------------------------------------------------------------------- 1 | package designpattern.uml.dependence; 2 | 3 | public class IDCard { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/designpattern/uml/dependence/Person.java: -------------------------------------------------------------------------------- 1 | package designpattern.uml.dependence; 2 | 3 | public class Person { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/designpattern/uml/aggregation/Moniter.java: -------------------------------------------------------------------------------- 1 | package designpattern.uml.aggregation; 2 | 3 | public class Moniter { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/designpattern/uml/composition/IDCard.java: -------------------------------------------------------------------------------- 1 | package designpattern.uml.composition; 2 | 3 | public class IDCard { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/designpattern/uml/composition/Moniter.java: -------------------------------------------------------------------------------- 1 | package designpattern.uml.composition; 2 | 3 | public class Moniter { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/designpattern/proxy/cglib/asm.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsfxuebao/java-study/HEAD/src/main/java/designpattern/proxy/cglib/asm.jar -------------------------------------------------------------------------------- /src/main/java/designpattern/uml/dependence/Department.java: -------------------------------------------------------------------------------- 1 | package designpattern.uml.dependence; 2 | 3 | public class Department { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/designpattern/uml/dependence/PersonDao.java: -------------------------------------------------------------------------------- 1 | package designpattern.uml.dependence; 2 | 3 | public class PersonDao { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/designpattern/proxy/cglib/asm-tree.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsfxuebao/java-study/HEAD/src/main/java/designpattern/proxy/cglib/asm-tree.jar -------------------------------------------------------------------------------- /src/main/java/designpattern/proxy/cglib/cglib-2.2.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsfxuebao/java-study/HEAD/src/main/java/designpattern/proxy/cglib/cglib-2.2.jar -------------------------------------------------------------------------------- /src/main/java/designpattern/proxy/cglib/asm-commons.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hsfxuebao/java-study/HEAD/src/main/java/designpattern/proxy/cglib/asm-commons.jar -------------------------------------------------------------------------------- /src/main/java/designpattern/strategy/improve/QuackBehavior.java: -------------------------------------------------------------------------------- 1 | package designpattern.strategy.improve; 2 | 3 | public interface QuackBehavior { 4 | void quack();// 子类实现 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/designpattern/bridge/Brand.java: -------------------------------------------------------------------------------- 1 | package designpattern.bridge; 2 | 3 | //接口 4 | public interface Brand { 5 | void open(); 6 | void close(); 7 | void call(); 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/designpattern/strategy/improve/FlyBehavior.java: -------------------------------------------------------------------------------- 1 | package designpattern.strategy.improve; 2 | 3 | public interface FlyBehavior { 4 | 5 | void fly(); // 子类来实现 6 | } 7 | -------------------------------------------------------------------------------- /src/main/java/designpattern/uml/generalization/PersonServiceBean.java: -------------------------------------------------------------------------------- 1 | package designpattern.uml.generalization; 2 | 3 | public class PersonServiceBean extends DaoSupport { 4 | 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/designpattern/flyweight/WebSite.java: -------------------------------------------------------------------------------- 1 | package designpattern.flyweight; 2 | 3 | public abstract class WebSite { 4 | 5 | public abstract void use(User user);// 抽象方法 6 | } 7 | -------------------------------------------------------------------------------- /10-网络目录.md: -------------------------------------------------------------------------------- 1 | # 网络 2 | > 包含网络,HTTP等知识点 3 | 4 | ## 01-网络 5 | 6 | ## 02-HTTP 7 | 8 | 1. [HTTP灵魂之问,巩固你的 HTTP 知识体系](https://juejin.im/post/5e7adf47e51d4527261543b5) 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/main/java/concurrent/juctools/imooccache/ImoocCache11.java: -------------------------------------------------------------------------------- 1 | package concurrent.juctools.imooccache; 2 | 3 | /** 4 | * 描述: 线程池看缓存效果 5 | */ 6 | public class ImoocCache11 { 7 | 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/designpattern/adapter/classadapter/IVoltage5V.java: -------------------------------------------------------------------------------- 1 | package designpattern.adapter.classadapter; 2 | 3 | 4 | //适配接口 5 | public interface IVoltage5V { 6 | public int output5V(); 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/designpattern/uml/implementation/PersonService.java: -------------------------------------------------------------------------------- 1 | package designpattern.uml.implementation; 2 | 3 | public interface PersonService { 4 | public void delete(Integer id); 5 | 6 | } 7 | -------------------------------------------------------------------------------- /src/main/java/designpattern/adapter/objectadapter/IVoltage5V.java: -------------------------------------------------------------------------------- 1 | package designpattern.adapter.objectadapter; 2 | 3 | 4 | //适配接口 5 | public interface IVoltage5V { 6 | public int output5V(); 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/designpattern/proxy/staticproxy/ITeacherDao.java: -------------------------------------------------------------------------------- 1 | package designpattern.proxy.staticproxy; 2 | 3 | 4 | // 接口 5 | public interface ITeacherDao { 6 | 7 | void teach(); // 授课的方法 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/designpattern/visitor/Person.java: -------------------------------------------------------------------------------- 1 | package designpattern.visitor; 2 | 3 | public abstract class Person { 4 | 5 | // 提供一个方法,让访问者可以访问 6 | public abstract void accept(Action action); 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/designpattern/proxy/dynamic/ITeacherDao.java: -------------------------------------------------------------------------------- 1 | package designpattern.proxy.dynamic; 2 | 3 | // 接口 4 | public interface ITeacherDao { 5 | 6 | void teach(); // 授课的方法 7 | void sayHello(String name); 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/designpattern/uml/composition/Person.java: -------------------------------------------------------------------------------- 1 | package designpattern.uml.composition; 2 | 3 | public class Person { 4 | private IDCard card; //�ۺϹ�ϵ 5 | private Head head = new Head(); //��Ϲ�ϵ 6 | 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/designpattern/decorator/DeCaf.java: -------------------------------------------------------------------------------- 1 | package designpattern.decorator; 2 | 3 | public class DeCaf extends Coffee { 4 | 5 | public DeCaf() { 6 | setDes(" 无因咖啡 "); 7 | setPrice(1.0f); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/designpattern/decorator/Espresso.java: -------------------------------------------------------------------------------- 1 | package designpattern.decorator; 2 | 3 | public class Espresso extends Coffee { 4 | 5 | public Espresso() { 6 | setDes(" 意大利咖啡 "); 7 | setPrice(6.0f); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/designpattern/decorator/LongBlack.java: -------------------------------------------------------------------------------- 1 | package designpattern.decorator; 2 | 3 | public class LongBlack extends Coffee { 4 | 5 | public LongBlack() { 6 | setDes(" longblack "); 7 | setPrice(5.0f); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/concurrent/base/singleton/Singleton8.java: -------------------------------------------------------------------------------- 1 | package concurrent.base.singleton; 2 | 3 | /** 4 | * 描述: 枚举单例 5 | */ 6 | public enum Singleton8 { 7 | INSTANCE; 8 | 9 | public void whatever() { 10 | 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/designpattern/bridge/application/bridgeTest.java: -------------------------------------------------------------------------------- 1 | package designpattern.bridge.application; 2 | 3 | /** 4 | * @author hsfxuebao 5 | * Created on 2021-07-31 6 | */ 7 | public class bridgeTest { 8 | 9 | // JDBC 源码 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/designpattern/command/Command.java: -------------------------------------------------------------------------------- 1 | package designpattern.command; 2 | 3 | 4 | // 命令 接口 5 | public interface Command { 6 | 7 | //ִ 执行动作 操作 8 | public void execute(); 9 | //撤销动作 10 | public void undo(); 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/designpattern/decorator/ShortBlack.java: -------------------------------------------------------------------------------- 1 | package designpattern.decorator; 2 | 3 | public class ShortBlack extends Coffee{ 4 | 5 | public ShortBlack() { 6 | setDes(" shortblack "); 7 | setPrice(4.0f); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/designpattern/observer/improve/Observer.java: -------------------------------------------------------------------------------- 1 | package designpattern.observer.improve; 2 | 3 | // 观察者接口 由观察者实现 4 | public interface Observer { 5 | 6 | public void update(float temperature, float pressure, float humidity); 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/designpattern/strategy/Client.java: -------------------------------------------------------------------------------- 1 | package designpattern.strategy; 2 | 3 | public class Client { 4 | 5 | public static void main(String[] args) { 6 | // TODO Auto-generated method stub 7 | // 测试 8 | } 9 | 10 | } 11 | -------------------------------------------------------------------------------- /06-技术栈目录.md: -------------------------------------------------------------------------------- 1 | # 技术栈 2 | 3 | 包含技术栈 4 | 5 | ## 01-Dubbo 6 | 7 | 1. [RPC原理解析](https://juejin.im/post/5e804e73e51d4546e8574f2e) 8 | 2. 9 | 10 | ## 02-Grafana 11 | 12 | 1. [Grafana-graph面板用法](https://juejin.im/post/5ecccec1f265da7700280cb1) 13 | 14 | -------------------------------------------------------------------------------- /MANIFEST.MF: -------------------------------------------------------------------------------- 1 | Manifest-Version: 1.0 2 | Agent-Class: jvm.agent.asm.TestAgent 3 | Created-By: hsfxuebao 4 | Can-Redefine-Classes: true 5 | Can-Retransform-Classes: true 6 | Boot-Class-Path: javassist-3.25.0-GA.jar 7 | Main-Class: jvm.agent.asm.TestAgent 8 | 9 | -------------------------------------------------------------------------------- /src/main/java/designpattern/adapter/interfaceadapter/Interface4.java: -------------------------------------------------------------------------------- 1 | package designpattern.adapter.interfaceadapter; 2 | 3 | public interface Interface4 { 4 | public void m1(); 5 | public void m2(); 6 | public void m3(); 7 | public void m4(); 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/designpattern/proxy/cglib/TeacherDao.java: -------------------------------------------------------------------------------- 1 | package designpattern.proxy.cglib; 2 | 3 | public class TeacherDao { 4 | 5 | public String teach() { 6 | System.out.println(" 老师授课中,我是cglib代理,不需要实现接口 "); 7 | return "hello"; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/designpattern/uml/generalization/DaoSupport.java: -------------------------------------------------------------------------------- 1 | package designpattern.uml.generalization; 2 | 3 | public abstract class DaoSupport{ 4 | public void save(Object entity){ 5 | } 6 | public void delete(Object id){ 7 | } 8 | } 9 | 10 | -------------------------------------------------------------------------------- /src/main/java/designpattern/strategy/WildDuck.java: -------------------------------------------------------------------------------- 1 | package designpattern.strategy; 2 | 3 | public class WildDuck extends Duck { 4 | 5 | @Override 6 | public void display() { 7 | // TODO Auto-generated method stub 8 | System.out.println(" 野鸭子 "); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/designpattern/visitor/Action.java: -------------------------------------------------------------------------------- 1 | package designpattern.visitor; 2 | 3 | public abstract class Action { 4 | 5 | // 得到男性的评价 6 | public abstract void getManResult(Man man); 7 | 8 | // 得到女性的评价 9 | public abstract void getWomanResult(Woman woman); 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/designpattern/visitor/Man.java: -------------------------------------------------------------------------------- 1 | package designpattern.visitor; 2 | 3 | public class Man extends Person { 4 | 5 | @Override 6 | public void accept(Action action) { 7 | // TODO Auto-generated method stub 8 | action.getManResult(this); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/designpattern/decorator/Coffee.java: -------------------------------------------------------------------------------- 1 | package designpattern.decorator; 2 | 3 | public class Coffee extends Drink { 4 | 5 | @Override 6 | public float cost() { 7 | // TODO Auto-generated method stub 8 | return super.getPrice(); 9 | } 10 | 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/jvm/TestOperation.java: -------------------------------------------------------------------------------- 1 | package jvm; 2 | 3 | /** 4 | * @author hsfxuebao 5 | * @date 2020/04/10 6 | */ 7 | public class TestOperation { 8 | 9 | public void testOperation() { 10 | 11 | byte i = 15; 12 | int j = 8; 13 | int k = i + j; 14 | 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/concurrent/juctools/collections/concurrenthashmap/ConcurrentHashMapDemo.java: -------------------------------------------------------------------------------- 1 | package concurrent.juctools.collections.concurrenthashmap; 2 | 3 | import java.util.concurrent.ConcurrentHashMap; 4 | 5 | /** 6 | * 描述: TODO 7 | */ 8 | public class ConcurrentHashMapDemo { 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/designpattern/command/TVReceiver.java: -------------------------------------------------------------------------------- 1 | package designpattern.command; 2 | 3 | public class TVReceiver { 4 | 5 | public void on() { 6 | System.out.println(" 电视机打开了.. "); 7 | } 8 | 9 | public void off() { 10 | System.out.println(" 电视机关闭了.. "); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/designpattern/command/LightReceiver.java: -------------------------------------------------------------------------------- 1 | package designpattern.command; 2 | 3 | public class LightReceiver { 4 | 5 | public void on() { 6 | System.out.println(" 点灯打开了.. "); 7 | } 8 | 9 | public void off() { 10 | System.out.println(" 点灯关闭了.. "); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/designpattern/decorator/Milk.java: -------------------------------------------------------------------------------- 1 | package designpattern.decorator; 2 | 3 | public class Milk extends Decorator { 4 | 5 | public Milk(Drink obj) { 6 | super(obj); 7 | // TODO Auto-generated constructor stub 8 | setDes(" 牛奶 "); 9 | setPrice(2.0f); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/designpattern/decorator/Soy.java: -------------------------------------------------------------------------------- 1 | package designpattern.decorator; 2 | 3 | public class Soy extends Decorator{ 4 | 5 | public Soy(Drink obj) { 6 | super(obj); 7 | // TODO Auto-generated constructor stub 8 | setDes(" 豆浆 "); 9 | setPrice(1.5f); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/designpattern/template/PeanutSoyaMilk.java: -------------------------------------------------------------------------------- 1 | package designpattern.template; 2 | 3 | public class PeanutSoyaMilk extends SoyaMilk { 4 | 5 | @Override 6 | void addCondiments() { 7 | // TODO Auto-generated method stub 8 | System.out.println(" 上好的花生 "); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/designpattern/template/RedBeanSoyaMilk.java: -------------------------------------------------------------------------------- 1 | package designpattern.template; 2 | 3 | public class RedBeanSoyaMilk extends SoyaMilk { 4 | 5 | @Override 6 | void addCondiments() { 7 | // TODO Auto-generated method stub 8 | System.out.println("加入上好的红豆"); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/jvm/agent/asm/MyTest.java: -------------------------------------------------------------------------------- 1 | package jvm.agent.asm; 2 | 3 | /** 4 | * @author hsfxuebao 5 | * Created on 2021-03-24 6 | */ 7 | public class MyTest { 8 | 9 | public static void main(String[] args) { 10 | Base base = new Base(); 11 | base.process(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/algorithm/tu/Edge.java: -------------------------------------------------------------------------------- 1 | package algorithm.tu; 2 | 3 | public class Edge { 4 | public int weight; 5 | public Node from; 6 | public Node to; 7 | 8 | public Edge(int weight, Node from, Node to) { 9 | this.weight = weight; 10 | this.from = from; 11 | this.to = to; 12 | } 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/concurrent/juctools/imooccache/computable/Computable.java: -------------------------------------------------------------------------------- 1 | package concurrent.juctools.imooccache.computable; 2 | 3 | /** 4 | * 描述: 有一个计算函数computer,用来代表耗时计算,每个计算器都要实现这个接口,这样就可以无侵入实现缓存功能 5 | */ 6 | public interface Computable { 7 | 8 | V compute(A arg) throws Exception; 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/designpattern/decorator/Chocolate.java: -------------------------------------------------------------------------------- 1 | package designpattern.decorator; 2 | 3 | //具体的Decorator 这里是调味品 4 | public class Chocolate extends Decorator { 5 | 6 | public Chocolate(Drink obj) { 7 | super(obj); 8 | setDes(" 千克力 "); 9 | setPrice(3.0f); // 价格 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/designpattern/observer/improve/Subject.java: -------------------------------------------------------------------------------- 1 | package designpattern.observer.improve; 2 | 3 | // 接口 WeatherData 来实现 4 | public interface Subject { 5 | 6 | public void registerObserver(Observer o); 7 | public void removeObserver(Observer o); 8 | public void notifyObservers(); 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/designpattern/adapter/classadapter/Voltage220V.java: -------------------------------------------------------------------------------- 1 | package designpattern.adapter.classadapter; 2 | 3 | //被适配的类 4 | public class Voltage220V { 5 | //输出220V 6 | public int output220V() { 7 | int src = 220; 8 | System.out.println("电压" + src + "伏"); 9 | return src; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/designpattern/adapter/objectadapter/Voltage220V.java: -------------------------------------------------------------------------------- 1 | package designpattern.adapter.objectadapter; 2 | 3 | //被适配的类 4 | public class Voltage220V { 5 | //输出220V 6 | public int output220V() { 7 | int src = 220; 8 | System.out.println("电压" + src + "伏"); 9 | return src; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/designpattern/builder/Client.java: -------------------------------------------------------------------------------- 1 | package designpattern.builder; 2 | 3 | public class Client { 4 | 5 | public static void main(String[] args) { 6 | // TODO Auto-generated method stub 7 | CommonHouse commonHouse = new CommonHouse(); 8 | commonHouse.build(); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/redis6/distributelock/redlock/config/RedisSingleProperties.java: -------------------------------------------------------------------------------- 1 | package redis6.distributelock.redlock.config; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class RedisSingleProperties { 7 | private String address1; 8 | private String address2; 9 | private String address3; 10 | } -------------------------------------------------------------------------------- /src/main/java/designpattern/proxy/staticproxy/TeacherDao.java: -------------------------------------------------------------------------------- 1 | package designpattern.proxy.staticproxy; 2 | 3 | public class TeacherDao implements ITeacherDao { 4 | 5 | @Override 6 | public void teach() { 7 | // TODO Auto-generated method stub 8 | System.out.println(" 老师授课中"); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/designpattern/strategy/improve/NoFlyBehavior.java: -------------------------------------------------------------------------------- 1 | package designpattern.strategy.improve; 2 | 3 | public class NoFlyBehavior implements FlyBehavior{ 4 | 5 | @Override 6 | public void fly() { 7 | // TODO Auto-generated method stub 8 | System.out.println(" 不会飞翔 "); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/designpattern/template/improve/PeanutSoyaMilk.java: -------------------------------------------------------------------------------- 1 | package designpattern.template.improve; 2 | 3 | public class PeanutSoyaMilk extends SoyaMilk { 4 | 5 | @Override 6 | void addCondiments() { 7 | // TODO Auto-generated method stub 8 | System.out.println(" 上好的花生 "); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/designpattern/uml/Person.java: -------------------------------------------------------------------------------- 1 | package designpattern.uml; 2 | 3 | public class Person{ //������ʽ->��ͼ 4 | private Integer id; 5 | private String name; 6 | public void setName(String name){ 7 | this.name=name; 8 | } 9 | public String getName(){ 10 | return name; 11 | } 12 | } 13 | 14 | -------------------------------------------------------------------------------- /src/main/java/designpattern/adapter/application/AdapterTest.java: -------------------------------------------------------------------------------- 1 | package designpattern.adapter.application; 2 | 3 | /** 4 | * @author hsfxuebao 5 | * Created on 2021-07-31 6 | */ 7 | public class AdapterTest { 8 | 9 | public static void main(String[] args) { 10 | 11 | //DispatcherServlet 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/designpattern/strategy/improve/BadFlyBehavior.java: -------------------------------------------------------------------------------- 1 | package designpattern.strategy.improve; 2 | 3 | public class BadFlyBehavior implements FlyBehavior { 4 | 5 | @Override 6 | public void fly() { 7 | // TODO Auto-generated method stub 8 | System.out.println(" 飞翔技术一般 "); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/designpattern/observer/application/observerTest.java: -------------------------------------------------------------------------------- 1 | package designpattern.observer.application; 2 | 3 | /** 4 | * @author hsfxuebao 5 | * Created on 2021-08-04 6 | */ 7 | public class observerTest { 8 | 9 | 10 | public static void main(String[] args) { 11 | // Observable 12 | 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/designpattern/strategy/improve/GoodFlyBehavior.java: -------------------------------------------------------------------------------- 1 | package designpattern.strategy.improve; 2 | 3 | public class GoodFlyBehavior implements FlyBehavior { 4 | 5 | @Override 6 | public void fly() { 7 | // TODO Auto-generated method stub 8 | System.out.println(" 飞翔技术很好 ~~~"); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/designpattern/template/improve/RedBeanSoyaMilk.java: -------------------------------------------------------------------------------- 1 | package designpattern.template.improve; 2 | 3 | 4 | public class RedBeanSoyaMilk extends SoyaMilk { 5 | 6 | @Override 7 | void addCondiments() { 8 | // TODO Auto-generated method stub 9 | System.out.println("加入上好的红豆"); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/algorithm/common/LinkedNode.java: -------------------------------------------------------------------------------- 1 | package algorithm.common; 2 | 3 | /** 4 | * 链表结构 5 | * @author hsfxuebao 6 | * @date 2020/03/15 7 | */ 8 | public class LinkedNode { 9 | 10 | public int value; 11 | public LinkedNode next; 12 | 13 | public LinkedNode(int value) { 14 | this.value = value; 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/jvm/command/jps/ScannerTest.java: -------------------------------------------------------------------------------- 1 | package jvm.command.jps; 2 | 3 | import java.util.Scanner; 4 | 5 | /** 6 | */ 7 | public class ScannerTest { 8 | public static void main(String[] args) { 9 | Scanner scanner = new Scanner(System.in); 10 | String info = scanner.next(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/algorithm/tu/Graph.java: -------------------------------------------------------------------------------- 1 | package algorithm.tu; 2 | 3 | import java.util.HashMap; 4 | import java.util.HashSet; 5 | 6 | public class Graph { 7 | public HashMap nodes; 8 | public HashSet edges; 9 | 10 | public Graph() { 11 | nodes = new HashMap<>(); 12 | edges = new HashSet<>(); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/concurrent/base/background/JavaAndThreads.java: -------------------------------------------------------------------------------- 1 | package concurrent.base.background; 2 | 3 | /** 4 | * 描述: 即使代码中不显示创建线程,在运行main时,JVM也会自动启动其他的线程,用断点debug查看 5 | */ 6 | public class JavaAndThreads { 7 | 8 | public static void main(String[] args) { 9 | System.out.println("Hello Threads!"); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/algorithm/common/TreeNode.java: -------------------------------------------------------------------------------- 1 | package algorithm.common; 2 | 3 | /** 4 | * 树的结构 5 | * @author hsfxuebao 6 | * @date 2020/03/13 7 | */ 8 | public class TreeNode { 9 | public int value; 10 | public TreeNode left; 11 | public TreeNode right; 12 | 13 | public TreeNode(int value) { 14 | this.value = value; } 15 | } -------------------------------------------------------------------------------- /src/main/java/designpattern/uml/implementation/PersonServiceBean.java: -------------------------------------------------------------------------------- 1 | package designpattern.uml.implementation; 2 | 3 | public class PersonServiceBean implements PersonService{ 4 | 5 | @Override 6 | public void delete(Integer id) { 7 | // TODO Auto-generated method stub 8 | System.out.println("delete.."); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/jvm/command/jstat/ScannerTest.java: -------------------------------------------------------------------------------- 1 | package jvm.command.jstat; 2 | 3 | import java.util.Scanner; 4 | 5 | /** 6 | * 7 | */ 8 | public class ScannerTest { 9 | public static void main(String[] args) { 10 | Scanner scanner = new Scanner(System.in); 11 | String info = scanner.next(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/jvm/tools/memoryleak/MemoryLeak.java: -------------------------------------------------------------------------------- 1 | package jvm.tools.memoryleak; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | public class MemoryLeak { 7 | static List list = new ArrayList(); 8 | 9 | public void oomTests() { 10 | Object obj = new Object(); 11 | list.add(obj); 12 | } 13 | 14 | } -------------------------------------------------------------------------------- /src/main/java/designpattern/factory/absfactory/pizzastore/order/AbsFactory.java: -------------------------------------------------------------------------------- 1 | package designpattern.factory.absfactory.pizzastore.order; 2 | 3 | 4 | import designpattern.factory.absfactory.pizzastore.pizza.Pizza; 5 | 6 | // 抽象工厂接口 7 | public interface AbsFactory { 8 | // 让子类具体实现 9 | public Pizza createPizza(String orderType); 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/designpattern/factory/simplefactory/pizzastore/pizza/GreekPizza.java: -------------------------------------------------------------------------------- 1 | package designpattern.factory.simplefactory.pizzastore.pizza; 2 | 3 | public class GreekPizza extends Pizza { 4 | 5 | @Override 6 | public void prepare() { 7 | // TODO Auto-generated method stub 8 | System.out.println(" 希腊披萨制作"); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/designpattern/factory/simplefactory/pizzastore/pizza/PepperPizza.java: -------------------------------------------------------------------------------- 1 | package designpattern.factory.simplefactory.pizzastore.pizza; 2 | 3 | public class PepperPizza extends Pizza { 4 | 5 | @Override 6 | public void prepare() { 7 | // TODO Auto-generated method stub 8 | System.out.println("胡椒 披萨制作 "); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/designpattern/memento/theory/Memento.java: -------------------------------------------------------------------------------- 1 | package designpattern.memento.theory; 2 | 3 | public class Memento { 4 | private String state; 5 | 6 | public Memento(String state) { 7 | super(); 8 | this.state = state; 9 | } 10 | 11 | public String getState() { 12 | return state; 13 | } 14 | 15 | 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/designpattern/factory/simplefactory/pizzastore/pizza/CheesePizza.java: -------------------------------------------------------------------------------- 1 | package designpattern.factory.simplefactory.pizzastore.pizza; 2 | 3 | public class CheesePizza extends Pizza { 4 | 5 | @Override 6 | public void prepare() { 7 | // TODO Auto-generated method stub 8 | System.out.println(" 奶酪披萨制作。。"); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/designpattern/iterator/College.java: -------------------------------------------------------------------------------- 1 | package designpattern.iterator; 2 | 3 | import java.util.Iterator; 4 | 5 | public interface College { 6 | 7 | public String getName(); 8 | 9 | // add 系的方法 10 | public void addDepartment(String name, String desc); 11 | 12 | // 返回一个迭代器,遍历 13 | public Iterator createIterator(); 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/designpattern/factory/absfactory/pizzastore/pizza/BJPepperPizza.java: -------------------------------------------------------------------------------- 1 | package designpattern.factory.absfactory.pizzastore.pizza; 2 | 3 | public class BJPepperPizza extends Pizza { 4 | @Override 5 | public void prepare() { 6 | // TODO Auto-generated method stub 7 | setName("北京胡椒披萨"); 8 | System.out.println(" 北京胡椒披萨。。"); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/designpattern/factory/absfactory/pizzastore/pizza/LDPepperPizza.java: -------------------------------------------------------------------------------- 1 | package designpattern.factory.absfactory.pizzastore.pizza; 2 | 3 | public class LDPepperPizza extends Pizza { 4 | @Override 5 | public void prepare() { 6 | // TODO Auto-generated method stub 7 | setName("伦敦胡椒披萨"); 8 | System.out.println("伦敦胡椒披萨。。。"); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/designpattern/factory/absfactory/pizzastore/pizza/LDCheesePizza.java: -------------------------------------------------------------------------------- 1 | package designpattern.factory.absfactory.pizzastore.pizza; 2 | 3 | public class LDCheesePizza extends Pizza { 4 | 5 | @Override 6 | public void prepare() { 7 | // TODO Auto-generated method stub 8 | setName("伦敦奶酪披萨"); 9 | System.out.println("伦敦奶酪披萨。。。"); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/designpattern/factory/factorymethod/pizzastore/pizza/BJPepperPizza.java: -------------------------------------------------------------------------------- 1 | package designpattern.factory.factorymethod.pizzastore.pizza; 2 | 3 | public class BJPepperPizza extends Pizza { 4 | @Override 5 | public void prepare() { 6 | // TODO Auto-generated method stub 7 | setName("北京胡椒披萨"); 8 | System.out.println(" 北京胡椒披萨。。"); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/designpattern/factory/factorymethod/pizzastore/pizza/LDPepperPizza.java: -------------------------------------------------------------------------------- 1 | package designpattern.factory.factorymethod.pizzastore.pizza; 2 | 3 | public class LDPepperPizza extends Pizza{ 4 | @Override 5 | public void prepare() { 6 | // TODO Auto-generated method stub 7 | setName("伦敦胡椒披萨"); 8 | System.out.println("伦敦胡椒披萨。。。"); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/designpattern/factory/absfactory/pizzastore/order/PizzaStore.java: -------------------------------------------------------------------------------- 1 | package designpattern.factory.absfactory.pizzastore.order; 2 | 3 | public class PizzaStore { 4 | 5 | public static void main(String[] args) { 6 | // TODO Auto-generated method stub 7 | //new OrderPizza(new BJFactory()); 8 | new OrderPizza(new LDFactory()); 9 | } 10 | 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/designpattern/factory/factorymethod/pizzastore/pizza/LDCheesePizza.java: -------------------------------------------------------------------------------- 1 | package designpattern.factory.factorymethod.pizzastore.pizza; 2 | 3 | public class LDCheesePizza extends Pizza{ 4 | 5 | @Override 6 | public void prepare() { 7 | // TODO Auto-generated method stub 8 | setName("伦敦奶酪披萨"); 9 | System.out.println("伦敦奶酪披萨。。。"); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/designpattern/adapter/classadapter/Client.java: -------------------------------------------------------------------------------- 1 | package designpattern.adapter.classadapter; 2 | 3 | public class Client { 4 | 5 | public static void main(String[] args) { 6 | // TODO Auto-generated method stub 7 | System.out.println(" === 类适配器模式 ===="); 8 | Phone phone = new Phone(); 9 | phone.charging(new VoltageAdapter()); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/designpattern/factory/absfactory/pizzastore/pizza/BJCheesePizza.java: -------------------------------------------------------------------------------- 1 | package designpattern.factory.absfactory.pizzastore.pizza; 2 | 3 | public class BJCheesePizza extends Pizza { 4 | 5 | @Override 6 | public void prepare() { 7 | // TODO Auto-generated method stub 8 | setName("北京奶酪披萨"); 9 | System.out.println(" 北京奶酪披萨。。"); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/designpattern/factory/factorymethod/pizzastore/pizza/BJCheesePizza.java: -------------------------------------------------------------------------------- 1 | package designpattern.factory.factorymethod.pizzastore.pizza; 2 | 3 | public class BJCheesePizza extends Pizza { 4 | 5 | @Override 6 | public void prepare() { 7 | // TODO Auto-generated method stub 8 | setName("北京奶酪披萨"); 9 | System.out.println(" 北京奶酪披萨。。"); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/designpattern/template/appilication/templateTest.java: -------------------------------------------------------------------------------- 1 | package designpattern.template.appilication; 2 | 3 | /** 4 | * @author hsfxuebao 5 | * Created on 2021-08-04 6 | */ 7 | public class templateTest { 8 | 9 | public static void main(String[] args) { 10 | 11 | // 1. ConfigurableApplicationContext 12 | 13 | // JdbcTemplate 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/designpattern/singleton/application/SingletonJdk.java: -------------------------------------------------------------------------------- 1 | package designpattern.singleton.application; 2 | 3 | /** 4 | * @author hsfxuebao 5 | * Created on 2021-07-28 6 | * 7 | * 单例模式的应用 Runtime 8 | */ 9 | public class SingletonJdk { 10 | 11 | public static void main(String[] args) { 12 | 13 | // 饿汉式 14 | Runtime.getRuntime(); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/designpattern/state/State.java: -------------------------------------------------------------------------------- 1 | package designpattern.state; 2 | 3 | /** 4 | * 状态抽象类 5 | * 6 | */ 7 | public abstract class State { 8 | 9 | 10 | // 扣除积分 -50 11 | public abstract void deductMoney(); 12 | 13 | // 是否抽中奖品 14 | public abstract boolean raffle(); 15 | 16 | // 发放奖品 17 | public abstract void dispensePrize(); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/algorithm/common/DoubleLinkedNode.java: -------------------------------------------------------------------------------- 1 | package algorithm.common; 2 | 3 | /** 4 | * 双端链表结构 5 | * 6 | * @author hsfxuebao 7 | * @date 2020/03/15 8 | */ 9 | public class DoubleLinkedNode { 10 | 11 | public int value; 12 | public DoubleLinkedNode last; 13 | public DoubleLinkedNode next; 14 | 15 | public DoubleLinkedNode(int value) { 16 | this.value = value; 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/designpattern/adapter/objectadapter/Client.java: -------------------------------------------------------------------------------- 1 | package designpattern.adapter.objectadapter; 2 | 3 | public class Client { 4 | 5 | public static void main(String[] args) { 6 | // TODO Auto-generated method stub 7 | System.out.println(" === 对象适配器ʽ ===="); 8 | Phone phone = new Phone(); 9 | phone.charging(new VoltageAdapter(new Voltage220V())); 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/concurrent/base/singleton/Singleton1.java: -------------------------------------------------------------------------------- 1 | package concurrent.base.singleton; 2 | 3 | /** 4 | * 描述: 饿汉式(静态常量)(可用) 5 | */ 6 | public class Singleton1 { 7 | 8 | private final static Singleton1 INSTANCE = new Singleton1(); 9 | 10 | private Singleton1() { 11 | 12 | } 13 | 14 | public static Singleton1 getInstance() { 15 | return INSTANCE; 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/designpattern/adapter/classadapter/Phone.java: -------------------------------------------------------------------------------- 1 | package designpattern.adapter.classadapter; 2 | 3 | public class Phone { 4 | 5 | //��� 6 | public void charging(IVoltage5V iVoltage5V) { 7 | if(iVoltage5V.output5V() == 5) { 8 | System.out.println("电压5V 可以充电"); 9 | } else if (iVoltage5V.output5V() > 5) { 10 | System.out.println("电压大于5V 不可以充电~~"); 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/algorithm/common/RandomListNode.java: -------------------------------------------------------------------------------- 1 | package algorithm.common; 2 | 3 | /** 4 | * 链表结构,包含一个随机指向下一个节点的指针 5 | * @author hsfxuebao 6 | * @date 2020/03/13 7 | */ 8 | public class RandomListNode { 9 | 10 | public int value; 11 | public RandomListNode next; 12 | public RandomListNode random; 13 | 14 | public RandomListNode(int value) { 15 | this.value = value; 16 | } 17 | } -------------------------------------------------------------------------------- /src/main/java/designpattern/adapter/objectadapter/Phone.java: -------------------------------------------------------------------------------- 1 | package designpattern.adapter.objectadapter; 2 | 3 | public class Phone { 4 | 5 | //��� 6 | public void charging(IVoltage5V iVoltage5V) { 7 | if(iVoltage5V.output5V() == 5) { 8 | System.out.println("d电压是5v 可以充电~~"); 9 | } else if (iVoltage5V.output5V() > 5) { 10 | System.out.println("电压大于5v 不可以充电~~"); 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/designpattern/mediator/smarthouse/Mediator.java: -------------------------------------------------------------------------------- 1 | package designpattern.mediator.smarthouse; 2 | 3 | public abstract class Mediator { 4 | // 将给中介者对象 加入到集合中 5 | public abstract void Register(String colleagueName, Colleague colleague); 6 | 7 | // 接收消息, 具体同事对象发出 8 | public abstract void GetMessage(int stateChange, String colleagueName); 9 | 10 | public abstract void SendMessage(); 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/designpattern/uml/aggregation/Computer.java: -------------------------------------------------------------------------------- 1 | package designpattern.uml.aggregation; 2 | 3 | public class Computer { 4 | private Mouse mouse; //�����Ժ�computer���� 5 | private Moniter moniter;//��ʾ�����Ժ�Computer���� 6 | public void setMouse(Mouse mouse) { 7 | this.mouse = mouse; 8 | } 9 | public void setMoniter(Moniter moniter) { 10 | this.moniter = moniter; 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/concurrent/juctools/aqs/AQSDemo.java: -------------------------------------------------------------------------------- 1 | package concurrent.juctools.aqs; 2 | 3 | import java.util.concurrent.CountDownLatch; 4 | import java.util.concurrent.Semaphore; 5 | import java.util.concurrent.locks.ReentrantLock; 6 | import sun.java2d.pipe.RenderingEngine; 7 | 8 | /** 9 | * 描述: TODO 10 | */ 11 | public class AQSDemo { 12 | 13 | public static void main(String[] args) { 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/designpattern/builder/AbstractHouse.java: -------------------------------------------------------------------------------- 1 | package designpattern.builder; 2 | 3 | public abstract class AbstractHouse { 4 | 5 | //打地基 6 | public abstract void buildBasic(); 7 | //砌墙 8 | public abstract void buildWalls(); 9 | //封顶 10 | public abstract void roofed(); 11 | 12 | public void build() { 13 | buildBasic(); 14 | buildWalls(); 15 | roofed(); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/designpattern/flyweight/User.java: -------------------------------------------------------------------------------- 1 | package designpattern.flyweight; 2 | 3 | public class User { 4 | 5 | private String name; 6 | 7 | 8 | public User(String name) { 9 | super(); 10 | this.name = name; 11 | } 12 | 13 | public String getName() { 14 | return name; 15 | } 16 | 17 | public void setName(String name) { 18 | this.name = name; 19 | } 20 | 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/designpattern/builder/application/BuilderJdk.java: -------------------------------------------------------------------------------- 1 | package designpattern.builder.application; 2 | 3 | /** 4 | * @author hsfxuebao 5 | * Created on 2021-07-31 6 | */ 7 | public class BuilderJdk { 8 | 9 | 10 | public static void main(String[] args) { 11 | StringBuilder stringBuilder = new StringBuilder("hello,world"); 12 | System.out.println(stringBuilder); 13 | 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/designpattern/template/improve/PureSoyaMilk.java: -------------------------------------------------------------------------------- 1 | package designpattern.template.improve; 2 | 3 | public class PureSoyaMilk extends SoyaMilk{ 4 | 5 | @Override 6 | void addCondiments() { 7 | // TODO Auto-generated method stub 8 | // 9 | } 10 | 11 | @Override 12 | boolean customerWantCondiments() { 13 | // TODO Auto-generated method stub 14 | return false; 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/designpattern/adapter/classadapter/VoltageAdapter.java: -------------------------------------------------------------------------------- 1 | package designpattern.adapter.classadapter; 2 | 3 | //适配器类 4 | public class VoltageAdapter extends Voltage220V implements IVoltage5V { 5 | 6 | @Override 7 | public int output5V() { 8 | // TODO Auto-generated method stub 9 | // 10 | int srcV = output220V(); 11 | int dstV = srcV / 44 ; //ת�� 5v 12 | return dstV; 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/designpattern/visitor/Woman.java: -------------------------------------------------------------------------------- 1 | package designpattern.visitor; 2 | 3 | // 说明 4 | //1. 使用了双分派,首先在客户端程序中,将具体状态传给Woman(第一次双分) 5 | //2. 然后Woman调用作为参数的"具体方法"中getWomanResult()方法,同时 6 | // 将自己this作为参数传入,完成第二次分派 7 | public class Woman extends Person{ 8 | 9 | @Override 10 | public void accept(Action action) { 11 | // TODO Auto-generated method stub 12 | action.getWomanResult(this); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/algorithm/tu/Node.java: -------------------------------------------------------------------------------- 1 | package algorithm.tu; 2 | 3 | import java.util.ArrayList; 4 | 5 | public class Node { 6 | public int value; 7 | public int in; 8 | public int out; 9 | public ArrayList nexts; 10 | public ArrayList edges; 11 | 12 | public Node(int value) { 13 | this.value = value; 14 | in = 0; 15 | out = 0; 16 | nexts = new ArrayList<>(); 17 | edges = new ArrayList<>(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/concurrent/base/threadcoreknowledge/createthreads/wrongways/Lambda.java: -------------------------------------------------------------------------------- 1 | package concurrent.base.threadcoreknowledge.createthreads.wrongways; 2 | 3 | /** 4 | * 描述: lambda表达式创建线程 5 | */ 6 | public class Lambda { 7 | 8 | public static void main(String[] args) { 9 | new Thread(() -> System.out.println(Thread.currentThread().getName())).start(); 10 | } 11 | } 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/main/java/concurrent/base/threadcoreknowledge/startthread/CantStartTwice.java: -------------------------------------------------------------------------------- 1 | package concurrent.base.threadcoreknowledge.startthread; 2 | 3 | /** 4 | * 描述: 演示不能两次调用start方法,否则会报错 5 | */ 6 | public class CantStartTwice { 7 | public static void main(String[] args) { 8 | Thread thread = new Thread(); 9 | thread.start(); 10 | thread.start(); 11 | } 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/designpattern/interpreter/Expression.java: -------------------------------------------------------------------------------- 1 | package designpattern.interpreter; 2 | 3 | import java.util.HashMap; 4 | 5 | /** 6 | * 抽象类表达式 通过HashMap 键值对 可以获取到变量的值 7 | * 8 | * 9 | */ 10 | public abstract class Expression { 11 | // a + b - c 12 | // 解释公式和数值, key 就是公式(表达式) 参数[a,b,c], value就是对应的具体值 13 | // HashMap {a=10, b=20} 14 | public abstract int interpreter(HashMap var); 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/designpattern/uml/dependence/PersonServiceBean.java: -------------------------------------------------------------------------------- 1 | package designpattern.uml.dependence; 2 | 3 | public class PersonServiceBean { 4 | private PersonDao personDao;// �� 5 | 6 | public void save(Person person) { 7 | } 8 | 9 | public IDCard getIDCard(Integer personid) { 10 | return null; 11 | } 12 | 13 | public void modify() { 14 | Department department = new Department(); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/algorithm/common/TreeLinkedNode.java: -------------------------------------------------------------------------------- 1 | package algorithm.common; 2 | 3 | /** 4 | * 树的结构,包含一个指向下一个节点的指针 5 | * 6 | * @author hsfxuebao 7 | * @date 2020/03/13 8 | */ 9 | public class TreeLinkedNode { 10 | public int value; 11 | public TreeLinkedNode left; 12 | public TreeLinkedNode right; 13 | public TreeLinkedNode next; 14 | 15 | public TreeLinkedNode(int val) { 16 | this.value = val; 17 | } 18 | } -------------------------------------------------------------------------------- /src/main/java/designpattern/adapter/interfaceadapter/AbsAdapter.java: -------------------------------------------------------------------------------- 1 | package designpattern.adapter.interfaceadapter; 2 | 3 | //在AbsAdapter 我们将 Interface4 的方法默认实现 4 | public abstract class AbsAdapter implements Interface4 { 5 | 6 | //默认实现 7 | public void m1() { 8 | 9 | } 10 | 11 | public void m2() { 12 | 13 | } 14 | 15 | public void m3() { 16 | 17 | } 18 | 19 | public void m4() { 20 | 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/concurrent/SynMark.java: -------------------------------------------------------------------------------- 1 | package concurrent; 2 | 3 | import org.openjdk.jol.info.ClassLayout; 4 | 5 | /** 6 | * @author hsfxuebao 7 | * @date 2020/04/22 8 | */ 9 | public class SynMark { 10 | 11 | static class A{ 12 | private int x = 666; 13 | } 14 | 15 | 16 | public static void main(String[] args) { 17 | A a = new A(); 18 | 19 | System.out.println(ClassLayout.parseInstance(a).toPrintable()); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/designpattern/factory/factorymethod/pizzastore/order/PizzaStore.java: -------------------------------------------------------------------------------- 1 | package designpattern.factory.factorymethod.pizzastore.order; 2 | 3 | public class PizzaStore { 4 | 5 | public static void main(String[] args) { 6 | String loc = "bj"; 7 | if (loc.equals("bj")) { 8 | 9 | new BJOrderPizza(); 10 | } else { 11 | new LDOrderPizza(); 12 | } 13 | // TODO Auto-generated method stub 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/designpattern/strategy/improve/ToyDuck.java: -------------------------------------------------------------------------------- 1 | package designpattern.strategy.improve; 2 | 3 | public class ToyDuck extends Duck{ 4 | 5 | 6 | public ToyDuck() { 7 | // TODO Auto-generated constructor stub 8 | flyBehavior = new NoFlyBehavior(); 9 | } 10 | 11 | @Override 12 | public void display() { 13 | // TODO Auto-generated method stub 14 | System.out.println("玩具鸭子"); 15 | } 16 | 17 | 18 | 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/designpattern/uml/composition/Computer.java: -------------------------------------------------------------------------------- 1 | package designpattern.uml.composition; 2 | 3 | public class Computer { 4 | private Mouse mouse = new Mouse(); //�����Ժ�computer���ܷ��� 5 | private Moniter moniter = new Moniter();//��ʾ�����Ժ�Computer���ܷ��� 6 | public void setMouse(Mouse mouse) { 7 | this.mouse = mouse; 8 | } 9 | public void setMoniter(Moniter moniter) { 10 | this.moniter = moniter; 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/concurrent/base/singleton/Singleton2.java: -------------------------------------------------------------------------------- 1 | package concurrent.base.singleton; 2 | 3 | /** 4 | * 描述: 饿汉式(静态代码块)(可用) 5 | */ 6 | public class Singleton2 { 7 | 8 | private final static Singleton2 INSTANCE; 9 | 10 | static { 11 | INSTANCE = new Singleton2(); 12 | } 13 | 14 | private Singleton2() { 15 | } 16 | 17 | public static Singleton2 getInstance() { 18 | return INSTANCE; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/concurrent/juctools/collections/predecessor/VectorDemo.java: -------------------------------------------------------------------------------- 1 | package concurrent.juctools.collections.predecessor; 2 | 3 | import java.util.Vector; 4 | 5 | /** 6 | * 描述: 演示Vector,主要是看Vector源码 7 | */ 8 | public class VectorDemo { 9 | 10 | public static void main(String[] args) { 11 | Vector vector = new Vector<>(); 12 | vector.add("test"); 13 | System.out.println(vector.get(0)); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/designpattern/visitor/Fail.java: -------------------------------------------------------------------------------- 1 | package designpattern.visitor; 2 | 3 | public class Fail extends Action { 4 | 5 | @Override 6 | public void getManResult(Man man) { 7 | // TODO Auto-generated method stub 8 | System.out.println(" 男人给的评价是失败 !"); 9 | } 10 | 11 | @Override 12 | public void getWomanResult(Woman woman) { 13 | // TODO Auto-generated method stub 14 | System.out.println(" 女人给的评价是失败!"); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/concurrent/juctools/imooccache/computable/ExpensiveFunction.java: -------------------------------------------------------------------------------- 1 | package concurrent.juctools.imooccache.computable; 2 | 3 | /** 4 | * 描述: 耗时计算的实现类,实现了Computable接口,但是本身不具备缓存能力,不需要考虑缓存的事情 5 | */ 6 | public class ExpensiveFunction implements Computable{ 7 | 8 | @Override 9 | public Integer compute(String arg) throws Exception { 10 | Thread.sleep(5000); 11 | return Integer.valueOf(arg); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/designpattern/strategy/PekingDuck.java: -------------------------------------------------------------------------------- 1 | package designpattern.strategy; 2 | 3 | public class PekingDuck extends Duck { 4 | 5 | @Override 6 | public void display() { 7 | // TODO Auto-generated method stub 8 | System.out.println("~~北京鸭子~~~"); 9 | } 10 | 11 | //因为北京鸭子不能发现,所有需要重写 fly 12 | @Override 13 | public void fly() { 14 | // TODO Auto-generated method stub 15 | System.out.println("北京鸭子不能飞翔"); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/designpattern/visitor/Wait.java: -------------------------------------------------------------------------------- 1 | package designpattern.visitor; 2 | 3 | public class Wait extends Action { 4 | 5 | @Override 6 | public void getManResult(Man man) { 7 | // TODO Auto-generated method stub 8 | System.out.println(" 男人给的评价,待评价.."); 9 | } 10 | 11 | @Override 12 | public void getWomanResult(Woman woman) { 13 | // TODO Auto-generated method stub 14 | System.out.println(" 女人给的评价是待评价 .."); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/ionio/bio/accept/BioClient01.java: -------------------------------------------------------------------------------- 1 | package ionio.bio.accept; 2 | 3 | import java.io.IOException; 4 | import java.net.Socket; 5 | 6 | /** 7 | * @author hsfxuebao 8 | * Created on 2021-12-28 9 | */ 10 | public class BioClient01 { 11 | 12 | public static void main(String[] args) throws IOException { 13 | System.out.println("------RedisClient01 start"); 14 | Socket socket = new Socket("127.0.0.1", 6380); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/ionio/bio/accept/BioClient02.java: -------------------------------------------------------------------------------- 1 | package ionio.bio.accept; 2 | 3 | import java.io.IOException; 4 | import java.net.Socket; 5 | 6 | /** 7 | * @author hsfxuebao 8 | * Created on 2021-12-28 9 | */ 10 | public class BioClient02 { 11 | 12 | public static void main(String[] args) throws IOException { 13 | System.out.println("------RedisClient01 start"); 14 | Socket socket = new Socket("127.0.0.1", 6380); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/concurrent/base/singleton/Singleton3.java: -------------------------------------------------------------------------------- 1 | package concurrent.base.singleton; 2 | 3 | /** 4 | * 描述: 懒汉式(线程不安全) 5 | */ 6 | public class Singleton3 { 7 | 8 | private static Singleton3 instance; 9 | 10 | private Singleton3() { 11 | 12 | } 13 | 14 | public static Singleton3 getInstance() { 15 | if (instance == null) { 16 | instance = new Singleton3(); 17 | } 18 | return instance; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/concurrent/juctools/cas/SimulatedCAS.java: -------------------------------------------------------------------------------- 1 | package concurrent.juctools.cas; 2 | 3 | /** 4 | * 描述: 模拟CAS操作,等价代码 5 | */ 6 | public class SimulatedCAS { 7 | private volatile int value; 8 | 9 | public synchronized int compareAndSwap(int expectedValue, int newValue) { 10 | int oldValue = value; 11 | if (oldValue == expectedValue) { 12 | value = newValue; 13 | } 14 | return oldValue; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/designpattern/command/NoCommand.java: -------------------------------------------------------------------------------- 1 | package designpattern.command; 2 | 3 | /** 4 | * 没有任何命令,即空执行 用于初始化每个按钮,当调用空命令时什么也不做 5 | * 其实,这也是一种设计模式,可以省掉对空的判断 6 | */ 7 | public class NoCommand implements Command { 8 | 9 | @Override 10 | public void execute() { 11 | // TODO Auto-generated method stub 12 | 13 | } 14 | 15 | @Override 16 | public void undo() { 17 | // TODO Auto-generated method stub 18 | 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/designpattern/facade/Client.java: -------------------------------------------------------------------------------- 1 | package designpattern.facade; 2 | 3 | /** 4 | * 外观模式 5 | */ 6 | public class Client { 7 | 8 | public static void main(String[] args) { 9 | // TODO Auto-generated method stub 10 | // 直接使用外观模式 11 | HomeTheaterFacade homeTheaterFacade = new HomeTheaterFacade(); 12 | homeTheaterFacade.ready(); 13 | homeTheaterFacade.play(); 14 | 15 | 16 | homeTheaterFacade.end(); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/designpattern/facade/Screen.java: -------------------------------------------------------------------------------- 1 | package designpattern.facade; 2 | 3 | public class Screen { 4 | 5 | private static Screen instance = new Screen(); 6 | 7 | public static Screen getInstance() { 8 | return instance; 9 | } 10 | 11 | 12 | 13 | 14 | public void up() { 15 | System.out.println(" Screen up "); 16 | } 17 | 18 | public void down() { 19 | System.out.println(" Screen down "); 20 | } 21 | 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/designpattern/visitor/Success.java: -------------------------------------------------------------------------------- 1 | package designpattern.visitor; 2 | 3 | public class Success extends Action { 4 | 5 | @Override 6 | public void getManResult(Man man) { 7 | // TODO Auto-generated method stub 8 | System.out.println(" 男人给的评价是成功 !"); 9 | } 10 | 11 | @Override 12 | public void getWomanResult(Woman woman) { 13 | // TODO Auto-generated method stub 14 | System.out.println(" 女人给的评价是成功 !"); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/designpattern/proxy/dynamic/TeacherDao.java: -------------------------------------------------------------------------------- 1 | package designpattern.proxy.dynamic; 2 | 3 | public class TeacherDao implements ITeacherDao { 4 | 5 | @Override 6 | public void teach() { 7 | // TODO Auto-generated method stub 8 | System.out.println(" 老师授课中.... "); 9 | } 10 | 11 | @Override 12 | public void sayHello(String name) { 13 | // TODO Auto-generated method stub 14 | System.out.println("hello " + name); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/concurrent/base/singleton/Singleton7.java: -------------------------------------------------------------------------------- 1 | package concurrent.base.singleton; 2 | 3 | /** 4 | * 描述: 静态内部类方式,可用 5 | */ 6 | public class Singleton7 { 7 | 8 | private Singleton7() { 9 | } 10 | 11 | private static class SingletonInstance { 12 | 13 | private static final Singleton7 INSTANCE = new Singleton7(); 14 | } 15 | 16 | public static Singleton7 getInstance() { 17 | return SingletonInstance.INSTANCE; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/concurrent/base/threadcoreknowledge/threadobjectclasscommonmethods/ThreadSetName.java: -------------------------------------------------------------------------------- 1 | package concurrent.base.threadcoreknowledge.threadobjectclasscommonmethods; 2 | 3 | /** 4 | * 描述: 修改线程名字 5 | */ 6 | public class ThreadSetName { 7 | 8 | public static void main(String[] args) { 9 | Thread thread = new Thread(); 10 | thread.start(); 11 | thread.setName("11"); 12 | System.out.println(thread.getName()); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/designpattern/strategy/Duck.java: -------------------------------------------------------------------------------- 1 | package designpattern.strategy; 2 | 3 | public abstract class Duck { 4 | 5 | public Duck() { 6 | 7 | } 8 | 9 | public abstract void display();// 限时鸭子信息 10 | 11 | public void quack() { 12 | System.out.println("鸭子嘎嘎叫~~"); 13 | } 14 | 15 | public void swim() { 16 | System.out.println("鸭子会游泳~~"); 17 | } 18 | 19 | public void fly() { 20 | System.out.println("鸭子会飞翔~~~"); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/designpattern/strategy/improve/WildDuck.java: -------------------------------------------------------------------------------- 1 | package designpattern.strategy.improve; 2 | 3 | public class WildDuck extends Duck { 4 | 5 | 6 | // 构造器 传入flyBehavior 7 | public WildDuck() { 8 | // TODO Auto-generated constructor stub 9 | flyBehavior = new GoodFlyBehavior(); 10 | } 11 | 12 | 13 | @Override 14 | public void display() { 15 | // TODO Auto-generated method stub 16 | System.out.println(" 野鸭子 "); 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/concurrent/base/singleton/Singleton4.java: -------------------------------------------------------------------------------- 1 | package concurrent.base.singleton; 2 | 3 | /** 4 | * 描述: 懒汉式(线程安全)(不推荐) 5 | */ 6 | public class Singleton4 { 7 | 8 | private static Singleton4 instance; 9 | 10 | private Singleton4() { 11 | 12 | } 13 | 14 | public synchronized static Singleton4 getInstance() { 15 | if (instance == null) { 16 | instance = new Singleton4(); 17 | } 18 | return instance; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/concurrent/base/threadcoreknowledge/createthreads/ThreadStyle.java: -------------------------------------------------------------------------------- 1 | package concurrent.base.threadcoreknowledge.createthreads; 2 | 3 | /** 4 | * 描述: 用Thread方式实现线程 5 | */ 6 | public class ThreadStyle extends Thread{ 7 | 8 | @Override 9 | public void run() { 10 | System.out.println("用Thread类实现线程"); 11 | } 12 | 13 | public static void main(String[] args) { 14 | new ThreadStyle().start(); 15 | } 16 | } 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /src/main/java/designpattern/bridge/Phone.java: -------------------------------------------------------------------------------- 1 | package designpattern.bridge; 2 | 3 | public abstract class Phone { 4 | 5 | //品牌 组合 6 | private Brand brand; 7 | 8 | //构造器 9 | public Phone(Brand brand) { 10 | super(); 11 | this.brand = brand; 12 | } 13 | 14 | protected void open() { 15 | this.brand.open(); 16 | } 17 | protected void close() { 18 | brand.close(); 19 | } 20 | protected void call() { 21 | brand.call(); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/designpattern/builder/improve/HouseBuilder.java: -------------------------------------------------------------------------------- 1 | package designpattern.builder.improve; 2 | 3 | 4 | // 抽象的建造者 5 | public abstract class HouseBuilder { 6 | 7 | protected House house = new House(); 8 | 9 | // 将建造的方法写好,抽象的方法 10 | public abstract void buildBasic(); 11 | public abstract void buildWalls(); 12 | public abstract void roofed(); 13 | 14 | // 建造房子,将产品返回(房子) 15 | public House buildHouse() { 16 | return house; 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/concurrent/juctools/collections/predecessor/HashtableDemo.java: -------------------------------------------------------------------------------- 1 | package concurrent.juctools.collections.predecessor; 2 | 3 | import java.util.Hashtable; 4 | 5 | /** 6 | * 描述: TODO 7 | */ 8 | public class HashtableDemo { 9 | public static void main(String[] args) { 10 | Hashtable hashtable = new Hashtable<>(); 11 | hashtable.put("学完以后跳槽涨薪幅度", "80%"); 12 | System.out.println(hashtable.get("学完以后跳槽涨薪幅度")); 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/designpattern/interpreter/SubExpression.java: -------------------------------------------------------------------------------- 1 | package designpattern.interpreter; 2 | 3 | import java.util.HashMap; 4 | 5 | public class SubExpression extends SymbolExpression { 6 | 7 | public SubExpression(Expression left, Expression right) { 8 | super(left, right); 9 | } 10 | 11 | // 求出left 和 right 表达式想减后的结果 12 | public int interpreter(HashMap var) { 13 | return super.left.interpreter(var) - super.right.interpreter(var); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/designpattern/iterator/eml.puml: -------------------------------------------------------------------------------- 1 | @startuml 2 | 3 | abstract class AbstractList 4 | abstract AbstractCollection 5 | interface List 6 | interface Collection 7 | 8 | List <|-- AbstractList 9 | Collection <|-- AbstractCollection 10 | 11 | Collection <|- List 12 | AbstractCollection <|- AbstractList 13 | AbstractList <|-- ArrayList 14 | 15 | class ArrayList { 16 | Object[] elementData 17 | size() 18 | } 19 | 20 | enum TimeUnit { 21 | DAYS 22 | HOURS 23 | MINUTES 24 | } 25 | 26 | @enduml -------------------------------------------------------------------------------- /src/main/java/concurrent/base/threadcoreknowledge/threadobjectclasscommonmethods/Id.java: -------------------------------------------------------------------------------- 1 | package concurrent.base.threadcoreknowledge.threadobjectclasscommonmethods; 2 | 3 | /** 4 | * 描述: ID从1开始,JVM运行起来后,我们自己创建的线程的ID早已不是2. 5 | */ 6 | public class Id { 7 | 8 | public static void main(String[] args) { 9 | Thread thread = new Thread(); 10 | System.out.println("主线程的ID"+Thread.currentThread().getId()); 11 | System.out.println("子线程的ID"+thread.getId()); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/designpattern/adapter/interfaceadapter/Client.java: -------------------------------------------------------------------------------- 1 | package designpattern.adapter.interfaceadapter; 2 | 3 | public class Client { 4 | public static void main(String[] args) { 5 | 6 | AbsAdapter absAdapter = new AbsAdapter() { 7 | //ֻ��Ҫȥ�������� ��Ҫʹ�� �ӿڷ��� 8 | @Override 9 | public void m1() { 10 | // TODO Auto-generated method stub 11 | 12 | System.out.println("使用m1的方法"); 13 | } 14 | }; 15 | 16 | absAdapter.m1(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/concurrent/juctools/immutable/FinalStringDemo1.java: -------------------------------------------------------------------------------- 1 | package concurrent.juctools.immutable; 2 | 3 | /** 4 | * 描述: TODO 5 | */ 6 | public class FinalStringDemo1 { 7 | 8 | public static void main(String[] args) { 9 | String a = "wukong2"; 10 | final String b = "wukong"; 11 | String d = "wukong"; 12 | String c = b + 2; 13 | String e = d + 2; 14 | System.out.println((a == c)); 15 | System.out.println((a == e)); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/concurrent/juctools/immutable/FinalStringDemo2.java: -------------------------------------------------------------------------------- 1 | package concurrent.juctools.immutable; 2 | 3 | /** 4 | * 描述: TODO 5 | */ 6 | public class FinalStringDemo2 { 7 | 8 | public static void main(String[] args) { 9 | String a = "wukong2"; 10 | final String b = getDashixiong(); 11 | String c = b + 2; 12 | System.out.println(a == c); 13 | 14 | } 15 | 16 | private static String getDashixiong() { 17 | return "wukong"; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/designpattern/strategy/improve/PekingDuck.java: -------------------------------------------------------------------------------- 1 | package designpattern.strategy.improve; 2 | 3 | public class PekingDuck extends Duck { 4 | 5 | 6 | // 假如北京鸭子可以飞翔 但是飞翔技术一般 7 | public PekingDuck() { 8 | // TODO Auto-generated constructor stub 9 | flyBehavior = new BadFlyBehavior(); 10 | 11 | } 12 | 13 | @Override 14 | public void display() { 15 | // TODO Auto-generated method stub 16 | System.out.println("~~北京鸭子~~~"); 17 | } 18 | 19 | 20 | 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/redis6/distributelock/redlock/config/RedisPoolProperties.java: -------------------------------------------------------------------------------- 1 | package redis6.distributelock.redlock.config; 2 | 3 | import lombok.Data; 4 | 5 | @Data 6 | public class RedisPoolProperties { 7 | 8 | private int maxIdle; 9 | 10 | private int minIdle; 11 | 12 | private int maxActive; 13 | 14 | private int maxWait; 15 | 16 | private int connTimeout; 17 | 18 | private int soTimeout; 19 | 20 | /** 21 | * 池大小 22 | */ 23 | private int size; 24 | 25 | } -------------------------------------------------------------------------------- /src/main/java/designpattern/factory/simplefactory/pizzastore/order/PizzaStore.java: -------------------------------------------------------------------------------- 1 | package designpattern.factory.simplefactory.pizzastore.order; 2 | 3 | //�൱��һ���ͻ��ˣ��������� 4 | public class PizzaStore { 5 | 6 | public static void main(String[] args) { 7 | // TODO Auto-generated method stub 8 | //new OrderPizza(); 9 | 10 | //ʹ�ü򵥹���ģʽ 11 | //new OrderPizza(new SimpleFactory()); 12 | //System.out.println("~~�˳�����~~"); 13 | 14 | new OrderPizza2(); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/javase/LocalDateUtils.java: -------------------------------------------------------------------------------- 1 | package javase; 2 | 3 | import java.time.LocalDate; 4 | import java.time.ZoneOffset; 5 | 6 | /** 7 | * @author hsfxuebao 8 | * Created on 2021-04-15 9 | */ 10 | public class LocalDateUtils { 11 | 12 | public static void main(String[] args) { 13 | 14 | long todayStartTime = LocalDate.now().atTime(0, 0, 0) 15 | .toInstant(ZoneOffset.of("+8")).toEpochMilli(); 16 | System.out.println(todayStartTime); 17 | 18 | } 19 | 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/concurrent/base/threadcoreknowledge/startthread/StartAndRunMethod.java: -------------------------------------------------------------------------------- 1 | package concurrent.base.threadcoreknowledge.startthread; 2 | 3 | /** 4 | * 描述: 对比start和run两种启动线程的方式 5 | */ 6 | public class StartAndRunMethod { 7 | 8 | public static void main(String[] args) { 9 | Runnable runnable = () -> { 10 | System.out.println(Thread.currentThread().getName()); 11 | 12 | }; 13 | runnable.run(); 14 | 15 | new Thread(runnable).start(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/designpattern/template/Client.java: -------------------------------------------------------------------------------- 1 | package designpattern.template; 2 | 3 | public class Client { 4 | 5 | public static void main(String[] args) { 6 | // TODO Auto-generated method stub 7 | //制作红豆豆浆 8 | 9 | System.out.println("制作红豆豆浆"); 10 | SoyaMilk redBeanSoyaMilk = new RedBeanSoyaMilk(); 11 | redBeanSoyaMilk.make(); 12 | 13 | System.out.println("制作花生豆浆"); 14 | SoyaMilk peanutSoyaMilk = new PeanutSoyaMilk(); 15 | peanutSoyaMilk.make(); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/jvm/command/jstack/TreadSleepTest.java: -------------------------------------------------------------------------------- 1 | package jvm.command.jstack; 2 | 3 | /** 4 | * 演示线程:TIMED_WAITING 5 | * 6 | */ 7 | public class TreadSleepTest { 8 | public static void main(String[] args) { 9 | System.out.println("hello - 1"); 10 | try { 11 | Thread.sleep(1000 * 60 * 10); 12 | } catch (InterruptedException e) { 13 | e.printStackTrace(); 14 | } 15 | 16 | System.out.println("hello - 2"); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/concurrent/base/threadcoreknowledge/createthreads/RunnableStyle.java: -------------------------------------------------------------------------------- 1 | package concurrent.base.threadcoreknowledge.createthreads; 2 | 3 | /** 4 | * 描述: 用Runnable方式创建线程 5 | */ 6 | public class RunnableStyle implements Runnable{ 7 | 8 | public static void main(String[] args) { 9 | Thread thread = new Thread(new RunnableStyle()); 10 | thread.start(); 11 | } 12 | 13 | @Override 14 | public void run() { 15 | System.out.println("用Runnable方法实现线程"); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/designpattern/memento/theory/Caretaker.java: -------------------------------------------------------------------------------- 1 | package designpattern.memento.theory; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | public class Caretaker { 7 | 8 | // List 中很多的备忘录对象 9 | private List mementoList = new ArrayList(); 10 | 11 | public void add(Memento memento) { 12 | mementoList.add(memento); 13 | } 14 | 15 | // 获取到第index 个 的备忘录对象 16 | public Memento get(int index) { 17 | return mementoList.get(index); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/designpattern/mediator/smarthouse/Colleague.java: -------------------------------------------------------------------------------- 1 | package designpattern.mediator.smarthouse; 2 | 3 | //ͬ 同事的抽象类 4 | public abstract class Colleague { 5 | private Mediator mediator; 6 | public String name; 7 | 8 | public Colleague(Mediator mediator, String name) { 9 | 10 | this.mediator = mediator; 11 | this.name = name; 12 | 13 | } 14 | 15 | public Mediator GetMediator() { 16 | return this.mediator; 17 | } 18 | 19 | public abstract void SendMessage(int stateChange); 20 | } 21 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | target/ 2 | !.mvn/wrapper/maven-wrapper.jar 3 | 4 | ### STS ### 5 | .apt_generated 6 | .classpath 7 | .factorypath 8 | .project 9 | .settings 10 | .springBeans 11 | 12 | 13 | 14 | ### IntelliJ IDEA ### 15 | .idea 16 | *.iws 17 | *.iml 18 | *.ipr 19 | *.pdf 20 | 21 | ### NetBeans ### 22 | nbproject/private/ 23 | build/ 24 | nbbuild/ 25 | dist/ 26 | nbdist/ 27 | .nb-gradle/ 28 | 29 | 30 | ##日志文件## 31 | *.log 32 | *DS_Store 33 | 34 | # 部署相关文件 35 | .dockerignore 36 | .kube/ 37 | .med/ 38 | *rebel.xml 39 | .puml 40 | -------------------------------------------------------------------------------- /src/main/java/jvm/gclog/LambdaGC.java: -------------------------------------------------------------------------------- 1 | package jvm.gclog; 2 | 3 | /** 4 | * @author hsfxuebao 5 | * Created on 2021-04-11 6 | */ 7 | public class LambdaGC { 8 | 9 | public static void main(String[] args) { 10 | for (; ; ) { 11 | I i = C::n; 12 | } 13 | 14 | } 15 | 16 | public static interface I { 17 | void m(); 18 | } 19 | 20 | public static class C { 21 | static void n() { 22 | System.out.println("hello"); 23 | } 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/concurrent/juctools/threadpool/EveryTaskOneThread.java: -------------------------------------------------------------------------------- 1 | package concurrent.juctools.threadpool; 2 | 3 | /** 4 | * 描述: TODO 5 | */ 6 | public class EveryTaskOneThread { 7 | 8 | public static void main(String[] args) { 9 | Thread thread = new Thread(new Task()); 10 | thread.start(); 11 | } 12 | 13 | static class Task implements Runnable { 14 | 15 | @Override 16 | public void run() { 17 | System.out.println("执行了任务"); 18 | } 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/designpattern/facade/Popcorn.java: -------------------------------------------------------------------------------- 1 | package designpattern.facade; 2 | 3 | public class Popcorn { 4 | 5 | private static Popcorn instance = new Popcorn(); 6 | 7 | public static Popcorn getInstance() { 8 | return instance; 9 | } 10 | 11 | public void on() { 12 | System.out.println(" popcorn on "); 13 | } 14 | 15 | public void off() { 16 | System.out.println(" popcorn ff "); 17 | } 18 | 19 | public void pop() { 20 | System.out.println(" popcorn is poping "); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/algorithm/array/L_面1601_交换数字.java: -------------------------------------------------------------------------------- 1 | package algorithm.array; 2 | 3 | /** 4 | * @author hsfxuebao 5 | * @date 2020/03/29 6 | * 编写一个函数,不用临时变量,直接交换numbers = [a, b]中a与b的值。 7 | * 8 | * 示例: 9 | * 10 | * 输入: numbers = [1,2] 11 | * 输出: [2,1] 12 | */ 13 | public class L_面1601_交换数字 { 14 | 15 | public int[] swapNumbers(int[] numbers) { 16 | numbers[0] = numbers[0] - numbers[1]; 17 | numbers[1] = numbers[1] + numbers[0]; 18 | numbers[0] = numbers[1] - numbers[0]; 19 | return numbers; 20 | 21 | } 22 | 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/designpattern/command/TVOnCommand.java: -------------------------------------------------------------------------------- 1 | package designpattern.command; 2 | 3 | public class TVOnCommand implements Command { 4 | 5 | // 组合 TVReceiver 6 | TVReceiver tv; 7 | 8 | public TVOnCommand(TVReceiver tv) { 9 | super(); 10 | this.tv = tv; 11 | } 12 | 13 | @Override 14 | public void execute() { 15 | // TODO Auto-generated method stub 16 | tv.on(); 17 | } 18 | 19 | @Override 20 | public void undo() { 21 | // TODO Auto-generated method stub 22 | tv.off(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/designpattern/facade/Stereo.java: -------------------------------------------------------------------------------- 1 | package designpattern.facade; 2 | 3 | public class Stereo { 4 | 5 | private static Stereo instance = new Stereo(); 6 | 7 | public static Stereo getInstance() { 8 | return instance; 9 | } 10 | 11 | public void on() { 12 | System.out.println(" Stereo on "); 13 | } 14 | 15 | public void off() { 16 | System.out.println(" Screen off "); 17 | } 18 | 19 | public void up() { 20 | System.out.println(" Screen up.. "); 21 | } 22 | 23 | //... 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/concurrent/juctools/threadpool/CachedThreadPool.java: -------------------------------------------------------------------------------- 1 | package concurrent.juctools.threadpool; 2 | 3 | import java.util.concurrent.ExecutorService; 4 | import java.util.concurrent.Executors; 5 | 6 | /** 7 | * 描述: TODO 8 | */ 9 | public class CachedThreadPool { 10 | 11 | public static void main(String[] args) { 12 | ExecutorService executorService = Executors.newCachedThreadPool(); 13 | for (int i = 0; i < 1000; i++) { 14 | executorService.execute(new Task()); 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/designpattern/proxy/staticproxy/Client.java: -------------------------------------------------------------------------------- 1 | package designpattern.proxy.staticproxy; 2 | 3 | public class Client { 4 | 5 | public static void main(String[] args) { 6 | // TODO Auto-generated method stub 7 | //创建目标对象 被代理的对象 8 | TeacherDao teacherDao = new TeacherDao(); 9 | 10 | //创建代理对象,同时将被代理对象传进去 11 | TeacherDaoProxy teacherDaoProxy = new TeacherDaoProxy(teacherDao); 12 | 13 | //ͨ 通过代理对象,调用被代理对象的方法 14 | // 即 执行的是代理对象的方法,代理对象再去调用目标对象的方法 15 | teacherDaoProxy.teach(); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/concurrent/base/singleton/Singleton5.java: -------------------------------------------------------------------------------- 1 | package concurrent.base.singleton; 2 | 3 | /** 4 | * 描述: 懒汉式(线程不安全)(不推荐) 5 | */ 6 | public class Singleton5 { 7 | 8 | private static Singleton5 instance; 9 | 10 | private Singleton5() { 11 | 12 | } 13 | 14 | public static Singleton5 getInstance() { 15 | if (instance == null) { 16 | synchronized (Singleton5.class) { 17 | instance = new Singleton5(); 18 | } 19 | } 20 | return instance; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/concurrent/juctools/immutable/Person.java: -------------------------------------------------------------------------------- 1 | package concurrent.juctools.immutable; 2 | 3 | /** 4 | * 描述: 不可变的对象,演示其他类无法修改这个对象,public也不行 5 | */ 6 | public class Person { 7 | 8 | final int age = 18; 9 | String alice = new String("Alice"); 10 | final String name = alice; 11 | final TestFinal testFinal = new TestFinal(); 12 | public static void main(String[] args) { 13 | Person person = new Person(); 14 | person.alice = "44"; 15 | System.out.println(person.name); 16 | } 17 | } 18 | 19 | -------------------------------------------------------------------------------- /src/main/java/concurrent/juctools/lock/lock/PessimismOptimismLock.java: -------------------------------------------------------------------------------- 1 | package concurrent.juctools.lock.lock; 2 | 3 | import java.util.concurrent.atomic.AtomicInteger; 4 | 5 | /** 6 | * 描述: TODO 7 | */ 8 | public class PessimismOptimismLock { 9 | 10 | int a; 11 | 12 | public static void main(String[] args) { 13 | AtomicInteger atomicInteger = new AtomicInteger(); 14 | atomicInteger.incrementAndGet(); 15 | } 16 | 17 | public synchronized void testMethod() { 18 | a++; 19 | } 20 | 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/designpattern/decorator/Drink.java: -------------------------------------------------------------------------------- 1 | package designpattern.decorator; 2 | 3 | public abstract class Drink { 4 | 5 | public String des; // 描述 6 | private float price = 0.0f; 7 | public String getDes() { 8 | return des; 9 | } 10 | public void setDes(String des) { 11 | this.des = des; 12 | } 13 | public float getPrice() { 14 | return price; 15 | } 16 | public void setPrice(float price) { 17 | this.price = price; 18 | } 19 | 20 | //计算费用的抽象方法 子类实现 21 | public abstract float cost(); 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/algorithm/common/TrieNode.java: -------------------------------------------------------------------------------- 1 | package algorithm.common; 2 | 3 | /** 4 | * @author hsfxuebao 5 | * @date 2020/03/17 6 | * 7 | * 字典树 8 | */ 9 | public class TrieNode { 10 | 11 | /** 12 | * 表示字符路过这个节点的次数,以当前节点为前缀的字符有多少个 13 | */ 14 | public int path; 15 | /** 16 | * 记录以当前节点结束的字符的个数 17 | */ 18 | public int end; 19 | 20 | 21 | public TrieNode[] nexts; 22 | 23 | public TrieNode() { 24 | 25 | path = 0; 26 | end = 0; 27 | /** 28 | * 只能存英文小写字母 29 | */ 30 | nexts = new TrieNode[26]; 31 | } 32 | 33 | 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/concurrent/juctools/threadpool/SingleThreadExecutor.java: -------------------------------------------------------------------------------- 1 | package concurrent.juctools.threadpool; 2 | 3 | import java.util.concurrent.ExecutorService; 4 | import java.util.concurrent.Executors; 5 | 6 | /** 7 | * 描述: TODO 8 | */ 9 | public class SingleThreadExecutor { 10 | public static void main(String[] args) { 11 | ExecutorService executorService = Executors.newSingleThreadExecutor(); 12 | for (int i = 0; i < 1000; i++) { 13 | executorService.execute(new Task()); 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/designpattern/command/TVOffCommand.java: -------------------------------------------------------------------------------- 1 | package designpattern.command; 2 | 3 | public class TVOffCommand implements Command { 4 | 5 | // 组合TVReceiver 6 | 7 | TVReceiver tv; 8 | 9 | 10 | public TVOffCommand(TVReceiver tv) { 11 | super(); 12 | this.tv = tv; 13 | } 14 | 15 | @Override 16 | public void execute() { 17 | // TODO Auto-generated method stub 18 | tv.off(); 19 | } 20 | 21 | @Override 22 | public void undo() { 23 | // TODO Auto-generated method stub 24 | tv.on(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/concurrent/juctools/immutable/FinalVariableDemo.java: -------------------------------------------------------------------------------- 1 | package concurrent.juctools.immutable; 2 | 3 | /** 4 | * 描述: 演示final变量 5 | */ 6 | public class FinalVariableDemo { 7 | 8 | private static final Person person = null; 9 | 10 | // void testFinal() { 11 | // final int b = 7; 12 | // int c =b; 13 | // } 14 | // public FinalVariableDemo() { 15 | // } 16 | // public FinalVariableDemo(int a) { 17 | //// this.a = a; 18 | //// } 19 | // 20 | // static { 21 | // a = 7; 22 | // } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/designpattern/strategy/ToyDuck.java: -------------------------------------------------------------------------------- 1 | package designpattern.strategy; 2 | 3 | public class ToyDuck extends Duck{ 4 | 5 | @Override 6 | public void display() { 7 | // TODO Auto-generated method stub 8 | System.out.println("玩具鸭子"); 9 | } 10 | 11 | // 需要重写所有的方法 12 | 13 | public void quack() { 14 | System.out.println("玩具燕子不能嘎嘎叫~~"); 15 | } 16 | 17 | public void swim() { 18 | System.out.println("玩具鸭子不能游泳~~"); 19 | } 20 | 21 | public void fly() { 22 | System.out.println("玩具鸭子不能飞翔~~~"); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/designpattern/memento/game/Caretaker.java: -------------------------------------------------------------------------------- 1 | package designpattern.memento.game; 2 | 3 | /** 4 | * 守护者对象 保存游戏角色的状态 5 | */ 6 | public class Caretaker { 7 | 8 | // 只保存一次状态 9 | private Memento memento; 10 | // GameRole 11 | //private ArrayList mementos; 12 | // 13 | //private HashMap> rolesMementos; 14 | 15 | public Memento getMemento() { 16 | return memento; 17 | } 18 | 19 | public void setMemento(Memento memento) { 20 | this.memento = memento; 21 | } 22 | 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/designpattern/bridge/Vivo.java: -------------------------------------------------------------------------------- 1 | package designpattern.bridge; 2 | 3 | public class Vivo implements Brand { 4 | 5 | @Override 6 | public void open() { 7 | // TODO Auto-generated method stub 8 | System.out.println(" Vivo手机开机 "); 9 | } 10 | 11 | @Override 12 | public void close() { 13 | // TODO Auto-generated method stub 14 | System.out.println(" Vivo 手机关机 "); 15 | } 16 | 17 | @Override 18 | public void call() { 19 | // TODO Auto-generated method stub 20 | System.out.println(" Vivo打电话"); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/designpattern/bridge/XiaoMi.java: -------------------------------------------------------------------------------- 1 | package designpattern.bridge; 2 | 3 | public class XiaoMi implements Brand { 4 | 5 | @Override 6 | public void open() { 7 | // TODO Auto-generated method stub 8 | System.out.println(" 小米手机开机 "); 9 | } 10 | 11 | @Override 12 | public void close() { 13 | // TODO Auto-generated method stub 14 | System.out.println(" 小米手机关机 "); 15 | } 16 | 17 | @Override 18 | public void call() { 19 | // TODO Auto-generated method stub 20 | System.out.println(" 小米手机打电话 "); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/designpattern/flyweight/ConcreteWebSite.java: -------------------------------------------------------------------------------- 1 | package designpattern.flyweight; 2 | 3 | //具体的网站 4 | public class ConcreteWebSite extends WebSite { 5 | 6 | //共享的部分 内部状态 7 | private String type = ""; //网站发布的形式类型 8 | 9 | 10 | //构造器 11 | public ConcreteWebSite(String type) { 12 | 13 | this.type = type; 14 | } 15 | 16 | 17 | @Override 18 | public void use(User user) { 19 | // TODO Auto-generated method stub 20 | System.out.println("网站发布的形式:" + type + "使用中。。使用者 为 " + user.getName()); 21 | } 22 | 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/designpattern/bridge/UpRightPhone.java: -------------------------------------------------------------------------------- 1 | package designpattern.bridge; 2 | 3 | public class UpRightPhone extends Phone { 4 | 5 | //构造器 6 | public UpRightPhone(Brand brand) { 7 | super(brand); 8 | } 9 | 10 | public void open() { 11 | super.open(); 12 | System.out.println(" ֱ直立样式手机 "); 13 | } 14 | 15 | public void close() { 16 | super.close(); 17 | System.out.println(" ֱֱ直立样式手机 "); 18 | } 19 | 20 | public void call() { 21 | super.call(); 22 | System.out.println(" ֱֱ直立样式手机 "); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/designpattern/facade/Projector.java: -------------------------------------------------------------------------------- 1 | package designpattern.facade; 2 | 3 | public class Projector { 4 | 5 | private static Projector instance = new Projector(); 6 | 7 | public static Projector getInstance() { 8 | return instance; 9 | } 10 | 11 | public void on() { 12 | System.out.println(" Projector on "); 13 | } 14 | 15 | public void off() { 16 | System.out.println(" Projector ff "); 17 | } 18 | 19 | public void focus() { 20 | System.out.println(" Projector is Projector "); 21 | } 22 | 23 | //... 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/designpattern/interpreter/VarExpression.java: -------------------------------------------------------------------------------- 1 | package designpattern.interpreter; 2 | 3 | import java.util.HashMap; 4 | 5 | 6 | /** 7 | * 变量的解释器 8 | * 9 | */ 10 | public class VarExpression extends Expression { 11 | 12 | private String key; // key=a,key=b,key=c 13 | 14 | public VarExpression(String key) { 15 | this.key = key; 16 | } 17 | 18 | // var 就是{a=10, b=20} 19 | // interpreter 根据变量名称 返回对应值 20 | @Override 21 | public int interpreter(HashMap var) { 22 | return var.get(this.key); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | spring.application.name=java-study 2 | server.port=9090 3 | 4 | spring.swagger2.enabled=true 5 | 6 | 7 | spring.redis.database=0 8 | spring.redis.password= 9 | spring.redis.timeout=3000 10 | #sentinel/cluster/single 11 | spring.redis.mode=single 12 | 13 | spring.redis.pool.conn-timeout=3000 14 | spring.redis.pool.so-timeout=3000 15 | spring.redis.pool.size=10 16 | 17 | spring.redis.single.address1=192.168.111.147:6381 18 | spring.redis.single.address2=192.168.111.147:6382 19 | spring.redis.single.address3=192.168.111.147:6383 20 | 21 | -------------------------------------------------------------------------------- /src/main/java/designpattern/bridge/FoldedPhone.java: -------------------------------------------------------------------------------- 1 | package designpattern.bridge; 2 | 3 | 4 | //�۵�ʽ�ֻ��࣬�̳� ������ Phone 5 | public class FoldedPhone extends Phone { 6 | 7 | //������ 8 | public FoldedPhone(Brand brand) { 9 | super(brand); 10 | } 11 | 12 | public void open() { 13 | super.open(); 14 | System.out.println(" ֱ折叠样式手机 "); 15 | } 16 | 17 | public void close() { 18 | super.close(); 19 | System.out.println("ֱ折叠样式手机"); 20 | } 21 | 22 | public void call() { 23 | super.call(); 24 | System.out.println(" ֱ折叠样式手机 "); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/designpattern/builder/CommonHouse.java: -------------------------------------------------------------------------------- 1 | package designpattern.builder; 2 | 3 | public class CommonHouse extends AbstractHouse { 4 | 5 | @Override 6 | public void buildBasic() { 7 | // TODO Auto-generated method stub 8 | System.out.println(" 普通房子打地基 "); 9 | } 10 | 11 | @Override 12 | public void buildWalls() { 13 | // TODO Auto-generated method stub 14 | System.out.println(" 普通房子砌墙"); 15 | } 16 | 17 | @Override 18 | public void roofed() { 19 | // TODO Auto-generated method stub 20 | System.out.println(" 普通房子封顶"); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/jvm/Test1.java: -------------------------------------------------------------------------------- 1 | package jvm; 2 | 3 | import java.time.LocalDateTime; 4 | 5 | /** 6 | * @author hsfxuebao 7 | * Created on 2020-08-12 8 | */ 9 | public class Test1 { 10 | 11 | public static void main(String[] args) { 12 | 13 | LocalDateTime now = LocalDateTime.now(); 14 | 15 | // System.out.println(now.getHour()); 16 | // System.out.println(now.plusHours(9).getHour()); 17 | // System.out.println(now.plusHours(10).getHour()); 18 | Boolean[] b = new Boolean[0]; 19 | System.out.println(b.length); 20 | 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/concurrent/juctools/immutable/ImmutableDemo.java: -------------------------------------------------------------------------------- 1 | package concurrent.juctools.immutable; 2 | 3 | import java.util.HashSet; 4 | import java.util.Set; 5 | 6 | /** 7 | * 描述: 一个属性是对象,但是整体不可变,其他类无法修改set里面的数据 8 | */ 9 | public class ImmutableDemo { 10 | 11 | private final Set students = new HashSet<>(); 12 | 13 | public ImmutableDemo() { 14 | students.add("李小美"); 15 | students.add("王壮"); 16 | students.add("徐福记"); 17 | } 18 | 19 | public boolean isStudent(String name) { 20 | return students.contains(name); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/designpattern/memento/theory/Originator.java: -------------------------------------------------------------------------------- 1 | package designpattern.memento.theory; 2 | 3 | public class Originator { 4 | 5 | private String state;// 状态信息 6 | 7 | public String getState() { 8 | return state; 9 | } 10 | 11 | public void setState(String state) { 12 | this.state = state; 13 | } 14 | 15 | // 一个方法 可以保存一个状态 对象Memento 16 | public Memento saveStateMemento() { 17 | return new Memento(state); 18 | } 19 | 20 | //ͨ 通过备忘录对象 恢复状态 21 | public void getStateFromMemento(Memento memento) { 22 | state = memento.getState(); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/designpattern/decorator/application/DecoratorTest.java: -------------------------------------------------------------------------------- 1 | package designpattern.decorator.application; 2 | 3 | 4 | import java.io.DataInputStream; 5 | import java.io.FileInputStream; 6 | import java.io.IOException; 7 | 8 | /** 9 | * @author hsfxuebao 10 | * Created on 2021-07-31 11 | */ 12 | public class DecoratorTest { 13 | 14 | 15 | public static void main(String[] args) throws IOException { 16 | DataInputStream dis = new DataInputStream(new FileInputStream("d:\\abc.txt")); 17 | System.out.println(dis.read()); 18 | dis.close(); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/designpattern/proxy/staticproxy/TeacherDaoProxy.java: -------------------------------------------------------------------------------- 1 | package designpattern.proxy.staticproxy; 2 | 3 | //代理对象 静态代理 4 | public class TeacherDaoProxy implements ITeacherDao{ 5 | 6 | private ITeacherDao target; // 目标对象 7 | 8 | 9 | //构造器 10 | public TeacherDaoProxy(ITeacherDao target) { 11 | this.target = target; 12 | } 13 | 14 | 15 | 16 | @Override 17 | public void teach() { 18 | // TODO Auto-generated method stub 19 | System.out.println("静态代理开始。。。");//���� 20 | target.teach(); 21 | System.out.println("静态代理结束");//���� 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/designpattern/memento/game/Memento.java: -------------------------------------------------------------------------------- 1 | package designpattern.memento.game; 2 | 3 | public class Memento { 4 | 5 | // 攻击力 6 | private int vit; 7 | // 防御力 8 | private int def; 9 | public Memento(int vit, int def) { 10 | super(); 11 | this.vit = vit; 12 | this.def = def; 13 | } 14 | public int getVit() { 15 | return vit; 16 | } 17 | public void setVit(int vit) { 18 | this.vit = vit; 19 | } 20 | public int getDef() { 21 | return def; 22 | } 23 | public void setDef(int def) { 24 | this.def = def; 25 | } 26 | 27 | 28 | 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/designpattern/responsibilitychain/Approver.java: -------------------------------------------------------------------------------- 1 | package designpattern.responsibilitychain; 2 | 3 | public abstract class Approver { 4 | 5 | Approver approver; // 下一个处理者 6 | String name; // 名字 7 | 8 | public Approver(String name) { 9 | // TODO Auto-generated constructor stub 10 | this.name = name; 11 | } 12 | 13 | // 下一个处理者 14 | public void setApprover(Approver approver) { 15 | this.approver = approver; 16 | } 17 | 18 | // 处理审批请求的方法 得到一个请求 处理是子类来完成 因此该方法时抽象的 19 | public abstract void processRequest(PurchaseRequest purchaseRequest); 20 | 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/designpattern/builder/improve/CommonHouse.java: -------------------------------------------------------------------------------- 1 | package designpattern.builder.improve; 2 | 3 | public class CommonHouse extends HouseBuilder { 4 | 5 | @Override 6 | public void buildBasic() { 7 | // TODO Auto-generated method stub 8 | System.out.println(" 普通房子打地基 5米"); 9 | } 10 | 11 | @Override 12 | public void buildWalls() { 13 | // TODO Auto-generated method stub 14 | System.out.println(" 普通房子砌墙 10cm"); 15 | } 16 | 17 | @Override 18 | public void roofed() { 19 | // TODO Auto-generated method stub 20 | System.out.println(" 普通房子封顶"); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/designpattern/factory/absfactory/pizzastore/pizza/Pizza.java: -------------------------------------------------------------------------------- 1 | package designpattern.factory.absfactory.pizzastore.pizza; 2 | 3 | public abstract class Pizza { 4 | protected String name; 5 | 6 | 7 | public abstract void prepare(); 8 | 9 | 10 | public void bake() { 11 | System.out.println(name + " baking;"); 12 | } 13 | 14 | public void cut() { 15 | System.out.println(name + " cutting;"); 16 | } 17 | 18 | public void box() { 19 | System.out.println(name + " boxing;"); 20 | } 21 | 22 | public void setName(String name) { 23 | this.name = name; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/concurrent/base/singleton/Singleton6.java: -------------------------------------------------------------------------------- 1 | package concurrent.base.singleton; 2 | 3 | /** 4 | * 描述: 双重检查(推荐面试使用) 5 | */ 6 | public class Singleton6 { 7 | 8 | private volatile static Singleton6 instance; 9 | 10 | private Singleton6() { 11 | 12 | } 13 | 14 | public static Singleton6 getInstance() { 15 | if (instance == null) { 16 | synchronized (Singleton6.class) { 17 | if (instance == null) { 18 | instance = new Singleton6(); 19 | } 20 | } 21 | } 22 | return instance; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/designpattern/builder/improve/HighBuilding.java: -------------------------------------------------------------------------------- 1 | package designpattern.builder.improve; 2 | 3 | public class HighBuilding extends HouseBuilder { 4 | 5 | @Override 6 | public void buildBasic() { 7 | // TODO Auto-generated method stub 8 | System.out.println("普通房子打地基100米 "); 9 | } 10 | 11 | @Override 12 | public void buildWalls() { 13 | // TODO Auto-generated method stub 14 | System.out.println("普通房子砌墙 20cm "); 15 | } 16 | 17 | @Override 18 | public void roofed() { 19 | // TODO Auto-generated method stub 20 | System.out.println(" 普通房子封顶 "); 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/concurrent/juctools/threadpool/ForLoop.java: -------------------------------------------------------------------------------- 1 | package concurrent.juctools.threadpool; 2 | 3 | import java.util.concurrent.Executors; 4 | 5 | /** 6 | * 描述: TODO 7 | */ 8 | public class ForLoop { 9 | 10 | public static void main(String[] args) { 11 | for (int i = 0; i < 1000; i++) { 12 | Thread thread = new Thread(new Task()); 13 | thread.start(); 14 | } 15 | } 16 | 17 | static class Task implements Runnable { 18 | 19 | @Override 20 | public void run() { 21 | System.out.println("执行了任务"); 22 | } 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/designpattern/factory/factorymethod/pizzastore/pizza/Pizza.java: -------------------------------------------------------------------------------- 1 | package designpattern.factory.factorymethod.pizzastore.pizza; 2 | 3 | public abstract class Pizza { 4 | protected String name; 5 | 6 | 7 | public abstract void prepare(); 8 | 9 | 10 | public void bake() { 11 | System.out.println(name + " baking;"); 12 | } 13 | 14 | public void cut() { 15 | System.out.println(name + " cutting;"); 16 | } 17 | 18 | public void box() { 19 | System.out.println(name + " boxing;"); 20 | } 21 | 22 | public void setName(String name) { 23 | this.name = name; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/designpattern/iterator/Department.java: -------------------------------------------------------------------------------- 1 | package designpattern.iterator; 2 | 3 | //ϵ 4 | public class Department { 5 | 6 | private String name; 7 | private String desc; 8 | public Department(String name, String desc) { 9 | super(); 10 | this.name = name; 11 | this.desc = desc; 12 | } 13 | public String getName() { 14 | return name; 15 | } 16 | public void setName(String name) { 17 | this.name = name; 18 | } 19 | public String getDesc() { 20 | return desc; 21 | } 22 | public void setDesc(String desc) { 23 | this.desc = desc; 24 | } 25 | 26 | 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/concurrent/base/threadcoreknowledge/uncaughtexception/ExceptionInChildThread.java: -------------------------------------------------------------------------------- 1 | package concurrent.base.threadcoreknowledge.uncaughtexception; 2 | 3 | /** 4 | * 描述: 单线程,抛出,处理,有异常堆栈 多线程,子线程发生异常,会有什么不同? 5 | */ 6 | public class ExceptionInChildThread implements Runnable { 7 | 8 | public static void main(String[] args) { 9 | new Thread(new ExceptionInChildThread()).start(); 10 | for (int i = 0; i < 1000; i++) { 11 | System.out.println(i); 12 | } 13 | } 14 | 15 | @Override 16 | public void run() { 17 | throw new RuntimeException(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/designpattern/strategy/improve/Client.java: -------------------------------------------------------------------------------- 1 | package designpattern.strategy.improve; 2 | 3 | public class Client { 4 | 5 | public static void main(String[] args) { 6 | // TODO Auto-generated method stub 7 | WildDuck wildDuck = new WildDuck(); 8 | wildDuck.fly();// 9 | 10 | ToyDuck toyDuck = new ToyDuck(); 11 | toyDuck.fly(); 12 | 13 | PekingDuck pekingDuck = new PekingDuck(); 14 | pekingDuck.fly(); 15 | 16 | // 动态改变某个对象的行为 北京鸭子不能飞翔 17 | pekingDuck.setFlyBehavior(new NoFlyBehavior()); 18 | System.out.println("北京鸭子的是飞翔能力"); 19 | pekingDuck.fly(); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/concurrent/base/threadcoreknowledge/threadobjectclasscommonmethods/CurrentThread.java: -------------------------------------------------------------------------------- 1 | package concurrent.base.threadcoreknowledge.threadobjectclasscommonmethods; 2 | 3 | /** 4 | * 描述: 演示打印main, Thread-0, Thread-1 5 | */ 6 | public class CurrentThread implements Runnable { 7 | 8 | public static void main(String[] args) { 9 | new CurrentThread().run(); 10 | new Thread(new CurrentThread()).start(); 11 | new Thread(new CurrentThread()).start(); 12 | } 13 | 14 | @Override 15 | public void run() { 16 | System.out.println(Thread.currentThread().getName()); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/designpattern/command/LightOffCommand.java: -------------------------------------------------------------------------------- 1 | package designpattern.command; 2 | 3 | public class LightOffCommand implements Command { 4 | 5 | // 组合 LightReceiver 6 | 7 | LightReceiver light; 8 | 9 | // 构造器 10 | public LightOffCommand(LightReceiver light) { 11 | super(); 12 | this.light = light; 13 | } 14 | 15 | @Override 16 | public void execute() { 17 | // TODO Auto-generated method stub 18 | // 调用接收者的方法 19 | light.off(); 20 | } 21 | 22 | @Override 23 | public void undo() { 24 | // TODO Auto-generated method stub 25 | // 调用接收者的方法 26 | light.on(); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/designpattern/visitor/ObjectStructure.java: -------------------------------------------------------------------------------- 1 | package designpattern.visitor; 2 | 3 | import java.util.LinkedList; 4 | import java.util.List; 5 | 6 | // 数据结构 管理很多人 Man Woman 7 | public class ObjectStructure { 8 | 9 | // 维护一个集合 10 | private List persons = new LinkedList<>(); 11 | 12 | //增加到list 13 | public void attach(Person p) { 14 | persons.add(p); 15 | } 16 | //删除 17 | public void detach(Person p) { 18 | persons.remove(p); 19 | } 20 | 21 | //显示测评情况 22 | public void display(Action action) { 23 | for(Person p: persons) { 24 | p.accept(action); 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/concurrent/juctools/immutable/FinalMethodDemo.java: -------------------------------------------------------------------------------- 1 | package concurrent.juctools.immutable; 2 | 3 | /** 4 | * 描述: final的方法 5 | */ 6 | public class FinalMethodDemo { 7 | 8 | public void drink() { 9 | 10 | } 11 | 12 | public final void eat() { 13 | 14 | } 15 | 16 | public static void sleep() { 17 | 18 | } 19 | } 20 | 21 | class SubClass extends FinalMethodDemo { 22 | 23 | @Override 24 | public void drink() { 25 | super.drink(); 26 | eat(); 27 | } 28 | 29 | // public final void eat() { 30 | // 31 | // } 32 | public static void sleep() { 33 | 34 | } 35 | } -------------------------------------------------------------------------------- /src/main/java/concurrent/juctools/imooccache/computable/MayFail.java: -------------------------------------------------------------------------------- 1 | package concurrent.juctools.imooccache.computable; 2 | 3 | import java.io.IOException; 4 | import java.util.concurrent.ThreadPoolExecutor; 5 | 6 | /** 7 | * 描述: 耗时计算的实现类,有概率计算失败 8 | */ 9 | public class MayFail implements Computable{ 10 | 11 | @Override 12 | public Integer compute(String arg) throws Exception { 13 | double random = Math.random(); 14 | if (random > 0.5) { 15 | throw new IOException("读取文件出错"); 16 | } 17 | Thread.sleep(3000); 18 | return Integer.valueOf(arg); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/designpattern/command/LightOnCommand.java: -------------------------------------------------------------------------------- 1 | package designpattern.command; 2 | 3 | public class LightOnCommand implements Command { 4 | 5 | //组合LightReceiver 6 | 7 | LightReceiver light; 8 | 9 | public LightOnCommand(LightReceiver light) { 10 | super(); 11 | this.light = light; 12 | } 13 | 14 | @Override 15 | public void execute() { 16 | // TODO Auto-generated method stub 17 | //调用接收者的方法 18 | light.on(); 19 | } 20 | 21 | 22 | 23 | @Override 24 | public void undo() { 25 | // TODO Auto-generated method stub 26 | // 调用接收者的方法 27 | light.off(); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/designpattern/facade/DVDPlayer.java: -------------------------------------------------------------------------------- 1 | package designpattern.facade; 2 | 3 | public class DVDPlayer { 4 | 5 | // 饿汉模式 6 | private static DVDPlayer instance = new DVDPlayer(); 7 | 8 | public static DVDPlayer getInstanc() { 9 | return instance; 10 | } 11 | 12 | public void on() { 13 | System.out.println(" dvd on "); 14 | } 15 | public void off() { 16 | System.out.println(" dvd off "); 17 | } 18 | 19 | public void play() { 20 | System.out.println(" dvd is playing "); 21 | } 22 | 23 | //.... 24 | public void pause() { 25 | System.out.println(" dvd pause .."); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/designpattern/mediator/smarthouse/Curtains.java: -------------------------------------------------------------------------------- 1 | package designpattern.mediator.smarthouse; 2 | 3 | public class Curtains extends Colleague { 4 | 5 | public Curtains(Mediator mediator, String name) { 6 | super(mediator, name); 7 | // TODO Auto-generated constructor stub 8 | mediator.Register(name, this); 9 | } 10 | 11 | @Override 12 | public void SendMessage(int stateChange) { 13 | // TODO Auto-generated method stub 14 | this.GetMediator().GetMessage(stateChange, this.name); 15 | } 16 | 17 | public void UpCurtains() { 18 | System.out.println("I am holding Up Curtains!"); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/concurrent/juctools/threadpool/ScheduledThreadPoolTest.java: -------------------------------------------------------------------------------- 1 | package concurrent.juctools.threadpool; 2 | 3 | import java.util.concurrent.Executors; 4 | import java.util.concurrent.ScheduledExecutorService; 5 | import java.util.concurrent.TimeUnit; 6 | 7 | /** 8 | * 描述: TODO 9 | */ 10 | public class ScheduledThreadPoolTest { 11 | 12 | public static void main(String[] args) { 13 | ScheduledExecutorService threadPool = Executors.newScheduledThreadPool(10); 14 | // threadPool.schedule(new Task(), 5, TimeUnit.SECONDS); 15 | threadPool.scheduleAtFixedRate(new Task(), 1, 3, TimeUnit.SECONDS); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/concurrent/base/threadcoreknowledge/createthreads/wrongways/DemoTimmerTask.java: -------------------------------------------------------------------------------- 1 | package concurrent.base.threadcoreknowledge.createthreads.wrongways; 2 | 3 | import java.util.Timer; 4 | import java.util.TimerTask; 5 | 6 | /** 7 | * 描述: 定时器创建线程 8 | */ 9 | public class DemoTimmerTask { 10 | 11 | public static void main(String[] args) { 12 | Timer timer = new Timer(); 13 | timer.scheduleAtFixedRate(new TimerTask() { 14 | @Override 15 | public void run() { 16 | System.out.println(Thread.currentThread().getName()); 17 | } 18 | }, 1000, 1000); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/designpattern/factory/simplefactory/pizzastore/pizza/Pizza.java: -------------------------------------------------------------------------------- 1 | package designpattern.factory.simplefactory.pizzastore.pizza; 2 | 3 | // 披萨抽象类 4 | public abstract class Pizza { 5 | protected String name; //名称 6 | 7 | // 制作披萨的方法 8 | public abstract void prepare(); 9 | 10 | 11 | public void bake() { 12 | System.out.println(name + " baking;"); 13 | } 14 | 15 | public void cut() { 16 | System.out.println(name + " cutting;"); 17 | } 18 | 19 | public void box() { 20 | System.out.println(name + " boxing;"); 21 | } 22 | 23 | public void setName(String name) { 24 | this.name = name; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/designpattern/flyweight/WebSiteFactory.java: -------------------------------------------------------------------------------- 1 | package designpattern.flyweight; 2 | 3 | import java.util.HashMap; 4 | 5 | // 网站工厂类 根据需要返回一个网站 6 | public class WebSiteFactory { 7 | 8 | 9 | //集合 充当池的作用 10 | private HashMap pool = new HashMap<>(); 11 | 12 | 13 | public WebSite getWebSiteCategory(String type) { 14 | if(!pool.containsKey(type)) { 15 | //创建一个网站 并放入池中 16 | pool.put(type, new ConcreteWebSite(type)); 17 | } 18 | 19 | return (WebSite)pool.get(type); 20 | } 21 | 22 | // 获取网站的分类总数 23 | public int getWebSiteCount() { 24 | return pool.size(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/designpattern/facade/TheaterLight.java: -------------------------------------------------------------------------------- 1 | package designpattern.facade; 2 | 3 | public class TheaterLight { 4 | 5 | private static TheaterLight instance = new TheaterLight(); 6 | 7 | public static TheaterLight getInstance() { 8 | return instance; 9 | } 10 | 11 | public void on() { 12 | System.out.println(" TheaterLight on "); 13 | } 14 | 15 | public void off() { 16 | System.out.println(" TheaterLight off "); 17 | } 18 | 19 | public void dim() { 20 | System.out.println(" TheaterLight dim.. "); 21 | } 22 | 23 | public void bright() { 24 | System.out.println(" TheaterLight bright.. "); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/designpattern/observer/Client.java: -------------------------------------------------------------------------------- 1 | package designpattern.observer; 2 | 3 | /** 4 | * 观察者模式 5 | */ 6 | public class Client { 7 | public static void main(String[] args) { 8 | //创建 currentConditions 9 | CurrentConditions currentConditions = new CurrentConditions(); 10 | // 创建 WeatherData 并将接入方 currentConditions 传递到 WeatherData 11 | WeatherData weatherData = new WeatherData(currentConditions); 12 | 13 | // 跟新天气情况 14 | weatherData.setData(30, 150, 40); 15 | 16 | // 天气情况变化 17 | System.out.println("============��������仯============="); 18 | weatherData.setData(40, 160, 20); 19 | 20 | 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/designpattern/singleton/type8/SingletonTest08.java: -------------------------------------------------------------------------------- 1 | package designpattern.singleton.type8; 2 | 3 | public class SingletonTest08 { 4 | public static void main(String[] args) { 5 | Singleton instance = Singleton.INSTANCE; 6 | Singleton instance2 = Singleton.INSTANCE; 7 | System.out.println(instance == instance2); 8 | 9 | System.out.println(instance.hashCode()); 10 | System.out.println(instance2.hashCode()); 11 | 12 | instance.sayOK(); 13 | } 14 | } 15 | 16 | /** 17 | * 枚举,可以实现单例,推荐使用 18 | */ 19 | enum Singleton { 20 | INSTANCE; //属性 21 | public void sayOK() { 22 | System.out.println("ok~"); 23 | } 24 | } -------------------------------------------------------------------------------- /src/main/java/designpattern/responsibilitychain/PurchaseRequest.java: -------------------------------------------------------------------------------- 1 | package designpattern.responsibilitychain; 2 | 3 | 4 | // 请求类 5 | public class PurchaseRequest { 6 | 7 | private int type = 0; // 请求类型 8 | private float price = 0.0f; // 请求金额 9 | private int id = 0; 10 | // 构造器 11 | public PurchaseRequest(int type, float price, int id) { 12 | this.type = type; 13 | this.price = price; 14 | this.id = id; 15 | } 16 | public int getType() { 17 | return type; 18 | } 19 | public float getPrice() { 20 | return price; 21 | } 22 | public int getId() { 23 | return id; 24 | } 25 | 26 | 27 | 28 | 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/designpattern/template/improve/Client.java: -------------------------------------------------------------------------------- 1 | package designpattern.template.improve; 2 | 3 | 4 | public class Client { 5 | 6 | public static void main(String[] args) { 7 | // TODO Auto-generated method stub 8 | //制作红豆豆浆 9 | 10 | System.out.println("制作红豆豆浆"); 11 | SoyaMilk redBeanSoyaMilk = new RedBeanSoyaMilk(); 12 | redBeanSoyaMilk.make(); 13 | 14 | System.out.println("制作花生豆浆"); 15 | SoyaMilk peanutSoyaMilk = new PeanutSoyaMilk(); 16 | peanutSoyaMilk.make(); 17 | 18 | System.out.println("制作纯豆浆"); 19 | SoyaMilk pureSoyaMilk = new PureSoyaMilk(); 20 | pureSoyaMilk.make(); 21 | 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/jvm/command/jmap/GCTest.java: -------------------------------------------------------------------------------- 1 | package jvm.command.jmap; 2 | 3 | import java.util.ArrayList; 4 | 5 | /** 6 | * -Xms60m -Xmx60m -XX:SurvivorRatio=8 7 | */ 8 | public class GCTest { 9 | public static void main(String[] args) { 10 | ArrayList list = new ArrayList<>(); 11 | 12 | for (int i = 0; i < 1000; i++) { 13 | byte[] arr = new byte[1024 * 100];//100KB 14 | list.add(arr); 15 | try { 16 | Thread.sleep(60); 17 | } catch (InterruptedException e) { 18 | e.printStackTrace(); 19 | } 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/concurrent/base/threadcoreknowledge/createthreads/BothRunnableThread.java: -------------------------------------------------------------------------------- 1 | package concurrent.base.threadcoreknowledge.createthreads; 2 | 3 | /** 4 | * 描述: 同时使用Runnable和Thread两种实现线程的方式 5 | */ 6 | public class BothRunnableThread { 7 | 8 | public static void main(String[] args) { 9 | new Thread(new Runnable() { 10 | @Override 11 | public void run() { 12 | System.out.println("我来自Runnable"); 13 | } 14 | }){ 15 | @Override 16 | public void run() { 17 | System.out.println("我来自Thread"); 18 | } 19 | }.start(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/designpattern/state/ClientTest.java: -------------------------------------------------------------------------------- 1 | package designpattern.state; 2 | 3 | /** 4 | * 状态模式 5 | */ 6 | public class ClientTest { 7 | 8 | public static void main(String[] args) { 9 | // TODO Auto-generated method stub 10 | // 创建活动对象 奖品有一个 11 | RaffleActivity activity = new RaffleActivity(1); 12 | 13 | // 抽奖30次 14 | for (int i = 0; i < 30; i++) { 15 | System.out.println("--------第" + (i + 1) + "抽奖----------"); 16 | // 参加抽奖 第一步点击扣除积分 17 | activity.debuctMoney(); 18 | 19 | // 第二步 抽奖 20 | activity.raffle(); 21 | } 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/jvm/jvmargs/GCLogTest.java: -------------------------------------------------------------------------------- 1 | package jvm.jvmargs; 2 | 3 | import java.util.ArrayList; 4 | 5 | /** 6 | * -Xms60m -Xmx60m -XX:SurvivorRatio=8 7 | 8 | */ 9 | public class GCLogTest { 10 | public static void main(String[] args) { 11 | ArrayList list = new ArrayList<>(); 12 | 13 | for (int i = 0; i < 500; i++) { 14 | byte[] arr = new byte[1024 * 100];//100KB 15 | list.add(arr); 16 | try { 17 | Thread.sleep(20); 18 | } catch (InterruptedException e) { 19 | e.printStackTrace(); 20 | } 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/designpattern/builder/improve/House.java: -------------------------------------------------------------------------------- 1 | package designpattern.builder.improve; 2 | 3 | //产品->Product 4 | public class House { 5 | private String baise; 6 | private String wall; 7 | private String roofed; 8 | public String getBaise() { 9 | return baise; 10 | } 11 | public void setBaise(String baise) { 12 | this.baise = baise; 13 | } 14 | public String getWall() { 15 | return wall; 16 | } 17 | public void setWall(String wall) { 18 | this.wall = wall; 19 | } 20 | public String getRoofed() { 21 | return roofed; 22 | } 23 | public void setRoofed(String roofed) { 24 | this.roofed = roofed; 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/designpattern/iterator/application/iteratorTest.java: -------------------------------------------------------------------------------- 1 | package designpattern.iterator.application; 2 | 3 | import java.util.ArrayList; 4 | import java.util.Iterator; 5 | import java.util.List; 6 | 7 | /** 8 | * @author hsfxuebao 9 | * Created on 2021-08-04 10 | */ 11 | public class iteratorTest { 12 | 13 | 14 | public static void main(String[] args) { 15 | // TODO Auto-generated method stub 16 | List a = new ArrayList<>(); 17 | a.add("jack");// .. 18 | // 19 | Iterator Itr = a.iterator(); 20 | while (Itr.hasNext()) { 21 | System.out.println(Itr.next()); 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/concurrent/SynExample2.java: -------------------------------------------------------------------------------- 1 | package concurrent; 2 | 3 | import org.openjdk.jol.info.ClassLayout; 4 | 5 | /** 6 | * @author hsfxuebao 7 | * @date 2020/04/22 8 | */ 9 | public class SynExample2 { 10 | 11 | public synchronized void test() { 12 | 13 | int i = 1; 14 | int j = 2; 15 | System.out.println(i + j); 16 | 17 | } 18 | 19 | public static void main(String[] args) { 20 | Thread thread=new Thread(new Runnable() { 21 | @Override 22 | public void run() { 23 | synchronized (this){ 24 | System.out.println(ClassLayout.parseInstance(this).toPrintable()); 25 | } 26 | } 27 | }); 28 | thread.start(); 29 | 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/designpattern/responsibilitychain/SchoolMasterApprover.java: -------------------------------------------------------------------------------- 1 | package designpattern.responsibilitychain; 2 | 3 | public class SchoolMasterApprover extends Approver { 4 | 5 | public SchoolMasterApprover(String name) { 6 | // TODO Auto-generated constructor stub 7 | super(name); 8 | } 9 | 10 | @Override 11 | public void processRequest(PurchaseRequest purchaseRequest) { 12 | // TODO Auto-generated method stub 13 | if(purchaseRequest.getPrice() > 30000) { 14 | System.out.println(" 请求编号 id= " + purchaseRequest.getId() + " 被 " + this.name + " 处理"); 15 | }else { 16 | approver.processRequest(purchaseRequest); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/designpattern/template/SoyaMilk.java: -------------------------------------------------------------------------------- 1 | package designpattern.template; 2 | 3 | //抽象类 表示豆浆 4 | public abstract class SoyaMilk { 5 | 6 | //模板方法 make , 可以做成 final , 不让子类进行覆盖 7 | final void make() { 8 | 9 | select(); 10 | addCondiments(); 11 | soak(); 12 | beat(); 13 | 14 | } 15 | 16 | //选材料 17 | void select() { 18 | System.out.println("第一步 选取好的黄豆 "); 19 | } 20 | 21 | //添加不同的配料 抽象方法,子类去实现 22 | abstract void addCondiments(); 23 | 24 | //浸泡 25 | void soak() { 26 | System.out.println("第三步 黄豆和材料需要浸泡3小时 "); 27 | } 28 | 29 | void beat() { 30 | System.out.println("第4步 黄豆和配料放入豆浆机打碎 "); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/concurrent/juctools/lock/lock/MustUnlock.java: -------------------------------------------------------------------------------- 1 | package concurrent.juctools.lock.lock; 2 | 3 | import java.util.concurrent.locks.Lock; 4 | import java.util.concurrent.locks.ReentrantLock; 5 | 6 | /** 7 | * 描述: Lock不会像synchronized一样,异常的时候自动释放锁,所以最佳实践是,finally中释放锁,以便保证发生异常的时候锁一定被释放 8 | */ 9 | public class MustUnlock { 10 | 11 | private static Lock lock = new ReentrantLock(); 12 | 13 | public static void main(String[] args) { 14 | lock.lock(); 15 | try{ 16 | //获取本锁保护的资源 17 | System.out.println(Thread.currentThread().getName()+"开始执行任务"); 18 | }finally { 19 | lock.unlock(); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/designpattern/interpreter/AddExpression.java: -------------------------------------------------------------------------------- 1 | package designpattern.interpreter; 2 | 3 | import java.util.HashMap; 4 | 5 | /** 6 | * 加法解释器 7 | * 8 | */ 9 | public class AddExpression extends SymbolExpression { 10 | 11 | public AddExpression(Expression left, Expression right) { 12 | super(left, right); 13 | } 14 | 15 | //处理相加 16 | //var 仍然是 {a=10,b=20}.. 17 | // 一会我们debug 源码 18 | public int interpreter(HashMap var) { 19 | //super.left.interpreter(var) 返回left 表达式对应的值 a = 10 20 | //super.right.interpreter(var): 返回right 表达式对应的值 b = 20 21 | return super.left.interpreter(var) + super.right.interpreter(var); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/designpattern/proxy/cglib/Client.java: -------------------------------------------------------------------------------- 1 | package designpattern.proxy.cglib; 2 | 3 | import designpattern.proxy.staticproxy.TeacherDao; 4 | import designpattern.proxy.staticproxy.TeacherDaoProxy; 5 | 6 | public class Client { 7 | 8 | public static void main(String[] args) { 9 | // TODO Auto-generated method stub 10 | //创建目标对象 被代理的对象 11 | designpattern.proxy.staticproxy.TeacherDao teacherDao = new TeacherDao(); 12 | 13 | //创建代理对象,同时将被代理对象传进去 14 | TeacherDaoProxy teacherDaoProxy = new TeacherDaoProxy(teacherDao); 15 | 16 | //ͨ 通过代理对象,调用被代理对象的方法 17 | // 即 执行的是代理对象的方法,代理对象再去调用目标对象的方法 18 | teacherDaoProxy.teach(); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/designpattern/proxy/dynamic/Client.java: -------------------------------------------------------------------------------- 1 | package designpattern.proxy.dynamic; 2 | 3 | public class Client { 4 | 5 | public static void main(String[] args) { 6 | // TODO Auto-generated method stub 7 | //目标对象 8 | ITeacherDao target = new TeacherDao(); 9 | 10 | //代理对象 ITeacherDao 11 | ITeacherDao proxyInstance = (ITeacherDao)new ProxyFactory(target).getProxyInstance(); 12 | 13 | // proxyInstance=class com.sun.proxy.$Proxy0 内存中动态生成代理对象 14 | System.out.println("proxyInstance=" + proxyInstance.getClass()); 15 | 16 | //ͨ 通过代理对象,调用目标对象的方法 17 | //proxyInstance.teach(); 18 | 19 | proxyInstance.sayHello(" tom "); 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/designpattern/responsibilitychain/DepartmentApprover.java: -------------------------------------------------------------------------------- 1 | package designpattern.responsibilitychain; 2 | 3 | public class DepartmentApprover extends Approver { 4 | 5 | 6 | public DepartmentApprover(String name) { 7 | // TODO Auto-generated constructor stub 8 | super(name); 9 | } 10 | 11 | @Override 12 | public void processRequest(PurchaseRequest purchaseRequest) { 13 | // TODO Auto-generated method stub 14 | if(purchaseRequest.getPrice() <= 5000) { 15 | System.out.println(" 请求编号 id= " + purchaseRequest.getId() + " 被 " + this.name + " 处理"); 16 | }else { 17 | approver.processRequest(purchaseRequest); 18 | } 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/designpattern/decorator/Decorator.java: -------------------------------------------------------------------------------- 1 | package designpattern.decorator; 2 | 3 | public class Decorator extends Drink { 4 | private Drink obj; 5 | 6 | public Decorator(Drink obj) { //组合 7 | // TODO Auto-generated constructor stub 8 | this.obj = obj; 9 | } 10 | 11 | @Override 12 | public float cost() { 13 | // TODO Auto-generated method stub 14 | // getPrice() 自己的价格 15 | return super.getPrice() + obj.cost(); 16 | } 17 | 18 | @Override 19 | public String getDes() { 20 | // TODO Auto-generated method stub 21 | // obj.getDes() 输出被装饰者的信息 22 | return des + " " + getPrice() + " && " + obj.getDes(); 23 | } 24 | 25 | 26 | 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/javase/LRU.java: -------------------------------------------------------------------------------- 1 | package javase; 2 | 3 | import java.util.LinkedHashMap; 4 | import java.util.Map; 5 | import java.util.Map.Entry; 6 | 7 | import com.sun.jmx.snmp.SnmpTooBigException; 8 | 9 | /** 10 | * @author hsfxuebao 11 | * Created on 2020-12-05 12 | */ 13 | public class LRU extends LinkedHashMap { 14 | 15 | int size = 10000; 16 | Map keyMap = new LinkedHashMap(size, .75F, true){ 17 | 18 | @Override 19 | protected boolean removeEldestEntry(Entry eldest) { 20 | 21 | boolean toBig = size() > size; 22 | 23 | return toBig; 24 | } 25 | }; 26 | 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/jvm/agent/asm/TestAgent.java: -------------------------------------------------------------------------------- 1 | package jvm.agent.asm; 2 | 3 | import java.lang.instrument.Instrumentation; 4 | 5 | public class TestAgent { 6 | 7 | public static void agentmain(String args, Instrumentation inst) { 8 | //指定我们自己定义的Transformer,在其中利用Javassist做字节码替换 9 | inst.addTransformer(new TestTransformer(), true); 10 | try { 11 | //重定义类并载入新的字节码 12 | inst.retransformClasses(Base.class); 13 | System.out.println("Agent Load Done."); 14 | } catch (Exception e) { 15 | System.out.println("agent load failed!"); 16 | } 17 | } 18 | 19 | public static void main(String[] args) { 20 | 21 | } 22 | } -------------------------------------------------------------------------------- /src/main/java/jvm/command/jstat/GCTest.java: -------------------------------------------------------------------------------- 1 | package jvm.command.jstat; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | /** 7 | * -Xms60m -Xmx60m -XX:SurvivorRatio=8 8 | */ 9 | public class GCTest { 10 | public static void main(String[] args) { 11 | ArrayList list = new ArrayList<>(); 12 | 13 | for (int i = 0; i < 1000; i++) { 14 | byte[] arr = new byte[1024 * 100];//100KB 15 | list.add(arr); 16 | try { 17 | Thread.sleep(120); 18 | } catch (InterruptedException e) { 19 | e.printStackTrace(); 20 | } 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/algorithm/dynamic/N_01_N阶乘.java: -------------------------------------------------------------------------------- 1 | package algorithm.dynamic; 2 | 3 | /** 4 | * @author hsfxuebao 5 | * @date 2020/03/17 6 | * 7 | * n! 8 | */ 9 | public class N_01_N阶乘 { 10 | 11 | 12 | public static long getFactorial1(int n) { 13 | if (n == 1) { 14 | return 1L; 15 | } 16 | return (long) n * getFactorial1(n - 1); 17 | } 18 | 19 | public static long getFactorial2(int n) { 20 | long result = 1L; 21 | for (int i = 1; i <= n; i++) { 22 | result *= i; 23 | } 24 | return result; 25 | } 26 | 27 | public static void main(String[] args) { 28 | int n = 5; 29 | System.out.println(getFactorial1(n)); 30 | System.out.println(getFactorial2(n)); 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/designpattern/principle/singleresponsibility/SingleResponsibility1.java: -------------------------------------------------------------------------------- 1 | package designpattern.principle.singleresponsibility; 2 | 3 | public class SingleResponsibility1 { 4 | 5 | public static void main(String[] args) { 6 | // TODO Auto-generated method stub 7 | Vehicle vehicle = new Vehicle(); 8 | vehicle.run("Ħ�г�"); 9 | vehicle.run("����"); 10 | vehicle.run("�ɻ�"); 11 | } 12 | 13 | } 14 | 15 | // ��ͨ������ 16 | // ��ʽ1 17 | // 1. �ڷ�ʽ1 ��run�����У�Υ���˵�һְ��ԭ�� 18 | // 2. ����ķ����dz��ļ򵥣����ݽ�ͨ�������з�����ͬ���ֽ�ɲ�ͬ�༴�� 19 | class Vehicle { 20 | public void run(String vehicle) { 21 | System.out.println(vehicle + " �ڹ�·������...."); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/designpattern/responsibilitychain/CollegeApprover.java: -------------------------------------------------------------------------------- 1 | package designpattern.responsibilitychain; 2 | 3 | public class CollegeApprover extends Approver { 4 | 5 | public CollegeApprover(String name) { 6 | // TODO Auto-generated constructor stub 7 | super(name); 8 | } 9 | 10 | @Override 11 | public void processRequest(PurchaseRequest purchaseRequest) { 12 | // TODO Auto-generated method stub 13 | if(purchaseRequest.getPrice() < 5000 && purchaseRequest.getPrice() <= 10000) { 14 | System.out.println(" 请求编号 id= " + purchaseRequest.getId() + " 被 " + this.name + " 处理"); 15 | }else { 16 | approver.processRequest(purchaseRequest); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/javase/StreamTest.java: -------------------------------------------------------------------------------- 1 | package javase; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | 7 | /** 8 | * @author hsfxuebao 9 | * Created on 2021-03-10 10 | */ 11 | public class StreamTest { 12 | 13 | 14 | public static void main(String[] args) { 15 | 16 | // List list = new ArrayList<>(); 17 | // for (int i = 1; i <=10 ; i++) { 18 | // list.add(i); 19 | // } 20 | // 21 | // System.out.println("集合:" + list); 22 | // list.stream().skip(5).limit(12).forEach(System.out::println); 23 | Map map = new HashMap(); 24 | map.put("1", "1"); 25 | 26 | 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/designpattern/mediator/smarthouse/Alarm.java: -------------------------------------------------------------------------------- 1 | package designpattern.mediator.smarthouse; 2 | 3 | // 具体的同事类 4 | public class Alarm extends Colleague { 5 | 6 | public Alarm(Mediator mediator, String name) { 7 | super(mediator, name); 8 | // TODO Auto-generated constructor stub 9 | // 创建Alarm 对象,同事将自己放入 Mediator对象中 10 | mediator.Register(name, this); 11 | } 12 | 13 | public void SendAlarm(int stateChange) { 14 | SendMessage(stateChange); 15 | } 16 | 17 | @Override 18 | public void SendMessage(int stateChange) { 19 | // TODO Auto-generated method stub 20 | //调用中介者对象的 getMessage 21 | this.GetMediator().GetMessage(stateChange, this.name); 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/concurrent/juctools/collections/predecessor/SynList.java: -------------------------------------------------------------------------------- 1 | package concurrent.juctools.collections.predecessor; 2 | 3 | import java.util.ArrayList; 4 | import java.util.Collections; 5 | import java.util.HashMap; 6 | import java.util.List; 7 | import java.util.Map; 8 | 9 | /** 10 | * 描述: 演示Collections.synchronizedList(new ArrayList()) 11 | */ 12 | public class SynList { 13 | public static void main(String[] args) { 14 | List list = Collections.synchronizedList(new ArrayList()); 15 | list.add(5); 16 | System.out.println(list.get(0)); 17 | 18 | Map objectObjectMap = Collections.synchronizedMap(new HashMap<>()); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/ionio/bio/accept/BioServer.java: -------------------------------------------------------------------------------- 1 | package ionio.bio.accept; 2 | 3 | import java.io.IOException; 4 | import java.net.ServerSocket; 5 | import java.net.Socket; 6 | 7 | /** 8 | * @author hsfxuebao 9 | * Created on 2021-12-28 10 | */ 11 | public class BioServer { 12 | 13 | public static void main(String[] args) throws IOException { 14 | 15 | ServerSocket serverSocket = new ServerSocket(6380); 16 | 17 | while(true) 18 | { 19 | System.out.println("模拟RedisServer启动-----111 等待连接"); 20 | Socket socket = serverSocket.accept(); 21 | System.out.println("-----222 成功连接"); 22 | System.out.println(); 23 | } 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/concurrent/base/background/Create100Threads.java: -------------------------------------------------------------------------------- 1 | package concurrent.base.background; 2 | 3 | /** 4 | * 描述: 创建100个线程,用活动监视器的CPU栏目看Java线程数量的变化,10秒后线程消失了。 5 | */ 6 | public class Create100Threads { 7 | public static void main(String[] args) { 8 | for (int i = 0; i < 200; i++) { 9 | new Thread(new Runnable() { 10 | @Override 11 | public void run() { 12 | try { 13 | Thread.sleep(10000); 14 | } catch (InterruptedException e) { 15 | e.printStackTrace(); 16 | } 17 | } 18 | }).start(); 19 | } 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/designpattern/iterator/Client.java: -------------------------------------------------------------------------------- 1 | package designpattern.iterator; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | /** 7 | * 迭代器模式 8 | */ 9 | public class Client { 10 | 11 | public static void main(String[] args) { 12 | // TODO Auto-generated method stub 13 | // 创建学院 14 | List collegeList = new ArrayList(); 15 | 16 | ComputerCollege computerCollege = new ComputerCollege(); 17 | InfoCollege infoCollege = new InfoCollege(); 18 | 19 | collegeList.add(computerCollege); 20 | //collegeList.add(infoCollege); 21 | 22 | OutPutImpl outPutImpl = new OutPutImpl(collegeList); 23 | outPutImpl.printCollege(); 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/designpattern/responsibilitychain/ViceSchoolMasterApprover.java: -------------------------------------------------------------------------------- 1 | package designpattern.responsibilitychain; 2 | 3 | public class ViceSchoolMasterApprover extends Approver { 4 | 5 | public ViceSchoolMasterApprover(String name) { 6 | // TODO Auto-generated constructor stub 7 | super(name); 8 | } 9 | 10 | @Override 11 | public void processRequest(PurchaseRequest purchaseRequest) { 12 | // TODO Auto-generated method stub 13 | if(purchaseRequest.getPrice() < 10000 && purchaseRequest.getPrice() <= 30000) { 14 | System.out.println(" 请求编号 id= " + purchaseRequest.getId() + " 被" + this.name + " 处理"); 15 | }else { 16 | approver.processRequest(purchaseRequest); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/jvm/agent/asm/Attacher.java: -------------------------------------------------------------------------------- 1 | package jvm.agent.asm; 2 | 3 | import java.io.IOException; 4 | 5 | import com.sun.tools.attach.AgentInitializationException; 6 | import com.sun.tools.attach.AgentLoadException; 7 | import com.sun.tools.attach.AttachNotSupportedException; 8 | import com.sun.tools.attach.VirtualMachine; 9 | 10 | public class Attacher { 11 | 12 | public static void main(String[] args) throws AttachNotSupportedException, IOException, AgentLoadException, 13 | AgentInitializationException { 14 | // 传入目标 JVM pid 15 | VirtualMachine vm = VirtualMachine.attach("61576"); 16 | vm.loadAgent("/Users/hsfxuebao/IdeaProjects/java-study/out/testagent/testagent.jar"); 17 | } 18 | } -------------------------------------------------------------------------------- /src/main/java/designpattern/builder/improve/HouseDirector.java: -------------------------------------------------------------------------------- 1 | package designpattern.builder.improve; 2 | 3 | //ָ���ߣ�����ȥָ���������̣����ز�Ʒ 4 | public class HouseDirector { 5 | 6 | HouseBuilder houseBuilder = null; 7 | 8 | //构造器 houseBuilder 9 | public HouseDirector(HouseBuilder houseBuilder) { 10 | this.houseBuilder = houseBuilder; 11 | } 12 | 13 | //ͨsetter方法 14 | public void setHouseBuilder(HouseBuilder houseBuilder) { 15 | this.houseBuilder = houseBuilder; 16 | } 17 | 18 | // 如何处理房子的流程,交给指挥者 19 | public House constructHouse() { 20 | houseBuilder.buildBasic(); 21 | houseBuilder.buildWalls(); 22 | houseBuilder.roofed(); 23 | return houseBuilder.buildHouse(); 24 | } 25 | 26 | 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/concurrent/base/threadcoreknowledge/stopthreads/RunThrowException.java: -------------------------------------------------------------------------------- 1 | package concurrent.base.threadcoreknowledge.stopthreads; 2 | 3 | /** 4 | * 描述: run无法抛出checked Exception,只能用try/catch 5 | */ 6 | public class RunThrowException { 7 | 8 | public void aVoid() throws Exception { 9 | throw new Exception(); 10 | } 11 | 12 | public static void main(String[] args) { 13 | new Thread(new Runnable() { 14 | @Override 15 | public void run() { 16 | try { 17 | throw new Exception(); 18 | } catch (Exception e) { 19 | e.printStackTrace(); 20 | } 21 | } 22 | }); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/javase/User.java: -------------------------------------------------------------------------------- 1 | package javase; 2 | 3 | /** 4 | * @author hsfxuebao 5 | * Created on 2021-01-18 6 | */ 7 | public class User { 8 | 9 | private int number; 10 | private int age; 11 | 12 | 13 | public int getNumber() { 14 | return number; 15 | } 16 | 17 | public void setNumber(int number) { 18 | this.number = number; 19 | } 20 | 21 | public int getAge() { 22 | return age; 23 | } 24 | 25 | public void setAge(int age) { 26 | this.age = age; 27 | } 28 | 29 | @Override 30 | public String toString() { 31 | return "User{" + 32 | "number=" + number + 33 | ", age=" + age + 34 | '}'; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /src/main/java/concurrent/base/threadcoreknowledge/createthreads/wrongways/AnonymousInnerClassDemo.java: -------------------------------------------------------------------------------- 1 | package concurrent.base.threadcoreknowledge.createthreads.wrongways; 2 | 3 | /** 4 | * 描述: 匿名内部类的方式 5 | */ 6 | public class AnonymousInnerClassDemo { 7 | 8 | public static void main(String[] args) { 9 | new Thread(){ 10 | @Override 11 | public void run() { 12 | System.out.println(Thread.currentThread().getName()); 13 | } 14 | }.start(); 15 | new Thread(new Runnable() { 16 | @Override 17 | public void run() { 18 | System.out.println(Thread.currentThread().getName()); 19 | } 20 | }).start(); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/designpattern/prototype/deepclone/DeepCloneableTarget.java: -------------------------------------------------------------------------------- 1 | package designpattern.prototype.deepclone; 2 | 3 | import java.io.Serializable; 4 | 5 | public class DeepCloneableTarget implements Serializable, Cloneable { 6 | 7 | /** 8 | * 9 | */ 10 | private static final long serialVersionUID = 1L; 11 | 12 | private String cloneName; 13 | 14 | private String cloneClass; 15 | 16 | //构造器 17 | public DeepCloneableTarget(String cloneName, String cloneClass) { 18 | this.cloneName = cloneName; 19 | this.cloneClass = cloneClass; 20 | } 21 | 22 | //因为该类的属性都是String,所以使用默认的clone完成即可 23 | @Override 24 | protected Object clone() throws CloneNotSupportedException { 25 | return super.clone(); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/designpattern/adapter/objectadapter/VoltageAdapter.java: -------------------------------------------------------------------------------- 1 | package designpattern.adapter.objectadapter; 2 | 3 | //适配器类 4 | public class VoltageAdapter implements IVoltage5V { 5 | 6 | private Voltage220V voltage220V; // 关联关系-聚合 7 | 8 | 9 | //ͨ构造器 10 | public VoltageAdapter(Voltage220V voltage220v) { 11 | 12 | this.voltage220V = voltage220v; 13 | } 14 | 15 | 16 | 17 | @Override 18 | public int output5V() { 19 | 20 | int dst = 0; 21 | if(null != voltage220V) { 22 | int src = voltage220V.output220V();//获取220V的电压 23 | System.out.println("使用对象适配器 进行适配"); 24 | dst = src / 44; 25 | System.out.println("适配完成 输出的电压为=" + dst); 26 | } 27 | 28 | return dst; 29 | 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/designpattern/interpreter/SymbolExpression.java: -------------------------------------------------------------------------------- 1 | package designpattern.interpreter; 2 | 3 | import java.util.HashMap; 4 | 5 | /** 6 | * 抽象类运算符号解析器 这里 每个运算符号 都只和自己左右两个数字有关系 7 | * 但左右两个数字有可能也是一个解析的结果 无论何种类型 都是Expression 类的实现类 8 | * 9 | * 10 | */ 11 | public class SymbolExpression extends Expression { 12 | 13 | protected Expression left; 14 | protected Expression right; 15 | 16 | public SymbolExpression(Expression left, Expression right) { 17 | this.left = left; 18 | this.right = right; 19 | } 20 | 21 | // 因为 SymbolExpression 是让其子类来实现 因此 interpreter 是一个默认实现 22 | @Override 23 | public int interpreter(HashMap var) { 24 | // TODO Auto-generated method stub 25 | return 0; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/designpattern/mediator/smarthouse/ClientTest.java: -------------------------------------------------------------------------------- 1 | package designpattern.mediator.smarthouse; 2 | 3 | /** 4 | * 中介者模式 5 | */ 6 | public class ClientTest { 7 | 8 | public static void main(String[] args) { 9 | // 创建中介者对象 10 | Mediator mediator = new ConcreteMediator(); 11 | 12 | Alarm alarm = new Alarm(mediator, "alarm"); 13 | 14 | // 创建CoffeeMachine对象 并加入到 CoffeeMachine中hashMap中 15 | CoffeeMachine coffeeMachine = new CoffeeMachine(mediator, 16 | "coffeeMachine"); 17 | 18 | Curtains curtains = new Curtains(mediator, "curtains"); 19 | TV tV = new TV(mediator, "TV"); 20 | 21 | // 让闹钟发出消息 22 | alarm.SendAlarm(0); 23 | coffeeMachine.FinishCoffee(); 24 | alarm.SendAlarm(1); 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/concurrent/juctools/collections/predecessor/MapDemo.java: -------------------------------------------------------------------------------- 1 | package concurrent.juctools.collections.predecessor; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | /** 7 | * 描述: 演示Map的基本用法 8 | */ 9 | public class MapDemo { 10 | public static void main(String[] args) { 11 | Map map = new HashMap<>(); 12 | System.out.println(map.isEmpty()); 13 | map.put("东哥", 38); 14 | map.put("西哥", 28); 15 | System.out.println(map.keySet()); 16 | System.out.println(map.get("西哥")); 17 | System.out.println(map.size()); 18 | System.out.println(map.containsKey("东哥")); 19 | map.remove("东哥"); 20 | System.out.println(map.containsKey("东哥")); 21 | 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/designpattern/observer/improve/CurrentConditions.java: -------------------------------------------------------------------------------- 1 | package designpattern.observer.improve; 2 | 3 | public class CurrentConditions implements Observer { 4 | 5 | // 温度 气压 湿度 6 | private float temperature; 7 | private float pressure; 8 | private float humidity; 9 | 10 | public void update(float temperature, float pressure, float humidity) { 11 | this.temperature = temperature; 12 | this.pressure = pressure; 13 | this.humidity = humidity; 14 | display(); 15 | } 16 | 17 | public void display() { 18 | System.out.println("***Today mTemperature: " + temperature + "***"); 19 | System.out.println("***Today mPressure: " + pressure + "***"); 20 | System.out.println("***Today mHumidity: " + humidity + "***"); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/concurrent/juctools/flowcontrol/locksupport/LockSupportDemo.java: -------------------------------------------------------------------------------- 1 | package concurrent.juctools.flowcontrol.locksupport; 2 | 3 | import java.util.concurrent.locks.LockSupport; 4 | 5 | public class LockSupportDemo { 6 | public static void main(String[] args) { 7 | Thread thread = new Thread(() -> { 8 | LockSupport.park(); 9 | System.out.println(Thread.currentThread().getName() + "被唤醒"); 10 | }); 11 | thread.start(); 12 | try { 13 | System.out.println("park..."); 14 | Thread.sleep(3000); 15 | } catch (InterruptedException e) { 16 | e.printStackTrace(); 17 | } 18 | LockSupport.unpark(thread); 19 | System.out.println("thread end"); 20 | } 21 | } -------------------------------------------------------------------------------- /src/main/java/designpattern/builder/improve/Client.java: -------------------------------------------------------------------------------- 1 | package designpattern.builder.improve; 2 | 3 | public class Client { 4 | public static void main(String[] args) { 5 | 6 | //盖普通房子 7 | CommonHouse commonHouse = new CommonHouse(); 8 | // 准备创建房子的指挥者 9 | HouseDirector houseDirector = new HouseDirector(commonHouse); 10 | 11 | //完成盖房子,返回产品,房子 12 | House house = houseDirector.constructHouse(); 13 | 14 | //System.out.println("输出流程"); 15 | 16 | System.out.println("--------------------------"); 17 | //盖高楼 18 | HighBuilding highBuilding = new HighBuilding(); 19 | //重置建造者 20 | houseDirector.setHouseBuilder(highBuilding); 21 | //完成盖高楼,返回产品 22 | houseDirector.constructHouse(); 23 | 24 | 25 | 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/jvm/gclog/GCLogTest.java: -------------------------------------------------------------------------------- 1 | package jvm.gclog; 2 | 3 | import java.util.ArrayList; 4 | 5 | /** 6 | * 测试生成详细的日志文件 7 | * 8 | * -Xms60m -Xmx60m -XX:SurvivorRatio=8 -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -XX:+PrintHeapAtGC 9 | * 10 | */ 11 | public class GCLogTest { 12 | public static void main(String[] args) { 13 | ArrayList list = new ArrayList<>(); 14 | 15 | for (int i = 0; i < 5000; i++) { 16 | byte[] arr = new byte[1024 * 50];//50KB 17 | list.add(arr); 18 | try { 19 | Thread.sleep(30); 20 | } catch (InterruptedException e) { 21 | e.printStackTrace(); 22 | } 23 | } 24 | 25 | } 26 | } -------------------------------------------------------------------------------- /src/main/java/redis6/distributelock/redlock/config/RedisProperties.java: -------------------------------------------------------------------------------- 1 | package redis6.distributelock.redlock.config; 2 | 3 | import org.springframework.boot.context.properties.ConfigurationProperties; 4 | 5 | import lombok.Data; 6 | 7 | @ConfigurationProperties(prefix = "spring.redis", ignoreUnknownFields = false) 8 | @Data 9 | public class RedisProperties { 10 | 11 | private int database; 12 | 13 | /** 14 | * 等待节点回复命令的时间。该时间从命令发送成功时开始计时 15 | */ 16 | private int timeout; 17 | 18 | private String password; 19 | 20 | private String mode; 21 | 22 | /** 23 | * 池配置 24 | */ 25 | private RedisPoolProperties pool; 26 | 27 | /** 28 | * 单机信息配置 29 | */ 30 | private RedisSingleProperties single; 31 | 32 | 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/designpattern/mediator/smarthouse/TV.java: -------------------------------------------------------------------------------- 1 | package designpattern.mediator.smarthouse; 2 | 3 | public class TV extends Colleague { 4 | 5 | public TV(Mediator mediator, String name) { 6 | super(mediator, name); 7 | // TODO Auto-generated constructor stub 8 | mediator.Register(name, this); 9 | } 10 | 11 | @Override 12 | public void SendMessage(int stateChange) { 13 | // TODO Auto-generated method stub 14 | this.GetMediator().GetMessage(stateChange, this.name); 15 | } 16 | 17 | public void StartTv() { 18 | // TODO Auto-generated method stub 19 | System.out.println("It's time to StartTv!"); 20 | } 21 | 22 | public void StopTv() { 23 | // TODO Auto-generated method stub 24 | System.out.println("StopTv!"); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/concurrent/juctools/future/RunnableCantThrowsException.java: -------------------------------------------------------------------------------- 1 | package concurrent.juctools.future; 2 | 3 | import java.util.concurrent.Callable; 4 | import java.util.concurrent.Future; 5 | 6 | /** 7 | * 描述: 在run方法中无法抛出checked Exception 8 | */ 9 | public class RunnableCantThrowsException { 10 | 11 | public void ddd() throws Exception { 12 | } 13 | 14 | public static void main(String[] args) { 15 | Runnable runnable = new Runnable() { 16 | @Override 17 | public void run() { 18 | try { 19 | throw new Exception(); 20 | } catch (Exception e) { 21 | e.printStackTrace(); 22 | } 23 | } 24 | }; 25 | 26 | 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/designpattern/factory/absfactory/pizzastore/order/LDFactory.java: -------------------------------------------------------------------------------- 1 | package designpattern.factory.absfactory.pizzastore.order; 2 | 3 | 4 | import designpattern.factory.absfactory.pizzastore.pizza.LDCheesePizza; 5 | import designpattern.factory.absfactory.pizzastore.pizza.LDPepperPizza; 6 | import designpattern.factory.absfactory.pizzastore.pizza.Pizza; 7 | 8 | public class LDFactory implements AbsFactory { 9 | 10 | @Override 11 | public Pizza createPizza(String orderType) { 12 | System.out.println("抽象工厂模式"); 13 | Pizza pizza = null; 14 | if (orderType.equals("cheese")) { 15 | pizza = new LDCheesePizza(); 16 | } else if (orderType.equals("pepper")) { 17 | pizza = new LDPepperPizza(); 18 | } 19 | return pizza; 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/designpattern/observer/improve/BaiduSite.java: -------------------------------------------------------------------------------- 1 | package designpattern.observer.improve; 2 | 3 | public class BaiduSite implements Observer { 4 | 5 | // 温度 气压 湿度 6 | private float temperature; 7 | private float pressure; 8 | private float humidity; 9 | 10 | public void update(float temperature, float pressure, float humidity) { 11 | this.temperature = temperature; 12 | this.pressure = pressure; 13 | this.humidity = humidity; 14 | display(); 15 | } 16 | 17 | // 显示 18 | public void display() { 19 | System.out.println("===百度网站===="); 20 | System.out.println("**百度网站温度 : " + temperature + "***"); 21 | System.out.println("**百度网站 气压 " + pressure + "***"); 22 | System.out.println("**百度网站 湿度 " + humidity + "***"); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/designpattern/interpreter/application/interpretetTest.java: -------------------------------------------------------------------------------- 1 | package designpattern.interpreter.application; 2 | 3 | /** 4 | * @author hsfxuebao 5 | * Created on 2021-08-04 6 | */ 7 | public class interpretetTest { 8 | 9 | 10 | // Spring 11 | public static void main(String[] args) { 12 | // TODO Auto-generated method stub 13 | //创建一个 Parser 对象 14 | // SpelExpressionParser parser = new SpelExpressionParser(); 15 | // // 16 | // //通过 Parser 对象 获取到一个Expression对象 17 | // //会根据不同的 Parser 对象 ,返回不同的 Expression对象 18 | // Expression expression = parser.parseExpression("10 * (2 + 1) * 1 + 66"); //96 19 | // int result = (Integer) expression.getValue(); 20 | // System.out.println(result); 21 | 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/designpattern/state/money/StateEnum.java: -------------------------------------------------------------------------------- 1 | package designpattern.state.money; 2 | 3 | /** 4 | * 状态枚举类 5 | */ 6 | public enum StateEnum { 7 | 8 | // 订单生成 9 | GENERATE(1, "GENERATE"), 10 | 11 | // 已审核 12 | REVIEWED(2, "REVIEWED"), 13 | 14 | // 已发布 15 | PUBLISHED(3, "PUBLISHED"), 16 | 17 | // 待付款 18 | NOT_PAY(4, "NOT_PAY"), 19 | 20 | // 已付款 21 | PAID(5, "PAID"), 22 | 23 | // 已完结 24 | FEED_BACKED(6, "FEED_BACKED"); 25 | 26 | private int key; 27 | private String value; 28 | 29 | StateEnum(int key, String value) { 30 | this.key = key; 31 | this.value = value; 32 | } 33 | public int getKey() {return key;} 34 | public String getValue() {return value;} 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/designpattern/composite/Department.java: -------------------------------------------------------------------------------- 1 | package designpattern.composite; 2 | 3 | public class Department extends OrganizationComponent { 4 | 5 | // 没有集合 6 | 7 | public Department(String name, String des) { 8 | super(name, des); 9 | // TODO Auto-generated constructor stub 10 | } 11 | 12 | 13 | //add , remove 就不用写了,因为他就是叶子节点 14 | 15 | @Override 16 | public String getName() { 17 | // TODO Auto-generated method stub 18 | return super.getName(); 19 | } 20 | 21 | @Override 22 | public String getDes() { 23 | // TODO Auto-generated method stub 24 | return super.getDes(); 25 | } 26 | 27 | @Override 28 | protected void print() { 29 | // TODO Auto-generated method stub 30 | System.out.println(getName()); 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/jvm/agent/asm/Base.java: -------------------------------------------------------------------------------- 1 | package jvm.agent.asm; 2 | 3 | import java.lang.management.ManagementFactory; 4 | 5 | /** 6 | * @author hsfxuebao 7 | * Created on 2021-03-24 8 | */ 9 | public class Base { 10 | 11 | 12 | public static void process(){ 13 | System.out.println("process"); 14 | } 15 | 16 | 17 | public static void main(String[] args) { 18 | String name = ManagementFactory.getRuntimeMXBean().getName(); 19 | String s = name.split("@")[0]; 20 | //打印当前Pid 21 | System.out.println("pid:"+s); 22 | while (true) { 23 | try { 24 | Thread.sleep(5000L); 25 | } catch (Exception e) { 26 | break; 27 | } 28 | process(); 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/concurrent/juctools/immutable/TestFinal.java: -------------------------------------------------------------------------------- 1 | package concurrent.juctools.immutable; 2 | 3 | /** 4 | * 描述: 测试final能否被修改 5 | */ 6 | public class TestFinal { 7 | 8 | String test; 9 | 10 | public static void main(String[] args) { 11 | final Person person = new Person(); 12 | person.testFinal.test = "13g"; 13 | System.out.println(person.testFinal.test); 14 | person.testFinal.test = "15g"; 15 | System.out.println(person.testFinal.test); 16 | 17 | // String abc = "abc"; 18 | // System.out.println(abc.substring(1, 2)); 19 | // System.out.println(abc); 20 | // person.bag = "book"; 21 | // person = new Person(); 22 | // int age = person.age; 23 | // String name = person.name; 24 | 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/designpattern/factory/factorymethod/pizzastore/order/BJOrderPizza.java: -------------------------------------------------------------------------------- 1 | package designpattern.factory.factorymethod.pizzastore.order; 2 | 3 | 4 | import designpattern.factory.factorymethod.pizzastore.pizza.BJCheesePizza; 5 | import designpattern.factory.factorymethod.pizzastore.pizza.BJPepperPizza; 6 | import designpattern.factory.factorymethod.pizzastore.pizza.Pizza; 7 | 8 | public class BJOrderPizza extends OrderPizza { 9 | 10 | 11 | @Override 12 | Pizza createPizza(String orderType) { 13 | 14 | Pizza pizza = null; 15 | if(orderType.equals("cheese")) { 16 | pizza = new BJCheesePizza(); 17 | } else if (orderType.equals("pepper")) { 18 | pizza = new BJPepperPizza(); 19 | } 20 | // TODO Auto-generated method stub 21 | return pizza; 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/designpattern/factory/factorymethod/pizzastore/order/LDOrderPizza.java: -------------------------------------------------------------------------------- 1 | package designpattern.factory.factorymethod.pizzastore.order; 2 | 3 | 4 | import designpattern.factory.factorymethod.pizzastore.pizza.LDCheesePizza; 5 | import designpattern.factory.factorymethod.pizzastore.pizza.LDPepperPizza; 6 | import designpattern.factory.factorymethod.pizzastore.pizza.Pizza; 7 | 8 | public class LDOrderPizza extends OrderPizza { 9 | 10 | 11 | @Override 12 | Pizza createPizza(String orderType) { 13 | 14 | Pizza pizza = null; 15 | if(orderType.equals("cheese")) { 16 | pizza = new LDCheesePizza(); 17 | } else if (orderType.equals("pepper")) { 18 | pizza = new LDPepperPizza(); 19 | } 20 | // TODO Auto-generated method stub 21 | return pizza; 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/designpattern/state/DispenseOutState.java: -------------------------------------------------------------------------------- 1 | package designpattern.state; 2 | 3 | /** 4 | * 奖品发放完毕状态 5 | * 说明 当我们 activity 变成 DispenseOutState 抽奖活动结束 6 | * 7 | */ 8 | public class DispenseOutState extends State { 9 | 10 | // 传入活动引入 11 | RaffleActivity activity; 12 | 13 | public DispenseOutState(RaffleActivity activity) { 14 | this.activity = activity; 15 | } 16 | @Override 17 | public void deductMoney() { 18 | System.out.println("奖品发完了,请下次再参加"); 19 | } 20 | 21 | @Override 22 | public boolean raffle() { 23 | System.out.println("奖品发放完毕了,请下次参加"); 24 | return false; 25 | } 26 | 27 | @Override 28 | public void dispensePrize() { 29 | System.out.println("奖品发放完毕了,请下次参加"); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/jvm/tools/mat/OOMTest.java: -------------------------------------------------------------------------------- 1 | package jvm.tools.mat; 2 | 3 | import java.util.ArrayList; 4 | import java.util.Random; 5 | 6 | /** 7 | * -Xms600m -Xmx600m -XX:SurvivorRatio=8 8 | */ 9 | public class OOMTest { 10 | public static void main(String[] args) { 11 | ArrayList list = new ArrayList<>(); 12 | while(true){ 13 | try { 14 | Thread.sleep(5); 15 | } catch (InterruptedException e) { 16 | e.printStackTrace(); 17 | } 18 | list.add(new Picture(new Random().nextInt(100 * 50))); 19 | } 20 | } 21 | } 22 | 23 | class Picture{ 24 | private byte[] pixels; 25 | 26 | public Picture(int length) { 27 | this.pixels = new byte[length]; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/jvm/command/jstack/AllStackTrace.java: -------------------------------------------------------------------------------- 1 | package jvm.command.jstack; 2 | 3 | import java.util.Map; 4 | import java.util.Set; 5 | 6 | /** 7 | */ 8 | public class AllStackTrace { 9 | public static void main(String[] args) { 10 | Map all = Thread.getAllStackTraces(); 11 | Set> entries = all.entrySet(); 12 | for(Map.Entry en : entries){ 13 | Thread t = en.getKey(); 14 | StackTraceElement[] v = en.getValue(); 15 | System.out.println("【Thread name is :" + t.getName() + "】"); 16 | for(StackTraceElement s : v){ 17 | System.out.println("\t" + s.toString()); 18 | } 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/concurrent/base/threadcoreknowledge/uncaughtexception/MyUncaughtExceptionHandler.java: -------------------------------------------------------------------------------- 1 | package concurrent.base.threadcoreknowledge.uncaughtexception; 2 | 3 | import java.util.logging.Level; 4 | import java.util.logging.Logger; 5 | 6 | /** 7 | * 描述: 自己的MyUncaughtExceptionHanlder 8 | */ 9 | public class MyUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler { 10 | 11 | private String name; 12 | 13 | public MyUncaughtExceptionHandler(String name) { 14 | this.name = name; 15 | } 16 | 17 | @Override 18 | public void uncaughtException(Thread t, Throwable e) { 19 | Logger logger = Logger.getAnonymousLogger(); 20 | logger.log(Level.WARNING, "线程异常,终止啦" + t.getName()); 21 | System.out.println(name + "捕获了异常" + t.getName() + "异常"); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/designpattern/factory/absfactory/pizzastore/order/BJFactory.java: -------------------------------------------------------------------------------- 1 | package designpattern.factory.absfactory.pizzastore.order; 2 | 3 | 4 | import designpattern.factory.absfactory.pizzastore.pizza.BJCheesePizza; 5 | import designpattern.factory.absfactory.pizzastore.pizza.BJPepperPizza; 6 | import designpattern.factory.absfactory.pizzastore.pizza.Pizza; 7 | 8 | public class BJFactory implements AbsFactory { 9 | 10 | @Override 11 | public Pizza createPizza(String orderType) { 12 | System.out.println("抽象工厂模式"); 13 | // TODO Auto-generated method stub 14 | Pizza pizza = null; 15 | if(orderType.equals("cheese")) { 16 | pizza = new BJCheesePizza(); 17 | } else if (orderType.equals("pepper")){ 18 | pizza = new BJPepperPizza(); 19 | } 20 | return pizza; 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/designpattern/mediator/smarthouse/CoffeeMachine.java: -------------------------------------------------------------------------------- 1 | package designpattern.mediator.smarthouse; 2 | 3 | public class CoffeeMachine extends Colleague { 4 | 5 | public CoffeeMachine(Mediator mediator, String name) { 6 | super(mediator, name); 7 | // TODO Auto-generated constructor stub 8 | mediator.Register(name, this); 9 | } 10 | 11 | @Override 12 | public void SendMessage(int stateChange) { 13 | // TODO Auto-generated method stub 14 | this.GetMediator().GetMessage(stateChange, this.name); 15 | } 16 | 17 | public void StartCoffee() { 18 | System.out.println("It's time to startcoffee!"); 19 | } 20 | 21 | public void FinishCoffee() { 22 | 23 | System.out.println("After 5 minutes!"); 24 | System.out.println("Coffee is ok!"); 25 | SendMessage(0); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/designpattern/visitor/Client.java: -------------------------------------------------------------------------------- 1 | package designpattern.visitor; 2 | 3 | /** 4 | * 访问者模式 5 | */ 6 | public class Client { 7 | 8 | public static void main(String[] args) { 9 | // TODO Auto-generated method stub 10 | //ObjectStructure 11 | ObjectStructure objectStructure = new ObjectStructure(); 12 | 13 | objectStructure.attach(new Man()); 14 | objectStructure.attach(new Woman()); 15 | 16 | 17 | // 成功 18 | Success success = new Success(); 19 | objectStructure.display(success); 20 | 21 | System.out.println("==============="); 22 | Fail fail = new Fail(); 23 | objectStructure.display(fail); 24 | 25 | System.out.println("=======给的待定评价========"); 26 | 27 | Wait wait = new Wait(); 28 | objectStructure.display(wait); 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/algorithm/tu/N_01_BFS.java: -------------------------------------------------------------------------------- 1 | package algorithm.tu; 2 | 3 | import java.util.HashSet; 4 | import java.util.LinkedList; 5 | import java.util.Queue; 6 | 7 | /** 8 | * 宽度优先遍历 1,利用队列实现 9 | * 2,从源节点开始依次按照宽 度进队列,然后弹出 10 | * 3,每弹出一个点,把该节点所有没有进 过队列的邻接点放入队 列 11 | * 4,直到队列变空 12 | */ 13 | public class N_01_BFS { 14 | 15 | public static void bfs(Node node) { 16 | if (node == null) { 17 | return; 18 | } 19 | Queue queue = new LinkedList<>(); 20 | HashSet map = new HashSet<>(); 21 | queue.add(node); 22 | map.add(node); 23 | while (!queue.isEmpty()) { 24 | Node cur = queue.poll(); 25 | System.out.println(cur.value); 26 | for (Node next : cur.nexts) { 27 | if (!map.contains(next)) { 28 | map.add(next); 29 | queue.add(next); 30 | } 31 | } 32 | } 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/jvm/tools/jprofiler/OOMTest.java: -------------------------------------------------------------------------------- 1 | package jvm.tools.jprofiler; 2 | 3 | import java.util.ArrayList; 4 | import java.util.Random; 5 | 6 | /** 7 | * -Xms600m -Xmx600m -XX:SurvivorRatio=8 8 | */ 9 | public class OOMTest { 10 | public static void main(String[] args) { 11 | ArrayList list = new ArrayList<>(); 12 | while(true){ 13 | try { 14 | Thread.sleep(5); 15 | } catch (InterruptedException e) { 16 | e.printStackTrace(); 17 | } 18 | list.add(new Picture(new Random().nextInt(100 * 50))); 19 | } 20 | } 21 | } 22 | 23 | class Picture{ 24 | private byte[] pixels; 25 | 26 | public Picture(int length) { 27 | this.pixels = new byte[length]; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/designpattern/state/NoRaffleState.java: -------------------------------------------------------------------------------- 1 | package designpattern.state; 2 | 3 | /** 4 | * 不能抽奖状态 5 | * 6 | */ 7 | public class NoRaffleState extends State { 8 | 9 | // 初始化传入 扣除后改变成可以抽奖的状态 10 | RaffleActivity activity; 11 | 12 | public NoRaffleState(RaffleActivity activity) { 13 | this.activity = activity; 14 | } 15 | 16 | // 17 | @Override 18 | public void deductMoney() { 19 | System.out.println("扣除50积分 可以抽奖了"); 20 | activity.setState(activity.getCanRaffleState()); 21 | } 22 | 23 | @Override 24 | public boolean raffle() { 25 | System.out.println("不能抽奖"); 26 | return false; 27 | } 28 | 29 | @Override 30 | public void dispensePrize() { 31 | System.out.println("不能发放奖品"); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/designpattern/template/improve/SoyaMilk.java: -------------------------------------------------------------------------------- 1 | package designpattern.template.improve; 2 | 3 | //抽象类 4 | public abstract class SoyaMilk { 5 | 6 | //模板方法 make , 可以做成 final , 不让子类进行覆盖 7 | final void make() { 8 | 9 | select(); 10 | if(customerWantCondiments()) { 11 | addCondiments(); 12 | } 13 | soak(); 14 | beat(); 15 | 16 | } 17 | 18 | //选材料 19 | void select() { 20 | System.out.println("第一步 选取好的黄豆 "); 21 | } 22 | 23 | //添加不同的配料 抽象方法,子类去实现 24 | abstract void addCondiments(); 25 | 26 | //浸泡 27 | void soak() { 28 | System.out.println("第三步 黄豆和材料需要浸泡3小时 "); 29 | } 30 | 31 | void beat() { 32 | System.out.println("第4步 黄豆和配料放入豆浆机打碎 "); 33 | } 34 | 35 | 36 | //钩子方法 决定是否需要添加配料 37 | boolean customerWantCondiments() { 38 | return true; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/designpattern/observer/CurrentConditions.java: -------------------------------------------------------------------------------- 1 | package designpattern.observer; 2 | 3 | /** 4 | * 显示当前天气情况 可以理解是气象站自己的网站 5 | * 6 | */ 7 | public class CurrentConditions { 8 | // 温度 气压 湿度 9 | private float temperature; 10 | private float pressure; 11 | private float humidity; 12 | 13 | // 更新天气情况 WeatherData 来调用 推送模式 14 | public void update(float temperature, float pressure, float humidity) { 15 | this.temperature = temperature; 16 | this.pressure = pressure; 17 | this.humidity = humidity; 18 | display(); 19 | } 20 | 21 | // 显示 22 | public void display() { 23 | System.out.println("***Today mTemperature: " + temperature + "***"); 24 | System.out.println("***Today mPressure: " + pressure + "***"); 25 | System.out.println("***Today mHumidity: " + humidity + "***"); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/designpattern/factory/application/FactoryJdk.java: -------------------------------------------------------------------------------- 1 | package designpattern.factory.application; 2 | 3 | import java.util.Calendar; 4 | 5 | /** 6 | * @author hsfxuebao 7 | * Created on 2021-07-28 8 | */ 9 | public class FactoryJdk { 10 | 11 | 12 | public static void main(String[] args) { 13 | 14 | // getInstance是Clendar的静态方法 15 | Calendar cal = Calendar.getInstance(); 16 | // 注意月份是从0开始的,所以月份要加+1 17 | System.out.println("年:" + cal.get(Calendar.YEAR)); 18 | System.out.println("月:" + (cal.get(Calendar.MONTH) + 1)); 19 | System.out.println("日:" + cal.get(Calendar.DAY_OF_MONTH)); 20 | System.out.println("时:" + cal.get(Calendar.HOUR_OF_DAY)); 21 | System.out.println("分:" + cal.get(Calendar.MINUTE)); 22 | System.out.println("秒:" + cal.get(Calendar.SECOND)); 23 | 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/algorithm/tu/N_02_DFS.java: -------------------------------------------------------------------------------- 1 | package algorithm.tu; 2 | 3 | import java.util.HashSet; 4 | import java.util.Stack; 5 | 6 | /** 7 | * 广度优先遍历 1,利用栈实现 8 | * 2,从源节点开始把节点按照深 度放入栈,然后弹出 9 | * 3,每弹出一个点,把该节点下一个没有 进过栈的邻接点放入栈 10 | * 4,直到栈变空 11 | */ 12 | public class N_02_DFS { 13 | 14 | public static void dfs(Node node) { 15 | if (node == null) { 16 | return; 17 | } 18 | Stack stack = new Stack<>(); 19 | HashSet set = new HashSet<>(); 20 | stack.add(node); 21 | set.add(node); 22 | System.out.println(node.value); 23 | while (!stack.isEmpty()) { 24 | Node cur = stack.pop(); 25 | for (Node next : cur.nexts) { 26 | if (!set.contains(next)) { 27 | stack.push(cur); 28 | stack.push(next); 29 | set.add(next); 30 | System.out.println(next.value); 31 | break; 32 | } 33 | } 34 | } 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/concurrent/juctools/lock/reentrantlock/RecursionDemo.java: -------------------------------------------------------------------------------- 1 | package concurrent.juctools.lock.reentrantlock; 2 | 3 | import java.util.concurrent.locks.ReentrantLock; 4 | 5 | /** 6 | * 描述: TODO 7 | */ 8 | public class RecursionDemo { 9 | 10 | private static ReentrantLock lock = new ReentrantLock(); 11 | 12 | private static void accessResource() { 13 | lock.lock(); 14 | try { 15 | System.out.println("已经对资源进行了处理"); 16 | if (lock.getHoldCount()<5) { 17 | System.out.println(lock.getHoldCount()); 18 | accessResource(); 19 | System.out.println(lock.getHoldCount()); 20 | } 21 | } finally { 22 | lock.unlock(); 23 | } 24 | } 25 | public static void main(String[] args) { 26 | accessResource(); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/algorithm/array/L_面1617_连续数列.java: -------------------------------------------------------------------------------- 1 | package algorithm.array; 2 | 3 | /** 4 | * @author hsfxuebao 5 | * @date 2020/03/28 6 | * 给定一个整数数组(有正数有负数),找出总和最大的连续数列,并返回总和。 7 | * 8 | * 示例: 9 | * 10 | * 输入: [-2,1,-3,4,-1,2,1,-5,4] 11 | * 输出: 6 12 | * 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 13 | * 14 | * 来源:力扣(LeetCode) 15 | * 链接:https://leetcode-cn.com/problems/contiguous-sequence-lcci 16 | * 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 17 | */ 18 | public class L_面1617_连续数列 { 19 | 20 | public static Integer maxSubArray(int[] nums) { 21 | int res=nums[0]; 22 | for(int i=1;i 2 + x * y, 1); 15 | ExecutorService executor = Executors.newFixedThreadPool(8); 16 | IntStream.range(1, 10).forEach(i -> executor.submit(() -> accumulator.accumulate(i))); 17 | 18 | executor.shutdown(); 19 | while (!executor.isTerminated()) { 20 | 21 | } 22 | System.out.println(accumulator.getThenReset()); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/concurrent/juctools/threadpool/FixedThreadPoolOOM.java: -------------------------------------------------------------------------------- 1 | package concurrent.juctools.threadpool; 2 | 3 | import java.util.concurrent.ExecutorService; 4 | import java.util.concurrent.Executors; 5 | 6 | /** 7 | * 描述: 演示newFixedThreadPool出错的情况 8 | */ 9 | public class FixedThreadPoolOOM { 10 | 11 | private static ExecutorService executorService = Executors.newFixedThreadPool(1); 12 | public static void main(String[] args) { 13 | for (int i = 0; i < Integer.MAX_VALUE; i++) { 14 | executorService.execute(new SubThread()); 15 | } 16 | } 17 | 18 | } 19 | 20 | class SubThread implements Runnable { 21 | 22 | 23 | @Override 24 | public void run() { 25 | try { 26 | Thread.sleep(1000000000); 27 | } catch (InterruptedException e) { 28 | e.printStackTrace(); 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/algorithm/string/L_面0104_回文序列.java: -------------------------------------------------------------------------------- 1 | package algorithm.string; 2 | 3 | import java.util.HashSet; 4 | import java.util.Set; 5 | 6 | /** 7 | * @author hsfxuebao 8 | * @date 2020/03/29 9 | * 10 | * 给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。 11 | * 12 | * 回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。 13 | * 14 | * 回文串不一定是字典当中的单词。 15 | * 16 | *   17 | * 18 | * 示例1: 19 | * 20 | * 输入:"tactcoa" 21 | * 输出:true(排列有"tacocat"、"atcocta",等等) 22 | * 23 | * 来源:力扣(LeetCode) 24 | * 链接:https://leetcode-cn.com/problems/palindrome-permutation-lcci 25 | * 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 26 | */ 27 | public class L_面0104_回文序列 { 28 | 29 | public boolean canPermutePalindrome(String s) { 30 | Set set = new HashSet<>(); 31 | for (char c : s.toCharArray()) { 32 | if (!set.add(c)) { 33 | set.remove(c); 34 | } 35 | } 36 | return set.size() <= 1; 37 | } 38 | 39 | 40 | 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/algorithm/tree/N_05_折纸问题.java: -------------------------------------------------------------------------------- 1 | package algorithm.tree; 2 | 3 | /** 4 | * @author hsfxuebao 5 | * @date 2020/03/17 6 | */ 7 | 8 | /** 9 | * 折纸问题 10 | * 【题目】 请把一段纸条竖着放在桌子上,然后从纸条的下边向 上方对折1次,压出折痕后展开。此时 折痕是凹下去的, 11 | * 即折痕 突起的方向指向纸条的背面。如果从纸条的下边向上方连续对折 2 次,压出折痕后展开,此时有三条折痕,从上到下依次是下折 痕、下折痕和上折痕。 12 | * 给定一 个输入参数N,代表纸条都从下边向上方连续对折N次, 请从上到下打印所有折痕的方向。 例如:N=1时,打印: down N=2时,打印: down down up 13 | */ 14 | public class N_05_折纸问题 { 15 | 16 | public static void printAllFolds(int N) { 17 | 18 | printProcess(1, N, true); 19 | } 20 | 21 | public static void printProcess(int i, int N, boolean down) { 22 | if (i > N) { 23 | return; 24 | } 25 | printProcess(i + 1, N, true); 26 | System.out.println(down ? "down " : "up "); 27 | printProcess(i + 1, N, false); 28 | } 29 | 30 | public static void main(String[] args) { 31 | int N = 4; 32 | printAllFolds(N); 33 | } 34 | 35 | } 36 | -------------------------------------------------------------------------------- /src/main/java/concurrent/juctools/threadpool/FixedThreadPoolTest.java: -------------------------------------------------------------------------------- 1 | package concurrent.juctools.threadpool; 2 | 3 | import java.util.concurrent.ExecutorService; 4 | import java.util.concurrent.Executors; 5 | 6 | /** 7 | * 描述: 演示newFixedThreadPool 8 | */ 9 | public class FixedThreadPoolTest { 10 | 11 | public static void main(String[] args) { 12 | ExecutorService executorService = Executors.newFixedThreadPool(4); 13 | for (int i = 0; i < 1000; i++) { 14 | executorService.execute(new Task()); 15 | } 16 | } 17 | } 18 | 19 | class Task implements Runnable { 20 | 21 | 22 | @Override 23 | public void run() { 24 | try { 25 | Thread.sleep(500); 26 | } catch (InterruptedException e) { 27 | e.printStackTrace(); 28 | } 29 | System.out.println(Thread.currentThread().getName()); 30 | } 31 | } -------------------------------------------------------------------------------- /src/main/java/jvm/agent/asm/JavassistTest.java: -------------------------------------------------------------------------------- 1 | package jvm.agent.asm; 2 | 3 | 4 | import java.io.IOException; 5 | 6 | import javassist.*; 7 | import jvm.agent.asm.Base; 8 | 9 | public class JavassistTest { 10 | 11 | public static void main(String[] args) throws NotFoundException, CannotCompileException, 12 | IllegalAccessException, InstantiationException, IOException { 13 | 14 | new Base().process(); 15 | 16 | ClassPool cp = ClassPool.getDefault(); 17 | CtClass cc = cp.get("jvm.agent.asm.Base"); 18 | CtMethod m = cc.getDeclaredMethod("process"); 19 | m.insertBefore("{ System.out.println(\"start\"); }"); 20 | m.insertAfter("{ System.out.println(\"end\"); }"); 21 | Class c = cc.toClass(); 22 | cc.writeFile("/Users/hsfxuebao/Desktop"); 23 | Base h = (Base)c.newInstance(); 24 | h.process(); 25 | } 26 | } -------------------------------------------------------------------------------- /src/main/java/jvm/tools/jvisualvm/OomTest.java: -------------------------------------------------------------------------------- 1 | package jvm.tools.jvisualvm; 2 | 3 | import java.util.ArrayList; 4 | import java.util.Random; 5 | 6 | /** 7 | * @author hsfxuebao 8 | * Created on 2021-02-23 9 | * 10 | * -Xms500m -Xmx500m -XX:SurvivorRatio=8 11 | */ 12 | public class OomTest { 13 | public static void main(String[] args) { 14 | ArrayList list = new ArrayList(); 15 | 16 | while(true){ 17 | try{ 18 | Thread.sleep(5); 19 | } catch(InterruptedException e){ 20 | e.printStackTrace(); 21 | } 22 | 23 | list.add(new Picture(new Random().nextInt(100 * 50))); 24 | } 25 | } 26 | 27 | static class Picture{ 28 | private byte[] pixels; 29 | 30 | public Picture(int length){ 31 | this.pixels = new byte[length]; 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/algorithm/tu/GraphGenerator.java: -------------------------------------------------------------------------------- 1 | package algorithm.tu; 2 | 3 | public class GraphGenerator { 4 | 5 | public static Graph createGraph(Integer[][] matrix) { 6 | Graph graph = new Graph(); 7 | for (int i = 0; i < matrix.length; i++) { 8 | Integer weight = matrix[i][0]; 9 | Integer from = matrix[i][1]; 10 | Integer to = matrix[i][2]; 11 | if (!graph.nodes.containsKey(from)) { 12 | graph.nodes.put(from, new Node(from)); 13 | } 14 | if (!graph.nodes.containsKey(to)) { 15 | graph.nodes.put(to, new Node(to)); 16 | } 17 | Node fromNode = graph.nodes.get(from); 18 | Node toNode = graph.nodes.get(to); 19 | Edge newEdge = new Edge(weight, fromNode, toNode); 20 | fromNode.nexts.add(toNode); 21 | fromNode.out++; 22 | toNode.in++; 23 | fromNode.edges.add(newEdge); 24 | graph.edges.add(newEdge); 25 | } 26 | return graph; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/designpattern/singleton/type1/SingletonTest01.java: -------------------------------------------------------------------------------- 1 | package designpattern.singleton.type1; 2 | 3 | public class SingletonTest01 { 4 | 5 | public static void main(String[] args) { 6 | //���� 7 | Singleton instance = Singleton.getInstance(); 8 | Singleton instance2 = Singleton.getInstance(); 9 | System.out.println(instance == instance2); // true 10 | System.out.println("instance.hashCode=" + instance.hashCode()); 11 | System.out.println("instance2.hashCode=" + instance2.hashCode()); 12 | } 13 | 14 | } 15 | 16 | /** 17 | * 饿汉式 静态常量 18 | */ 19 | class Singleton { 20 | 21 | //1. 私有化构造器 22 | private Singleton() { 23 | 24 | } 25 | 26 | // 2. 内部创建实例 27 | private final static Singleton instance = new Singleton(); 28 | 29 | //3. 提供一个共有的静态方法,返回实例对象 30 | public static Singleton getInstance() { 31 | return instance; 32 | } 33 | 34 | } -------------------------------------------------------------------------------- /src/main/java/concurrent/juctools/collections/copyonwrite/CopyOnWriteArrayListDemo2.java: -------------------------------------------------------------------------------- 1 | package concurrent.juctools.collections.copyonwrite; 2 | 3 | import java.util.Iterator; 4 | import java.util.concurrent.CopyOnWriteArrayList; 5 | 6 | /** 7 | * 描述: 对比两个迭代器 8 | */ 9 | public class CopyOnWriteArrayListDemo2 { 10 | 11 | public static void main(String[] args) throws InterruptedException { 12 | CopyOnWriteArrayList list = new CopyOnWriteArrayList<>(new Integer[]{1, 2, 3}); 13 | 14 | System.out.println(list); 15 | 16 | Iterator itr1 = list.iterator(); 17 | 18 | list.remove(2); 19 | Thread.sleep(1000); 20 | System.out.println(list); 21 | 22 | Iterator itr2 = list.iterator(); 23 | 24 | itr1.forEachRemaining(System.out::println); 25 | itr2.forEachRemaining(System.out::println); 26 | 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/concurrent/juctools/lock/reentrantlock/GetHoldCount.java: -------------------------------------------------------------------------------- 1 | package concurrent.juctools.lock.reentrantlock; 2 | 3 | import java.util.concurrent.locks.ReentrantLock; 4 | 5 | /** 6 | * 描述: TODO 7 | */ 8 | public class GetHoldCount { 9 | private static ReentrantLock lock = new ReentrantLock(); 10 | 11 | public static void main(String[] args) { 12 | System.out.println(lock.getHoldCount()); 13 | lock.lock(); 14 | System.out.println(lock.getHoldCount()); 15 | lock.lock(); 16 | System.out.println(lock.getHoldCount()); 17 | lock.lock(); 18 | System.out.println(lock.getHoldCount()); 19 | lock.unlock(); 20 | System.out.println(lock.getHoldCount()); 21 | lock.unlock(); 22 | System.out.println(lock.getHoldCount()); 23 | lock.unlock(); 24 | System.out.println(lock.getHoldCount()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/designpattern/memento/game/Client.java: -------------------------------------------------------------------------------- 1 | package designpattern.memento.game; 2 | 3 | public class Client { 4 | 5 | public static void main(String[] args) { 6 | // TODO Auto-generated method stub 7 | // 创建游戏角色 8 | GameRole gameRole = new GameRole(); 9 | gameRole.setVit(100); 10 | gameRole.setDef(100); 11 | 12 | System.out.println("和boss 大战前的状态״̬"); 13 | gameRole.display(); 14 | 15 | // 把当前状态保存 caretaker 16 | Caretaker caretaker = new Caretaker(); 17 | caretaker.setMemento(gameRole.createMemento()); 18 | 19 | System.out.println("和boss 大战~~~"); 20 | gameRole.setDef(30); 21 | gameRole.setVit(30); 22 | 23 | gameRole.display(); 24 | 25 | System.out.println("大战后 使用备忘录对象恢复到站前"); 26 | 27 | gameRole.recoverGameRoleFromMemento(caretaker.getMemento()); 28 | System.out.println("恢复后的状态̬"); 29 | gameRole.display(); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/designpattern/observer/improve/Client.java: -------------------------------------------------------------------------------- 1 | package designpattern.observer.improve; 2 | 3 | public class Client { 4 | 5 | public static void main(String[] args) { 6 | // TODO Auto-generated method stub 7 | // WeatherData 8 | WeatherData weatherData = new WeatherData(); 9 | 10 | //观察者 11 | CurrentConditions currentConditions = new CurrentConditions(); 12 | BaiduSite baiduSite = new BaiduSite(); 13 | 14 | // 注册到weatherData 15 | weatherData.registerObserver(currentConditions); 16 | weatherData.registerObserver(baiduSite); 17 | 18 | //测试 19 | System.out.println("֪ͨ通知各个注册的观察者,查看信息"); 20 | weatherData.setData(10f, 100f, 30.3f); 21 | 22 | 23 | weatherData.removeObserver(currentConditions); 24 | //测试 25 | System.out.println(); 26 | System.out.println("֪ͨ通知各个注册的观察者,查看信息"); 27 | weatherData.setData(10f, 100f, 30.3f); 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/designpattern/prototype/Sheep.java: -------------------------------------------------------------------------------- 1 | package designpattern.prototype; 2 | 3 | public class Sheep { 4 | private String name; 5 | private int age; 6 | private String color; 7 | public Sheep(String name, int age, String color) { 8 | super(); 9 | this.name = name; 10 | this.age = age; 11 | this.color = color; 12 | } 13 | public String getName() { 14 | return name; 15 | } 16 | public void setName(String name) { 17 | this.name = name; 18 | } 19 | public int getAge() { 20 | return age; 21 | } 22 | public void setAge(int age) { 23 | this.age = age; 24 | } 25 | public String getColor() { 26 | return color; 27 | } 28 | public void setColor(String color) { 29 | this.color = color; 30 | } 31 | @Override 32 | public String toString() { 33 | return "Sheep [name=" + name + ", age=" + age + ", color=" + color + "]"; 34 | } 35 | 36 | 37 | } 38 | -------------------------------------------------------------------------------- /src/main/java/designpattern/strategy/improve/Duck.java: -------------------------------------------------------------------------------- 1 | package designpattern.strategy.improve; 2 | 3 | public abstract class Duck { 4 | 5 | // 属性 策略模式 6 | FlyBehavior flyBehavior; 7 | // 其他属性 8 | QuackBehavior quackBehavior; 9 | 10 | public Duck() { 11 | 12 | } 13 | 14 | public abstract void display();//显示鸭子信息 15 | 16 | public void quack() { 17 | System.out.println("鸭子嘎嘎嘎叫~~"); 18 | } 19 | 20 | public void swim() { 21 | System.out.println("鸭子游泳~~"); 22 | } 23 | 24 | public void fly() { 25 | 26 | // 改进 27 | if(flyBehavior != null) { 28 | flyBehavior.fly(); 29 | } 30 | } 31 | 32 | public void setFlyBehavior(FlyBehavior flyBehavior) { 33 | this.flyBehavior = flyBehavior; 34 | } 35 | 36 | 37 | public void setQuackBehavior(QuackBehavior quackBehavior) { 38 | this.quackBehavior = quackBehavior; 39 | } 40 | 41 | 42 | 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/jvm/tools/jconsole/HeapInstanceTest.java: -------------------------------------------------------------------------------- 1 | package jvm.tools.jconsole; 2 | 3 | import java.util.ArrayList; 4 | import java.util.Random; 5 | 6 | /** 7 | * -Xms600m -Xmx600m -XX:SurvivorRatio=8 8 | */ 9 | public class HeapInstanceTest { 10 | byte[] buffer = new byte[new Random().nextInt(1024 * 100)]; 11 | 12 | public static void main(String[] args) { 13 | try { 14 | Thread.sleep(3000); 15 | } catch (InterruptedException e) { 16 | e.printStackTrace(); 17 | } 18 | ArrayList list = new ArrayList(); 19 | while (true) { 20 | list.add(new HeapInstanceTest()); 21 | try { 22 | Thread.sleep(10); 23 | } catch (InterruptedException e) { 24 | e.printStackTrace(); 25 | } 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/jvm/tools/jvisualvm/HeapInstanceTest.java: -------------------------------------------------------------------------------- 1 | package jvm.tools.jvisualvm; 2 | 3 | import java.util.ArrayList; 4 | import java.util.Random; 5 | 6 | /** 7 | * -Xms600m -Xmx600m -XX:SurvivorRatio=8 8 | */ 9 | public class HeapInstanceTest { 10 | byte[] buffer = new byte[new Random().nextInt(1024 * 100)]; 11 | 12 | public static void main(String[] args) { 13 | try { 14 | Thread.sleep(1000); 15 | } catch (InterruptedException e) { 16 | e.printStackTrace(); 17 | } 18 | ArrayList list = new ArrayList(); 19 | while (true) { 20 | list.add(new HeapInstanceTest()); 21 | try { 22 | Thread.sleep(10); 23 | } catch (InterruptedException e) { 24 | e.printStackTrace(); 25 | } 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/designpattern/state/money/ClientTest.java: -------------------------------------------------------------------------------- 1 | package designpattern.state.money; 2 | 3 | public class ClientTest { 4 | 5 | public static void main(String[] args) { 6 | // TODO Auto-generated method stub 7 | // context 对象 8 | Context context = new Context(); 9 | // 将当前状态设置为 PublishState 10 | context.setState(new PublishState()); 11 | System.out.println(context.getCurrentState()); 12 | 13 | // //publish --> not pay 14 | context.acceptOrderEvent(context); 15 | // //not pay --> paid 16 | context.payOrderEvent(context); 17 | // // 失败 检测失败时 跑出异常 18 | // try { 19 | // context.checkFailEvent(context); 20 | // System.out.println("流程正常.."); 21 | // } catch (Exception e) { 22 | // // TODO: handle exception 23 | // System.out.println(e.getMessage()); 24 | // } 25 | 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/algorithm/tu/N_03_TopologySort.java: -------------------------------------------------------------------------------- 1 | package algorithm.tu; 2 | 3 | import java.util.*; 4 | 5 | /** 6 | * 拓扑排序算法 适用范围:要求有向图,且有入度为0的节点,且没有 环 7 | */ 8 | public class N_03_TopologySort { 9 | 10 | // directed graph and no loop 11 | public static List sortedTopology(Graph graph) { 12 | HashMap inMap = new HashMap<>(); 13 | Queue zeroInQueue = new LinkedList<>(); 14 | for (Node node : graph.nodes.values()) { 15 | inMap.put(node, node.in); 16 | if (node.in == 0) { 17 | zeroInQueue.add(node); 18 | } 19 | } 20 | List result = new ArrayList<>(); 21 | while (!zeroInQueue.isEmpty()) { 22 | Node cur = zeroInQueue.poll(); 23 | result.add(cur); 24 | for (Node next : cur.nexts) { 25 | inMap.put(next, inMap.get(next) - 1); 26 | if (inMap.get(next) == 0) { 27 | zeroInQueue.add(next); 28 | } 29 | } 30 | } 31 | return result; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /src/main/java/concurrent/base/threadcoreknowledge/stopthreads/RightWayStopThreadWithoutSleep.java: -------------------------------------------------------------------------------- 1 | package concurrent.base.threadcoreknowledge.stopthreads; 2 | 3 | /** 4 | * 描述: run方法内没有sleep或wait方法时,停止线程 5 | */ 6 | public class RightWayStopThreadWithoutSleep implements Runnable { 7 | 8 | @Override 9 | public void run() { 10 | int num = 0; 11 | while (!Thread.currentThread().isInterrupted() && num <= Integer.MAX_VALUE / 2) { 12 | if (num % 10000 == 0) { 13 | System.out.println(num + "是10000的倍数"); 14 | } 15 | num++; 16 | } 17 | System.out.println("任务运行结束了"); 18 | } 19 | 20 | public static void main(String[] args) throws InterruptedException { 21 | Thread thread = new Thread(new RightWayStopThreadWithoutSleep()); 22 | thread.start(); 23 | Thread.sleep(2000); 24 | thread.interrupt(); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/concurrent/juctools/threadlocal/ThreadLocalNPE.java: -------------------------------------------------------------------------------- 1 | package concurrent.juctools.threadlocal; 2 | 3 | /** 4 | * 描述: TODO 5 | */ 6 | public class ThreadLocalNPE { 7 | 8 | ThreadLocal longThreadLocal = new ThreadLocal(); 9 | 10 | public void set() { 11 | longThreadLocal.set(Thread.currentThread().getId()); 12 | } 13 | 14 | public long get() { 15 | return longThreadLocal.get(); 16 | } 17 | 18 | public static void main(String[] args) { 19 | ThreadLocalNPE threadLocalNPE = new ThreadLocalNPE(); 20 | System.out.println(threadLocalNPE.get()); 21 | Thread thread1 = new Thread(new Runnable() { 22 | @Override 23 | public void run() { 24 | threadLocalNPE.set(); 25 | System.out.println(threadLocalNPE.get()); 26 | } 27 | }); 28 | thread1.start(); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/jvm/tools/jprofiler/JProfilerTest.java: -------------------------------------------------------------------------------- 1 | package jvm.tools.jprofiler; 2 | 3 | import java.util.ArrayList; 4 | import java.util.HashMap; 5 | import java.util.concurrent.TimeUnit; 6 | 7 | /** 8 | * 功能演示测试 9 | */ 10 | public class JProfilerTest { 11 | public static void main(String[] args) { 12 | while (true){ 13 | ArrayList list = new ArrayList(); 14 | for (int i = 0; i < 500; i++) { 15 | Data data = new Data(); 16 | list.add(data); 17 | } 18 | try { 19 | TimeUnit.MILLISECONDS.sleep(500); 20 | } catch (InterruptedException e) { 21 | e.printStackTrace(); 22 | } 23 | } 24 | } 25 | } 26 | class Data{ 27 | private int size = 10; 28 | private byte[] buffer = new byte[1024 * 1024];//1mb 29 | private String info = "hello,atguigu"; 30 | } -------------------------------------------------------------------------------- /src/main/java/algorithm/array/L_面0101_判断字符是否唯一.java: -------------------------------------------------------------------------------- 1 | package algorithm.array; 2 | 3 | import org.apache.commons.lang3.StringUtils; 4 | 5 | /** 6 | * @author hsfxuebao 7 | * @date 2020/03/27 8 | * 实现一个算法,确定一个字符串 s 的所有字符是否全都不同。 9 | * 10 | * 示例 1: 11 | * 12 | * 输入: s = "leetcode" 13 | * 输出: false 14 | */ 15 | public class L_面0101_判断字符是否唯一 { 16 | 17 | 18 | /** 19 | * 思路1,数组实现 20 | * 思路2:当最后一次索引的位置不是当前的索引i时表示有重复 21 | * 22 | * @return 23 | */ 24 | public static boolean isUnique(String str) { 25 | 26 | if (StringUtils.isBlank(str)) { 27 | return true; 28 | } 29 | 30 | char[] chars = str.toCharArray(); 31 | for (int i = 0; i < chars.length; i++) { 32 | if (str.lastIndexOf(chars[i]) != i) { 33 | return false; 34 | } 35 | } 36 | return true; 37 | } 38 | 39 | 40 | public static void main(String[] args) { 41 | String str = "leetcode"; 42 | System.out.println(isUnique(str)); 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /src/main/java/designpattern/memento/game/GameRole.java: -------------------------------------------------------------------------------- 1 | package designpattern.memento.game; 2 | 3 | public class GameRole { 4 | 5 | private int vit; 6 | private int def; 7 | 8 | // 创建 Memento , 即根据当前的状态得到Memento 9 | public Memento createMemento() { 10 | return new Memento(vit, def); 11 | } 12 | 13 | // 从备忘录对象 恢复GameRole的状态 14 | public void recoverGameRoleFromMemento(Memento memento) { 15 | this.vit = memento.getVit(); 16 | this.def = memento.getDef(); 17 | } 18 | 19 | // 显示当前游戏角色的状态 20 | public void display() { 21 | System.out.println(" 游戏角色当前的攻击力" + this.vit + " 防御力: " + this.def); 22 | } 23 | 24 | public int getVit() { 25 | return vit; 26 | } 27 | 28 | public void setVit(int vit) { 29 | this.vit = vit; 30 | } 31 | 32 | public int getDef() { 33 | return def; 34 | } 35 | 36 | public void setDef(int def) { 37 | this.def = def; 38 | } 39 | 40 | 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/designpattern/command/newfile.cld: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 255 5 | 255 6 | 206 7 | 8 | 9 | 0 10 | 0 11 | 0 12 | 13 | true 14 | 15 | 16 | 17 | 18 | 2 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/main/java/designpattern/principle/inversion/improve/DependecyInversion.java: -------------------------------------------------------------------------------- 1 | package designpattern.principle.inversion.improve; 2 | 3 | public class DependecyInversion { 4 | 5 | public static void main(String[] args) { 6 | //�ͻ�������ı� 7 | Person person = new Person(); 8 | person.receive(new Email()); 9 | 10 | person.receive(new WeiXin()); 11 | } 12 | 13 | } 14 | 15 | //����ӿ� 16 | interface IReceiver { 17 | public String getInfo(); 18 | } 19 | 20 | class Email implements IReceiver { 21 | public String getInfo() { 22 | return "�����ʼ���Ϣ: hello,world"; 23 | } 24 | } 25 | 26 | //����΢�� 27 | class WeiXin implements IReceiver { 28 | public String getInfo() { 29 | return "΢����Ϣ: hello,ok"; 30 | } 31 | } 32 | 33 | //��ʽ2 34 | class Person { 35 | //���������ǶԽӿڵ����� 36 | public void receive(IReceiver receiver ) { 37 | System.out.println(receiver.getInfo()); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /src/main/java/designpattern/singleton/type3/SingletonTest03.java: -------------------------------------------------------------------------------- 1 | package designpattern.singleton.type3; 2 | 3 | 4 | public class SingletonTest03 { 5 | 6 | public static void main(String[] args) { 7 | System.out.println("����ʽ1 �� �̲߳���ȫ~"); 8 | Singleton instance = Singleton.getInstance(); 9 | Singleton instance2 = Singleton.getInstance(); 10 | System.out.println(instance == instance2); // true 11 | System.out.println("instance.hashCode=" + instance.hashCode()); 12 | System.out.println("instance2.hashCode=" + instance2.hashCode()); 13 | } 14 | 15 | } 16 | 17 | /** 18 | * 懒汉式 线程不安全 19 | */ 20 | class Singleton { 21 | private static Singleton instance; 22 | 23 | private Singleton() {} 24 | 25 | // 静态的共有方法,当使用到该方法时,采取创建实例 26 | // 懒汉式 27 | public static Singleton getInstance() { 28 | if(instance == null) { 29 | instance = new Singleton(); 30 | } 31 | return instance; 32 | } 33 | } -------------------------------------------------------------------------------- /src/main/java/concurrent/base/threadcoreknowledge/createthreads/wrongways/ThreadPool5.java: -------------------------------------------------------------------------------- 1 | package concurrent.base.threadcoreknowledge.createthreads.wrongways; 2 | 3 | import java.util.concurrent.ExecutorService; 4 | import java.util.concurrent.Executors; 5 | 6 | /** 7 | * 描述: 线程池创建线程的方法 8 | */ 9 | public class ThreadPool5 { 10 | 11 | public static void main(String[] args) { 12 | ExecutorService executorService = Executors.newCachedThreadPool(); 13 | for (int i = 0; i < 1000; i++) { 14 | executorService.submit(new Task() { 15 | }); 16 | } 17 | } 18 | } 19 | 20 | class Task implements Runnable { 21 | 22 | @Override 23 | public void run() { 24 | try { 25 | Thread.sleep(500); 26 | } catch (InterruptedException e) { 27 | e.printStackTrace(); 28 | } 29 | System.out.println(Thread.currentThread().getName()); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/ionio/zerocopy/SendFileTest.java: -------------------------------------------------------------------------------- 1 | package ionio.zerocopy; 2 | 3 | import java.nio.channels.FileChannel; 4 | import java.nio.file.Paths; 5 | import java.nio.file.StandardOpenOption; 6 | 7 | public class SendFileTest { 8 | public static void main(String[] args) { 9 | try { 10 | FileChannel readChannel = FileChannel.open(Paths.get("./jay.txt"), StandardOpenOption.READ); 11 | long len = readChannel.size(); 12 | long position = readChannel.position(); 13 | 14 | FileChannel writeChannel = FileChannel.open(Paths.get("./siting.txt"), StandardOpenOption.WRITE, StandardOpenOption.CREATE); 15 | //数据传输 16 | readChannel.transferTo(position, len, writeChannel); 17 | readChannel.close(); 18 | writeChannel.close(); 19 | } catch (Exception e) { 20 | System.out.println(e.getMessage()); 21 | } 22 | } 23 | } -------------------------------------------------------------------------------- /src/main/java/algorithm/array/L_面1704_消失的数字.java: -------------------------------------------------------------------------------- 1 | package algorithm.array; 2 | 3 | /** 4 | * @author hsfxuebao 5 | * @date 2020/03/28 6 | * 7 | * 数组nums包含从0到n的所有整数,但其中缺了一个。请编写代码找出那个缺失的整数。你有办法在O(n)时间内完成吗? 8 | * 9 | * 注意:本题相对书上原题稍作改动 10 | * 11 | * 示例 1: 12 | * 13 | * 输入:[3,0,1] 14 | * 输出:2 15 | * 16 | * 来源:力扣(LeetCode) 17 | * 链接:https://leetcode-cn.com/problems/missing-number-lcci 18 | * 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 19 | */ 20 | public class L_面1704_消失的数字 { 21 | 22 | //不缺元素的总和减去缺元素的总和 23 | public static Integer getNumber(int[] num) { 24 | 25 | int length = num.length; 26 | //不缺元素的总和 27 | int sum = 0; 28 | //实际的总和 29 | int res = 0; 30 | for (int i = 0; i < length; i++) { 31 | res += num[i]; 32 | sum += i; 33 | } 34 | sum += length; 35 | sum -= res; 36 | return sum; 37 | } 38 | 39 | public static void main(String[] args) { 40 | int[] num = {3,0,1}; 41 | System.out.println(getNumber(num)); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /src/main/java/algorithm/array/L_面53_排序数组中缺失的数.java: -------------------------------------------------------------------------------- 1 | package algorithm.array; 2 | 3 | /** 4 | * @author hsfxuebao 5 | * @date 2020/03/28 6 | * 7 | * 一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1内的n个数字中有且只有一个数字不在该数组中,请找出这个数字。 8 | * 9 | *   10 | * 11 | * 示例 1: 12 | * 13 | * 输入: [0,1,3] 14 | * 输出: 2 15 | * 16 | * 来源:力扣(LeetCode) 17 | * 链接:https://leetcode-cn.com/problems/que-shi-de-shu-zi-lcof 18 | * 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 19 | */ 20 | public class L_面53_排序数组中缺失的数 { 21 | 22 | public static Integer getDiff(int[] arr) { 23 | 24 | int left = 0; 25 | int right = arr.length - 1; 26 | while (left <= right) { 27 | int mid = (right + left) >> 1; 28 | if (arr[mid] != mid) { 29 | right = mid - 1; 30 | } else { 31 | left = mid + 1; 32 | } 33 | } 34 | return left; 35 | } 36 | 37 | public static void main(String[] args) { 38 | int[] num = {0,1,3}; 39 | System.out.println(getDiff(num)); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/designpattern/bridge/Client.java: -------------------------------------------------------------------------------- 1 | package designpattern.bridge; 2 | 3 | public class Client { 4 | 5 | public static void main(String[] args) { 6 | 7 | //获取折叠式手机 样式+ 品牌 8 | 9 | Phone phone1 = new FoldedPhone(new XiaoMi()); 10 | 11 | phone1.open(); 12 | phone1.call(); 13 | phone1.close(); 14 | 15 | System.out.println("======================="); 16 | 17 | Phone phone2 = new FoldedPhone(new Vivo()); 18 | 19 | phone2.open(); 20 | phone2.call(); 21 | phone2.close(); 22 | 23 | System.out.println("=============="); 24 | 25 | UpRightPhone phone3 = new UpRightPhone(new XiaoMi()); 26 | 27 | phone3.open(); 28 | phone3.call(); 29 | phone3.close(); 30 | 31 | System.out.println("=============="); 32 | 33 | UpRightPhone phone4 = new UpRightPhone(new Vivo()); 34 | 35 | phone4.open(); 36 | phone4.call(); 37 | phone4.close(); 38 | } 39 | 40 | } 41 | -------------------------------------------------------------------------------- /src/main/java/designpattern/principle/composite/newfile.cld: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 255 5 | 255 6 | 206 7 | 8 | 9 | 0 10 | 0 11 | 0 12 | 13 | true 14 | 15 | 16 | 17 | 18 | 2 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/main/java/designpattern/principle/segregation/newfile2.cld: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 255 5 | 255 6 | 206 7 | 8 | 9 | 0 10 | 0 11 | 0 12 | 13 | true 14 | 15 | 16 | 17 | 18 | 2 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /src/main/java/designpattern/singleton/type4/SingletonTest04.java: -------------------------------------------------------------------------------- 1 | package designpattern.singleton.type4; 2 | 3 | 4 | public class SingletonTest04 { 5 | 6 | public static void main(String[] args) { 7 | System.out.println("����ʽ2 �� �̰߳�ȫ~"); 8 | Singleton instance = Singleton.getInstance(); 9 | Singleton instance2 = Singleton.getInstance(); 10 | System.out.println(instance == instance2); // true 11 | System.out.println("instance.hashCode=" + instance.hashCode()); 12 | System.out.println("instance2.hashCode=" + instance2.hashCode()); 13 | } 14 | 15 | } 16 | 17 | /** 18 | * 懒汉式 线程安全,同步方法 19 | */ 20 | class Singleton { 21 | private static Singleton instance; 22 | 23 | private Singleton() {} 24 | 25 | // 静态的共有方法,当使用到该方法时,采取创建实例 26 | // 懒汉式 27 | public static synchronized Singleton getInstance() { 28 | if(instance == null) { 29 | instance = new Singleton(); 30 | } 31 | return instance; 32 | } 33 | } -------------------------------------------------------------------------------- /src/main/java/algorithm/string/L_面0502_二进制转字符串.java: -------------------------------------------------------------------------------- 1 | package algorithm.string; 2 | 3 | /** 4 | * @author hsfxuebao 5 | * @date 2020/03/29 6 | * 7 | * 二进制数转字符串。给定一个介于0和1之间的实数(如0.72),类型为double,打印它的二进制表达式。如果该数字不在0和1之间,或者无法精确地用32位以内的二进制表示,则打印“ERROR”。 8 | * 9 | * 示例1: 10 | * 11 | * 输入:0.625 12 | * 输出:"0.101" 13 | * 示例2: 14 | * 15 | * 输入:0.1 16 | * 输出:"ERROR" 17 | * 提示:0.1无法被二进制准确表示 18 | * 19 | * 来源:力扣(LeetCode) 20 | * 链接:https://leetcode-cn.com/problems/bianry-number-to-string-lcci 21 | * 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 22 | */ 23 | public class L_面0502_二进制转字符串 { 24 | 25 | public String printBin(double num) { 26 | StringBuilder sb = new StringBuilder("0."); 27 | for (int i = 1; i < 31 && num > 0; i++) { 28 | if (num >= Math.pow(0.5, i)) { 29 | num -= Math.pow(0.5, i); 30 | sb.append(1); 31 | } else { 32 | 33 | sb.append(0); 34 | } 35 | } 36 | return num == 0 ? sb.toString() : "ERROR"; 37 | } 38 | 39 | 40 | 41 | } 42 | -------------------------------------------------------------------------------- /src/main/java/concurrent/base/jmm/NoVolatile.java: -------------------------------------------------------------------------------- 1 | package concurrent.base.jmm; 2 | 3 | 4 | import java.util.concurrent.atomic.AtomicInteger; 5 | 6 | /** 7 | * 描述: 不适用于volatile的场景 8 | */ 9 | public class NoVolatile implements Runnable { 10 | 11 | volatile int a; 12 | AtomicInteger realA = new AtomicInteger(); 13 | 14 | public static void main(String[] args) throws InterruptedException { 15 | Runnable r = new NoVolatile(); 16 | Thread thread1 = new Thread(r); 17 | Thread thread2 = new Thread(r); 18 | thread1.start(); 19 | thread2.start(); 20 | thread1.join(); 21 | thread2.join(); 22 | System.out.println(((NoVolatile) r).a); 23 | System.out.println(((NoVolatile) r).realA.get()); 24 | } 25 | @Override 26 | public void run() { 27 | for (int i = 0; i < 10000; i++) { 28 | a++; 29 | realA.incrementAndGet(); 30 | } 31 | } 32 | } 33 | --------------------------------------------------------------------------------