java吧 关注:1,276,491贴子:12,789,775

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

只看楼主收藏回复

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


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


      IP属地:湖北来自Android客户端23楼2020-06-08 08:45
      回复
        大佬自学从哪里入手啊


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


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


            IP属地:湖北来自Android客户端26楼2020-06-11 08:12
            回复
              自学Java第58天
              终于开始Javaweb的学习了
              数据库MySQL、JDBC、前端还有项目
              还不知道到时候找一个什么项目做做
              今天安装了MySQL,遇到了一个问题
              死活就是卡在Starting Server这一步
              折腾了我好久才解决
              这也是我第一次感受到类似于“BUG”的存在
              以后遇到BUG应该也差不多是这种感觉吧
              解决过程的时间好久
              但解决问题的那一刻还是蛮开心的
              当时就在想:
              马丹网上的各种解决方案都是什么垃圾
              卸载软件重装,删注册表,删残留文件夹
              关闭防火墙,重启……等各种方法都试过了
              就是死活解决不了这个问题
              没一个说到点子上的,还不如自己写个方案呢
              当然啦,其实网上写的还是很有用的
              只是我遇到的问题还要加上一步才能解决
              这种遇到问题不断地尝试解决的过程还是蛮爽的
              就***太浪费时间了
              嘛不管如何最终还是将问题解决了


              IP属地:湖北来自Android客户端27楼2020-06-11 08:13
              回复
                自学Java第59天
                原本以为学Java只需要会Java语言就好了
                这突然怎么又跑出了一个SQL语言
                我擦咧,什么情况?
                好吧毕竟是数据库,不是sun公司的
                肯定也会有自己的语言
                不过SQL语言倒是通用的
                也就是说无论是什么数据库都可以用SQL?
                既然如此的话那学就学吧
                突然想起来后面还要学前端
                不会也要学前端专门的语言吧?
                我不是学Java的嘛?
                怎么除了Java语言还要学这么多语言
                初步感觉了下用SQL语言操作数据库
                今天主要是数据仓库,还没有涉及到表的操作
                感觉还好,不算难
                就是每次输入命令行时经常忘记加分号
                老实说真的有点不习惯这个黑乎乎的窗口
                并且命令行要将整个单词都写下来不能出错
                不像在IDEA里面,直接输入一个字母就能自动补全
                嘛,听说Linux系统就是命令行操作
                并且对于程序员来说很重要
                看来要多多使用命令行让自己慢慢习惯了


                IP属地:湖北来自Android客户端28楼2020-06-12 06:50
                收起回复
                  2025-09-02 09:48:30
                  广告
                  不感兴趣
                  开通SVIP免广告
                  楼主加油


                  来自Android客户端29楼2020-06-12 06:59
                  收起回复
                    你在学java之前,有学过其他语言吗?


                    来自iPhone客户端30楼2020-06-13 03:36
                    收起回复
                      自学Java第60天
                      对于数据表而言
                      最常见的肯定还是操作表里面的数据
                      也就是各种字段(属性)
                      但是本着学习加深记忆的原则
                      还是详细地学习了下对表本身的操作
                      如果将数据表和Java联系起来
                      行就相当于是Java中某个类对应的对象
                      列就相当于该类中的成员变量
                      同样的,操作数据表也是增删改查:
                      增,create即创建数据表
                      删,drop即删除数据表
                      查,show即展示数据表,
                      desc即描述数据表,也就是详细信息
                      其中修改数据表是最复杂的
                      因为对数据表里的列增删改都属于修改
                      alter即修改数据表
                      对数据表里列的操作
                      增,add即增加数据表中的某列
                      删,drop即删除数据表中的某列
                      改,change即修改数据表中的某列名
                      motify即修改数据表中某列的约束
                      对数据表本身的修改
                      rename即修改数据表名
                      character即修改数据表的编码表
                      以上便是对数据表本身的各种操作


                      IP属地:湖北来自Android客户端31楼2020-06-13 15:21
                      回复
                        自学Java第61天
                        毫无疑问数据表中的数据记录
                        绝对是最常见使用最频繁的
                        这也很好理解
                        谁有事没事对数据库或者表本身操作
                        大多数时候还是数据表中的记录
                        同样的道理。数据记录也是增删改查
                        并且查询太重要太重要了
                        感觉知识点也远远多于增删改之和
                        昨天主要是学了增删改,今天再学习查询
                        并且因为发现查询知识点太多
                        所以安装了可视化化工具Navicat
                        体验了下,发现真香……
                        增删改总结:
                        insertinto+表名+列名+values+对应值
                        即为增加数据:关键单词insert into
                        delete from+表名
                        truncatetable+表名
                        即为删除数据:关键单词delete,truncate
                        update+表名+set列名+值
                        即为修改数据:关键单词update,set
                        其中后面都可以接一个where+判断条件


                        IP属地:湖北来自Android客户端32楼2020-06-14 08:54
                        回复
                          自学Java第62天
                          数据查询的学习,这也太多了吧
                          同时也对数据库的学习做了个总结
                          发现今天的查询比前面几天学的都要多
                          难怪一直听说增删改查中最重要的是查
                          然后我还发现这才仅仅只是单表查询
                          后面还有多表查询,我擦咧
                          查询语句一般可以划分成6种,
                          根据它的执行顺序可以很好地做一个回顾
                          第1步:from+表名
                          也就是得出表中所有的数据
                          第2步:where+指定条件
                          where条件查询,紧跟在from后面
                          其中条件可以涉及到SQL中的各种运算符
                          第2.5步:给列名起别名,as+别名
                          介于第2步和第3步之间
                          别名并没有改变列本身的名称,可以任意填写
                          where后面没法接别名,别名执行顺序在where后
                          第3步:分组查询,group by+列名
                          group,分组的意思
                          第3.5步:聚合函数
                          介于第3步和第4步之间
                          count()统计数量、sum()求和、avg()平均值
                          min()最小值、max()最大值等等
                          第4步:having+指定条件
                          和where类似,不过它的执行顺序在后面
                          所以既能接别名,又能接聚合函数
                          第5步:select+查询语句
                          查询出对应的数据,也就是结果集
                          第6步:排序查询
                          desc表示降序,asc表示升序
                          其中升序是默认排序,可以省略


                          IP属地:湖北来自Android客户端33楼2020-06-15 09:29
                          回复
                            自学Java第63天
                            学习了数据库备份与恢复
                            既然如此,那应该不怕删库跑路的呀
                            我猜测可能是因为在某些大公司
                            数据量太庞大了,故不能全都备份下来
                            emm,大概也许可能是这样的吧
                            今天还是关于数据查询
                            学的同时做了一个回顾,用sql语句创建表
                            结果表字段之间不自觉地用分号隔开
                            琢磨了一会才发现应该用逗号
                            哎哟,感觉要被自己给蠢哭了
                            昨天学的仅仅只是单表查询
                            很多时候是需要用到多表查询的
                            数据表与数据表之间是有关联的
                            它们之间一共存在三种关系
                            一对一、一对多、多对多
                            它们之间是如何关联起来的呢?
                            在一张表上创建一个外键
                            与另一张表中的id关联起来即可
                            这在一对多表中适用
                            其中一对一也就是一种特殊的一对多
                            而在多对多关系中
                            是需要创建一张中间表
                            在这张表中创建两个外键
                            分别和两张主表的id关联起来
                            今天呢主要涉及到多表的表设计
                            还未涉及到多表查询
                            会专门花时间来学习它


                            IP属地:湖北来自Android客户端34楼2020-06-16 08:13
                            回复
                              2025-09-02 09:42:30
                              广告
                              不感兴趣
                              开通SVIP免广告
                              自学Java第64天
                              令我万万没有想到的是
                              学个数据库竟然还会出现笛卡尔积
                              后面学着学着不会还有牛顿吧
                              牛顿、泰勒、拉格朗日以及傅里叶
                              传说中噩梦般的存在
                              已被我放入脑海最深处不敢轻易触碰
                              不过话又说回来
                              主要是多表查询时提到了笛卡尔积
                              但关系好像和其不大
                              毕竟笛卡尔积得到的数据很是冗余
                              更多的时候还是内连接和外连接
                              那如何理解内外连接呢?
                              表A、表B以及它们重合的部分C
                              内连接就是C
                              关键单词为innerjoin和on
                              左外连接就是A+C
                              关键单词为left outerjoin和on
                              右外连接就是B+C
                              关键单词为left outerjoin和on
                              全外连接就是A+B+C
                              关键单词为full outerjoin和on
                              都是一些见名知意的单词
                              全外连接的语法在MySQL中不通用
                              其采用的方式就是左外连接+右外连接
                              再加上关键单词union过滤重复数据


                              IP属地:湖北来自Android客户端35楼2020-06-17 07:50
                              收起回复