java培训吧 关注:116,364贴子:396,920

记录自己自学Java的每一天#程序员#2020年4月15号开

只看楼主收藏回复

记录自己自学Java的每一天
#程序员#
2020年4月15号开始,已经四十多天了。
感觉还不错,就是学的有点慢。
每天打卡总结,希望自己能一直坚持学下去。



IP属地:湖北来自Android客户端1楼2020-05-28 13:37回复
    自学Java第44天
    初步接触了网络编程的一些基本概念
    学习了这一个多月的Java
    还是第一次遇到这么多概念性的知识点
    两种软件架构,网络三要素
    软件架构分为B/S架构和C/S架构
    C:Client,客户端
    B:Browser,浏览器
    S:Server,服务端
    B/S就是指浏览器和服务器结构
    典型的例子有:页游、淘宝网这种
    C/S就是指客户端和服务器结构
    典型的例子有:端游、QQ这种应用软件
    网络三要素:协议、IP和端口
    什么叫协议呢?
    国际上交流用英语,英语就是一种协议
    所以协议可以理解成网络之间的通信规则
    不然都听不懂对方在讲什么,无法沟通
    其中最常见的有TCP协议和UDP协议
    IP是指计算机的唯一标识
    端口是指计算机中某一进程的唯一标识
    所以通过IP+端口
    可以找到对应计算机里的某一应用程序


    IP属地:湖北来自Android客户端2楼2020-05-28 13:38
    回复
      2025-08-02 03:31:27
      广告
      不感兴趣
      开通SVIP免广告
      自学Java第45天
      如果说前一天学习了网络的一些概念
      那这天就是从代码角度上的演练
      TCP协议是有连接的通信协议
      既然是通信,那必须有客户端和服务端
      还有它们之间的三次握手
      其中有一个核心的类叫Socket
      socket,套接字,也就是IP+端口
      它可以定位对应计算机里的对应进程
      客户端如何找到对应的服务端?
      就是通过这个socket
      创建socket对象初始化时说明IP+端口
      它们之间的通信也是利用这个对象
      服务端接受客户端请求得到的也是它
      accept方法的返回值就是socket
      互相通信传递消息基于由socket得到的IO流
      getOutputStream()输出流,发消息
      getInputStream()输入流,读消息
      其中每次发完消息后要通知对方我说完了
      socket的shutdownOutput()方法


      IP属地:湖北来自Android客户端3楼2020-05-29 13:13
      回复
        自学Java第46天
        写了一个上传图片的案例
        我在想我们平时发朋友圈啊,动态啊
        不会就是这样的一个原理吧?
        就是客户端上传本地的图片
        访问服务端将对应图片传输过去
        服务端接受客户端的访问并保存文件
        也就是说我们朋友圈发的图片
        其实都在腾讯的服务器里有
        其他平台也是一样的道理
        啧啧,原来如此
        话不多说回到当前学习
        正式开发中,代码一般从服务端开始写
        昨天想当然地先写了客户端……
        代码就不再阐述,说说优化
        因为多个客户端会访问同一服务端
        那么在服务端中要加入while死循环
        只要有请求就会无限循环下去
        其中因为A客户端访问进来了
        需要一定的时间来处理文件
        为了不影响其它客户端的访问
        接受客户端访问后,就创建一个线程。
        此外还有图片命名同名问题
        为了处理这一问题,要使用到UUID
        我们现在去网上下载一张图片
        还有种子的命名规则,其实就是UUID


        IP属地:湖北来自Android客户端4楼2020-05-30 19:07
        回复
          自学Java第47天
          原以为对函数式编程掌握的还算不错时
          却发现事实并不是如此
          学习真的是一件需要不断地优化的事情
          不然特容易鼠目寸光
          以前对函数式接口的理解并不准确
          有且仅有一个抽象方法的接口?
          以前真的就是这么记忆的
          大多数情况下,确实是没问题的
          但是会有特殊情况:
          比如说接口中有一个equals方法
          哪怕它是一个抽象方法,对实现类也无影响
          为什么会这样呢?
          因为Objcet中有这个方法
          Objcet是顶层父类,它的方法所有类都有
          但是接口里是没有Object中的方法的
          现在有一个实现类它实现了一个接口
          实现类本是具有Objcet中的equals方法的
          就算接口中也有一个equals方法
          根据就近原则,实现类重写该方法
          重写的是Objcet中的方法,和接口无关系
          不过接口中的方法要和Objcet中的完全一致
          并且也不仅限于equals方法
          由此可以得出衍生出:
          一个类继承自一个父类并且实现了一个接口
          当父类和接口中出现了一模一样的方法时
          该类是重写的是父类中的方法
          毕竟亲爹还是比干爹要重要些的……


          IP属地:湖北来自Android客户端5楼2020-05-31 09:07
          回复
            自学Java第48天
            以前学习匿名内部类的时候
            觉得使用起来真方便
            毕竟不用创建一个新的类了
            后来学了lambda表达式
            才发现原来匿名内部类还可以更简便
            直接用一个参数得到一个结果就可以了
            原本以为lambda表达式是最简洁的了
            现在学习了方法引用
            我擦咧,竟然比lambda表达式还要简洁
            直接引用方法名就可以了
            方法参数啊,方法体啊都不用写
            省略了方法逻辑,直接用方法名就好了
            不得不感慨,真的是一环扣一环的
            当然越简洁的语法越是会有条件限制的
            lambda表达式需要是函数式接口才能用
            方法引用在lambda的基础上还得逻辑存在
            其中方法引用有六种引用方式:
            对象引用方法
            类名引用方方法(静态方法)
            this引用方法
            super引用方法
            类构造器引用方法
            数组构造器引用方法
            就不一一讲解了,都整理在笔记中了


            IP属地:湖北来自Android客户端6楼2020-06-01 08:14
            回复
              自学Java第49天
              学习了两个常用的函数式接口
              Predicate和Function
              emmm……其实常不常用我也不清楚
              反正教程上是着重讲了这两个
              也算是为今天要学的Stream做准备
              Predicat,断言的意思
              就可以理解成推断
              其中有一个抽象方法test():
              参数(T t):泛型,任意指定的数据类型
              返回值(boolean):判断是真是假
              可以理解成:给一个参数推断是真还是假
              至于具体的推断规则
              在重写test方法时说明就好了
              除了抽象方法还有3个常用默认方法
              and方法:对应逻辑运算符&&
              or方法:对应逻辑运算符||
              negate方法:对应逻辑运算符!
              其中and方法和or方法参数和返回值一样
              所以可以链式编程一直不停地调用方法
              Function,函数的意思
              也可以理解成转换
              其中有一个抽象方法apply():
              参数(T t):任意指定的数据类型
              返回值(R ):也是任意指定的数据类型
              将任意指定数据类型转换成另一个数据类型
              当然它们也可以数据类型一样
              至于具体是如何转换的
              在重写apply方法是说明就好了
              所以也就可以将function理解成转换
              其中还有1个常用默认方法andThen
              就可以理解成:先这样转换,再那样转换
              将转换规则一个接一个连起来了


              IP属地:湖北来自Android客户端7楼2020-06-02 08:39
              回复
                自学Java第50天
                以前看到这样的新闻
                有人说雷军写的代码像诗一样
                当时很是疑惑:代码怎么能像诗呢?
                学完Stream流,我仿佛明白了什么
                Stream流写出来的代码就像诗一样
                当然这和雷军新闻没半毛钱的关系
                毕竟Stream流JDK8才出来
                这更多的是一种感觉
                就像有的人写的代码很好看
                有的人写的代码就是很丑一样
                但是不得不说,Stream流确实简洁多了
                它是在构建模型,说明要做什么
                至于具体是怎么做的,不用写
                以前学函数式编程思想,面向接口编程
                觉得好难理解,代码不好写
                现在发现Stream流中封装的方法
                好多方法参数都是接口,比如:
                filter方法参数就是昨天学的Predicate
                map方法参数也是昨天学的Function
                这些都是Java开发人员编写的代码
                他们一定程度上代表着Java顶尖水平
                他们都在这么写,那还有什么理由觉得
                面向接口编程的思想不重要呢?
                所以好好学习吧。


                IP属地:湖北来自Android客户端8楼2020-06-03 08:12
                回复
                  2025-08-02 03:25:27
                  广告
                  不感兴趣
                  开通SVIP免广告
                  自学Java第52天
                  学习了注解Annotation
                  原本以为是个很简单的知识点
                  能够一笔带过,结果一写就写了2千字
                  emmm怎么感觉还挺复杂的样子
                  毕竟注释学起来那么简单
                  还以为注解和注释差不多的
                  虽然它们确实也差不多…
                  都是代码级别的说明
                  只不过注释主要是给开发人员看的
                  而注解主要是给Java虚拟机看的
                  并且注释本身不会跟随程序运行
                  而注解是有一定的作用的
                  注解是Java里的四大类型之一:
                  类、接口、枚举、注解
                  和创建类一样,我们也可以创建注解
                  关键字为@interface
                  其中注解里没有方法,只有属性
                  它的属性名后面是有小括号的
                  和接口里的抽象方法又很像
                  总而言之注解和接口很像但又很特殊
                  利用反射解析注解
                  可以让注解具有一定的功能
                  比如在某个特定框架里面
                  利用注解就可以直接给类的对象赋值
                  都不用我们new对象再初始化什么的
                  使用起来特别的简单方便
                  想不到还有这样的作用,学到了
                  一开始真以为和注释一样仅仅只是说明
                  还以为没啥好学的呢


                  IP属地:湖北来自Android客户端9楼2020-06-05 08:17
                  回复
                    自学Java第53天
                    这几天的知识点学的我有点脑壳痛
                    从反射开始似乎一下子就难懂起来了
                    本来是要学动态代理的
                    但看得我实在是有点懵逼,便打算缓一天
                    花一天时间学一下JVM内存结构
                    毕竟这是一个非常重要的概念
                    也是自己一直想学但忽视的知识点
                    但没想到照样学的我一脸懵逼
                    并且学着学着越学越多,我擦咧
                    写了三千多字了还没写完,很多都没讲全
                    我太难了,不会要从入门到放弃吧…
                    JVM这块知识点最权威的便是官方文档了
                    就是全部都是用英文说明的,有点难
                    使用页面翻译又时常不准确
                    JVM内存结构主要分为五块:
                    程序计数器(The pc Register)
                    Java虚拟机栈(Stacks)
                    堆内存(Heap)
                    方法区(Method Area)
                    本地方法栈(Native Method Stacks)
                    根据我个人目前的能力水平
                    对其一一做出了理解,都整理在了笔记之中
                    其中栈、堆、方法区是最重要的3块
                    除此之外还接触了JVM体系结构:
                    类加载子系统(Class loader SubSystem)
                    运行时数据区(Runtime Data Areas)
                    这个也就是上述的JVM内存机结构
                    执行引擎(Execution Engine)
                    本地方法接口和本地方法库
                    这一块真的还有很多没弄懂
                    个人能力有限暂且只能做一个初步接触





                    IP属地:湖北来自Android客户端10楼2020-06-06 08:51
                    回复
                      自学Java第54天
                      终于学到动态代理了
                      这应该是JavaSE里面最难懂的知识点了
                      学它之前最好先弄懂装饰设计模式
                      什么是装饰设计模式?
                      用简单的一句话来说明就是:
                      装饰者,被装饰者,装饰者将方法增强。
                      如何理解这句话?
                      就可以用Java中的继承来理解:
                      子类相当于装饰者
                      父类相当于被装饰者
                      子类重写父类相当于方法增强
                      只不过就代码程层面而言
                      装饰设计模式比继承更加地具有拓展性
                      动态代理和装饰设计模式比较像
                      代理类就相当于装饰者
                      被代理类就相当于被装饰者
                      严格上说装饰设计模式就是一种静态代理
                      如何理解静态动态?
                      静态就是代理类是已经创建了的
                      动态就是代理类本身是没有创建的
                      那动态代理中代理类对象是如何获取的呢?
                      代理:Proxy,本身就是Java里的一个类
                      它有一个静态方法newProxyInstance()
                      将这个方法完全弄懂了也就弄懂了动态代理
                      其中该方法有三个参数:
                      被代理对象对应的类加载器
                      被代理对象对应的接口
                      其中都是利用反射技术获取对应的Class对象
                      还有一个InvocationHandler接口
                      调用处理器,它里面有一个invoke方法
                      该方法就是补充说明第二个参数接口的
                      根据具体的业务填充上业务逻辑
                      总之还是得多敲代码,多练几遍多写几遍就好了


                      IP属地:湖北来自Android客户端11楼2020-06-07 08:51
                      回复
                        兄弟 加油!


                        IP属地:湖北来自Android客户端12楼2020-06-08 03:21
                        收起回复
                          自学Java第55天
                          补充学习了一个知识点:泛型
                          学完它差不多Java基础部分就结束了
                          这个概念是学集合时接触的
                          当时觉得有点抽象就没有立马写出来
                          其主要广泛应用于框架之中
                          什么叫泛型呢?
                          它是一种保护机制
                          因为集合和数组不一样
                          一个集合可以存储不同的引用数据类型
                          这样就会出现一个问题
                          一个集合既存了A类型又存了B类型的数据
                          使用它的时候以为只存了A类型
                          调用时就会出现类转换异常
                          所以为了解决这个问题,就引入了泛型
                          泛型是一个变量,并不是具体的数值
                          它是需要我们自己去给泛型赋值的
                          泛型类:在创建对象的时候赋值
                          泛型接口:实现接口是赋值,也可以不赋值
                          不赋值的话,实现类也就成了泛型类
                          泛型方法:调用方法的时候赋值
                          泛型通配符
                          可以在不同场景下表示不同地泛型
                          具体更加详细地介绍已经整理在笔记中了


                          IP属地:湖北来自Android客户端13楼2020-06-08 08:45
                          回复
                            自学Java第56天
                            55天时间,算是基本学完了JavaSE吧
                            打算花个两天的时间做一个回顾
                            不然学到后面忘前面感觉不行
                            得想一个办法解决这个问题才行
                            对这段时间的学习做了一个初步的梳理
                            吐槽了一下自己遇到的一些难点
                            从数组开始,对于引用数据类型的理解
                            一直用了好长时间才弄清楚
                            然后就是面向对象
                            封装可不是简简单单private关键字
                            特别是对方法的封装,是一种设计思想
                            能够减少代码冗余,提高代码的拓展性
                            还有多态也是一样的道理
                            面向接口编程就是多态
                            匿名内部类是一道大坎,很抽象的一个概念
                            最主要的是这个没弄懂的话
                            函数式编程里的lambda表达式更会一脸懵逼
                            方法引用又比lambda表达式更加简洁
                            总之就是一环扣着一环的
                            数据结构与算法绝对是计算机里的两大基石
                            可惜都还没有具体去学习
                            8大排序算法都还没有动
                            现阶段想暂时放一放
                            多线程与高并发无疑是Java里很重要的一块
                            暂且只是学习了一些基本概念与使用
                            还未涉及到优化
                            集合和IO流,应该是使用最常见的存在了
                            集合用来装数据,IO流用来传递数据
                            网络编程,将计算机与计算机之间连接了起来
                            反射,基础拓展,高阶语法部分
                            反正就是反着来,一下子就有了**
                            动态代理,无疑是一个从入门到入土的知识点
                            总之,知识尚未完成,学习还得继续
                            未来的日子还得继续好好加油


                            IP属地:湖北来自Android客户端14楼2020-06-09 10:57
                            回复
                              2025-08-02 03:19:27
                              广告
                              不感兴趣
                              开通SVIP免广告
                              8张思维导图,55天学习笔记,入门JavaSE
                              对JavaSE部分再次回顾与总结
                              对知识点做了个详细地梳理
                              同时确实发现了存在的一个大问题
                              学到后面容易忘记前面的知识点
                              好在自己当初记的有笔记
                              哪块知识点忘记了拿出来看看就好了
                              打算网上找一些Java习题做做
                              看能不能录制个讲解视频什么的
                              录制视频的作用在于
                              很容易反馈出自己到底掌握的怎么样
                              就是每天时间实在是有限
                              看能不能挤出时间吧
                              没时间的话就只自己做做习题,不录制视频了
                              回顾的同时也发现忘记了一些知识点
                              比如说正则表达式就给忘记了
                              只能说以后再有机会再补上吧
                              最后的最后
                              今天开始就要进入JavaWeb的学习了


                              IP属地:湖北来自Android客户端15楼2020-06-11 08:13
                              回复