
实习经验
文章平均质量分 76
OldManWalk
虚心若愚,求知若饥。日积跬步,以致千里。
展开
-
摸鱼日记09/24 Android基础---Handler
1.Handler 的作用、要素以及流程答:负责跨进程通信,这是因为在主线程不能做耗时操作,而子线程不能更新UI,所以当子线程中进行耗时操作后需要更新UI时,将通过Handler将有关UI的操作切换到主线程中执行。拥有四大要素:Message(消息):需要被传递的消息,消息分为硬件产生的消息如按钮、触摸和软件生成的消息。MessageQueue(消息队列):负责消息的存储与管理,负责管理有Handler发送过来的Message。读取会自动删除消息,单链表维护,插入和删除上有优势。其next是无限循原创 2021-09-24 09:57:07 · 183 阅读 · 0 评论 -
实习日记 09/07 day44 高效Java---类与接口
概览类与接口是Java程序设计语言的核心,也是Java语言的基本抽象单元。Java语言提供了许多强大的基本元素,供程序用来设计类和接口。首先老生常谈的设计模式的六大原则:开闭原则对扩展开放,对修改关闭里式代换任何基类可以出现的地方,子类一定可以出现。LSP是继承复用的基石,只有当派生类可以替换掉其他基类,且软件单位的功能不受到影响时,基类才能真正被复用,而派生类也能够在基类的基础上增加新的行为。就好像花木兰替父从军,她也能打仗,而且由于扩展了年轻的功能,她还能更好的发挥自己的特性。。同时李氏原创 2021-09-23 11:29:31 · 454 阅读 · 0 评论 -
摸鱼日记09/23 Android基础---Android中的线程
线程线程池的好处与使用场景,和具体参数与底层实现Android中独有的线程类AsyncTask原理AsyncTask的参数使用AsyncTask的注意事项AsyncTask使用不当的缺点HandlerThread的使用IntentService的使用分析IntentService和Service的区别线程池的好处与使用场景,和具体参数与底层实现答:使用线程池的好处是减少在创建和销毁线程上所花费的时间以及系统资源的开销,解决资源不足的问题。如果不使用线程池,有可能造成系统创建同类线程而导致消耗完内存或有过原创 2021-09-23 10:11:29 · 250 阅读 · 0 评论 -
实习日记 09/06 day43 高效Java---toString、clone和Comparable
概览始终要覆盖toString在实际应用开发中,toString应当返回对象中包含的所有指的关注的信息,这样在实际开发的时候,可以通过toString打印出一切你想知道的信息,在输出日志的时候至关重要。无论是否指定格式,都为toString返回值中包含的所有信息,提供一种编程式的访问途径。谨慎的覆盖clone @Override protected Object clone() throws CloneNotSupportedException { retur原创 2021-09-22 16:44:48 · 379 阅读 · 0 评论 -
实习日记 09/03 day42 高效Java---Equals
概览Object是一个具体得类,设计它的目的是为了扩展,它所有的非final方法(equals、hashCode、toString、clone和finalize)都有明确的通用约定,因为他们被设计成要覆盖的,任何一个类,它覆盖这些方法的时候,都有责任遵守这些通用约定,其他依赖于这些约定的类,就无法正常工作。覆盖Equals时需遵守的约定覆盖equals方法看起来比较简单,但是覆盖方式会导致错误,并且会造成严重的后果。最容易避免这种问题的方法就是不覆盖equals方法,在这种情况下,类的每个实例都只与原创 2021-09-22 10:39:57 · 349 阅读 · 0 评论 -
摸鱼日记 09/22 Android基础--Fragment
概览Android四大组件为Activity、Broadcast、Service、ContentProvider,但还有一个重要的组件Fragment,就像路飞是新晋五皇一样,虽然出道晚,但是在生命周期、使用频率上不输于四大组件,它可以灵活地加载到Activity中。Fragment的定义Fragment是显示在Activity中的Activity,Activity可以视为一个较大的项,每次切换Activity都不可避免的有转跳画面的产生,Fragment存在于Activity中,也可以显示一些内容原创 2021-09-22 09:56:00 · 166 阅读 · 0 评论 -
摸鱼日记09/18 day9 Android基础---ContentProvider
啥是ContentProvider内容提供者(Content Provider)主要用于在不同的应用之间实现数据共享的功能,他提供了一整套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访问数据的安全性。目前内容提供者是Android实现跨平台共享数据的标准方式。不同于文件存储和SharedPreferences存储中的两种全局可读可写操作模式,内容提供者可以选择只对那一部分内容进行共享,从而保证程序的隐私数据不会泄露的风险。uri:指定查询某一个程序的某一张表projection:原创 2021-09-18 17:54:45 · 179 阅读 · 1 评论 -
摸鱼日记 09/17 day8 Android基础---Broadcast
啥是Broadcast在Android中没有一种广泛运用于应用程序之间传输信息的机制,Android中我们发送广播内容实际上是一个Intent,在这个Intent中可以携带我们要发送的数据。应用:同一app内有多个进程的不同组件之间的消息通信不同app之间的组件消息通信广播的种类:无序广播context.sendBroadcast(Intent)方法发送广播,不可被拦截,当发送的数据,接受者是无法修改的。类似于自来也的忍术:手里剑全部扔出之术。有序广播context.sendO原创 2021-09-18 10:02:44 · 135 阅读 · 0 评论 -
摸鱼日记 09/16 day7 Android基础----Service
Service基础service是一个可以在后台长时间运行的操作的没有用户界面的组件,运行于UI线程,因此不能进行耗时操作。由于Service是运行在UI线程中的,是绝对不能进行耗时操作的,而Thread开启的子线程是可以进行耗时操作的,但是Thread开启的子线程不能直接对UI进行操作,否则极有可能直接让程序崩溃。Service的启动方式StartService()方式开启的Service步骤:定义一个类继承Servcie在AndroidManifest.xml文件中配置该Service原创 2021-09-17 17:30:40 · 187 阅读 · 0 评论 -
摸鱼日记09/15 day6 Android基础---Activity
Activity概览1. ActivityActivity的形态生命周期异常情况下的生命周期Android任务栈简介Android的启动模式系统默认的启动模式Standart:singleTop启动模式singleTasksingleInstance模式IntentFlag 启动清空任务栈Activity组件之间的通信概览1. ActivityActivity是整个Android app直接与用户进行交互的核心组件,是用户交互的第一接口,提供了一个用户完成指令的窗口,当开发者创建Activity之后原创 2021-09-17 17:06:48 · 419 阅读 · 0 评论 -
实习日记 09/02 day41高效Java -- 创建和销毁对象
概览原创 2021-09-17 09:31:09 · 125 阅读 · 0 评论 -
摸鱼日记 09/14 day5 Android内核--Android启动!
概览Android设备的启动流程经过3个阶段,Boot Loader,Linux kernel和Android系统服务,严格来说Android系统实际上是运行于Linux内核之上的一系列服务进程,并不能算是一个完整意义上的操作系统。作为Android第一个进程,init将通过解析init.rc来陆续启动其他关键的系统服务进程,其中最重要的就是ServiceManager,Zygone和SystemServerAndroid中的DNS服务器—ServiceManager孕育新线程和进程—Zygot原创 2021-09-15 18:39:45 · 133 阅读 · 0 评论 -
摸鱼日记 09/13 day4 Android进阶之光---网络编程与架构
概览网络分层网络分层就是将网络节点所需要的数据的发送或者转发、打包或者拆包,以及控制信息的加载或者拆出等工作。物理层该层负责比特流在节点间的传输,即负责物理传输。该层的协议与链路有关,与传输介质也有关系数据链路层该层控制网络层与物理层之间的通信,主要功能是如何在不可靠的物理线路上进行可靠的数据传输,为保证传输,从网络层接受到的数据被分割成特定可被物理层传输的帧,帧是用来移动数据的结构包,它不仅仅包括原始数据,还包括发送方和接受方的物理地址以及纠错和控制信息。其中地址包括帧将发往何处,而纠错原创 2021-09-15 14:34:19 · 145 阅读 · 0 评论 -
摸鱼日记09/10 day3 安卓设计内核---Android进程/线程管理
概览原创 2021-09-15 09:27:15 · 141 阅读 · 0 评论 -
实习日记 09/01 day40 java并发艺术--Java中的线程池
概览Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。线程池的好处:降低资源消耗通过重复利用已创建的已创建的线程降低线程创建和销毁造成的消耗提高响应速度当任务到达时,任务可以不需要等到线程创建就能立即执行提高线程的可管理性线程是稀缺资源,如果无限的创建,不仅会消耗资源系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。Executor框架在HotSpot VM的线程模型中,Java线程(java.lang.Thr原创 2021-09-14 16:38:01 · 119 阅读 · 0 评论 -
实习日记 08/31 day39 Java并发艺术--Java并发容器和框架
概览ConcurrentHashMap线程不安全的HashMap在多线程情况下,使用HashMap进行put操作会引起死循环,所以在并发情况下不可以使用HashMap public static void main(String[] args) throws InterruptedException { final HashMap<String,String> map=new HashMap<String,String>(2); Thre原创 2021-09-14 09:00:47 · 159 阅读 · 0 评论 -
实习日记 08/30 day38 Java并发艺术---初步学习JUC
JUC工具类概览Lock接口概览Lock接口锁是用来控制多个线程访问共享资源的方式,一般来说,一个锁可以防止多个线程同时访问共享资源,有些锁例外,如读写锁原创 2021-09-13 17:26:28 · 204 阅读 · 0 评论 -
摸鱼日记09/09 day2 Android设计内核 ---操作系统基础
概览操作系统概念操作系统主要负责两个层面的任务:面向下层管理硬件。这里的硬件是笼统的概念,他包括CPU、内存、Flash、各种I/O设备等系统中的所有的硬件元素面向上层操作系统要为用户提供可用的人机交互界面,同时也要为第三方程序提供便捷、可靠、高效的API。这样的应用上层就不用之间面向硬件,从而大大的缩短了应用开发时间。计算机操作系统是负责管理系统硬件,并为上层应用提供稳定编程接口和人机交互界面的软件集合...原创 2021-09-13 16:55:52 · 324 阅读 · 0 评论 -
摸鱼日记09/08 day1 Android设计内核 ---Android系统基础
Android系统基础概览Android系统发展历程Android系统的特点Android系统框架两个月前,我作为一名Java实习生入职亚信科技,在这里学到了很多,老大和组长都对我很照顾,也独自负责了一个小的需求。但是我还是没忘记,当初我是应聘Android开发进的公司,结果稀里糊涂的被安排进缺人手的Java后端实习岗位,然后一干就是两个月。如果再不复习我的Android技能,恐怕以后就真的与Android无缘了,所以从今天开始除了实习日记,还要多写一篇Android日记,来加强我的Android技能。原创 2021-09-08 16:58:59 · 190 阅读 · 0 评论 -
实习日记 08/27 day37 理解JVM--从JVM理解并发part2
JVM并发理解概览线程安全锁优化后记概览线程安全当多个线程访问同一个对象时,如果不用考虑这些线程在运行环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方法进行任何其他的协调操作,调用这个对象的行为都可以获得正确结果,那这个对象是线程安全的线程安全的代码都必须具有一个特征:代码本身封装了所有必要的正确性保障手段(如互斥等待等),令调用者无需多关心多线程问题。从强到弱的线程安全:线程安全的实现方法:锁优化后记JVM这本书到此已经看完一遍了,但是由于计算机组成原理、操作系统原理原创 2021-09-06 16:46:02 · 109 阅读 · 0 评论 -
实习日记 08/25 day35 理解JVM---组原中的内存划分
概览原创 2021-09-06 13:01:17 · 87 阅读 · 0 评论 -
实习日记 08/26 day36 理解Jvm---从JVM理解并发
概览JVM从本质上来讲,其本身就是一个虚拟计算机+操作系统,也正因为它有自己的内存划分规则、程序运行规则等内容,才使得JVM可以跨平台运行。在操作系统中有一个重点的章节为调度策略,对于JVM来说,其线程的调度策略为抢占式,当涉及到生产者消费者问题时,通过同步工具可以实现协同式调度。虽然对于JVM的线程来说,具有优先级这个属性,这个属性官方不建议使用,因为无法保证线程调度策略严格按照优先级来执行,例如线程池中的线程调度策率就取决于采用的阻塞队列。如果从JVM的角度去理解线程,则需要重点关注线程同步工具的原创 2021-09-06 10:15:58 · 328 阅读 · 0 评论 -
实习日记 08/24 day34 理解JVM---Java并发part1基础内容
Java并发艺术概览概览原创 2021-09-03 17:02:55 · 246 阅读 · 0 评论 -
实习日记 08/20 day32 理解JVM--虚拟机字节码执行引擎
概览原创 2021-08-30 14:24:01 · 180 阅读 · 0 评论 -
实习日记 08/19 day31 理解JVM--理解虚拟机类加载机制
概览虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成了可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制,内存是程序运行的地方,但是地方宝贵,寸土寸金不可能一堆堆的类一窝蜂的涌上来占满内存,在Java语言中,类型的加载、连接和初始化过程都是在程序运行期间完成的,为Java应用程序提供高度的灵活性,Java中天生可以动态扩展的语言特性就是依赖运行期动态加载和动态链接这个特点实现的,使用Java预定义的和自定义的类加载器来实现让一个本地应用程序在运行时从原创 2021-08-25 08:07:51 · 126 阅读 · 0 评论 -
实习日记 08/23 day33 理解JVM---Java核心卷中的并发
概览 Part 1首先是Java基础中关于并发的只是理解:顶层的并发马德邦吃着火锅唱着歌,火锅没有阻塞他唱歌,同时唱歌也没有阻塞他吃火锅,可是马县长只有一张嘴他是怎么做到的呢?或许你的计算机有多个CPU,又或许你的CPU有多个核心,但是进程的数目并不是由CPU数目限定的...原创 2021-08-30 10:56:45 · 532 阅读 · 0 评论 -
实习日记 08/18 day30理解JVM---类文件的结构
概览现在来到了虚拟机执行子程序部分,在此部分我打算结合Java核心技术卷一的部分内容与深入理解Jvm相结合来写我对Java类的理解,从表层一直深入到底层。Java程序就像披萨,我们把原材料备好,一股脑的塞入编译器,这边自动装盘送入JVM这个烤箱,不一会就出来了香喷喷的披萨。类是什么?类就是披萨上的原料表上的原料,Java是面向对象的,而对象从属于某一个类,原料表上可不会写具体哪一块番茄,但是我们知道我们吃到的具体的起到调味的作用的红红的东西,这个东西(对象)就是属于番茄(类)。...原创 2021-08-23 18:36:54 · 103 阅读 · 0 评论 -
Mybatis:关于#{}和${}遇到的问题
问题:在写DAO层代码时,有多个数据库名称形如t_xxxxxxxxx_abc,当时的DAO层写法为t_xxxxxxxxx_#{name},结果屡屡报错#42000,后查询的值如果是拼接的话应采用t_xxxxxxxxx_${name},但是改完之后依然赋值错误,经过查询现写出解决方法。解决方法:#{}和${}的区别在Mybatis中#{}和${}都是用于动态传值的,但是使用#{}相当于自动加了单引号,按照此写法t_xxxxxxxxx_#{name}得到的t_xxxxxxxxx_‘abc’这种写法是肯原创 2021-08-23 18:09:57 · 739 阅读 · 0 评论 -
实习日记 08/17 day29 理解JVM--虚拟机性能监控与故障处理工具
概览原创 2021-08-23 13:44:41 · 735 阅读 · 0 评论 -
实习日记08/16 day28 理解JVM--理解内存分配策略
概览理解原创 2021-08-23 08:44:47 · 140 阅读 · 0 评论 -
实习日记08/13 day27 理解JVM--垃圾收集器
概览原创 2021-08-20 08:34:24 · 314 阅读 · 0 评论 -
实习日记 08/12 day26 理解JVM--Java内存区域与内存溢出异常
总览运行时内存分配Java内存溢出异常深入理解JVM中的内容:Java内存溢出异常的种类:栈溢出堆溢出永久代溢出无法创建线程补充:以下内容来自Java性能权威指南:内存溢出错误的原因:5. JVM没有原生内存可用6. 永久代或者元空间内存不足7. Java堆本身内存不足8. JVM执行GC耗时太多当出现第一种问题是,原因与堆根本无关。而当出现永久代或者元空间内存不足,根源可能有两种情况:第一种就是应用使用的类太多,超出永久代的默认范围。第二种则是类加载器的内存泄漏,常原创 2021-08-19 13:03:42 · 147 阅读 · 0 评论 -
实习日记08/11day25 理解JavaWeb-理解Spring
总览原创 2021-08-17 08:26:05 · 254 阅读 · 0 评论 -
实习日记08/10 day24理解JavaWeb --理解小丑猫Tomcat
Tomcat作为一个工具,就像其他工具一样,认识它首先需要关注的是它能做什么以及它怎么用。Tomcat是Web 应用服务器,它可以运行我打包好的war文件,并作为服务器运行在后台,这样我可以通过网址访问我写好的网站。Tomcat需要先下载,安装配置环境,然后只用把打包好的文件放入指定目录即可。具体的安装与使用方案可以参考链接: 菜鸟教程.就像拆开机械表后盖一样,打开Tomcat,我们想要理解Tomcat如何发送请求、如何处理多用户同时请求、它的的多级容器是如何协调工作。思维导图有需要的可以私信原创 2021-08-14 15:13:17 · 156 阅读 · 0 评论 -
重回Hello World
Hello Worldpublic class First { public static void main(String[] args) { System.out.println("Hello World"); }}以Java类型的文件,虚拟机并不能识别这种写法,需要通过Javac编译后得到:Javac是Java编译器,通过学习编译原理,可以知道编译器的作用的基本就是:词法分析语法分析语义分析代码优化这几种,经过编译器翻译后得到.class文件原创 2021-08-10 12:46:39 · 125 阅读 · 0 评论 -
实习日记 08/09 day23 理解JavaWeb -- Session与Cookie
概览Cookie和Session都是为了保持用户访问的工具,来简化方便业务的实现,简化服务端的程序设计,提高访问性能。可以通俗的理解Cookie是存储在客户端的一部分信息,而Session是存储在服务器上的一部分信息,除此之外,Cookie和Session也有自己要面对的一些问题,如Cookie的安全性问题和Session的多平台问题。...原创 2021-08-10 12:12:31 · 126 阅读 · 0 评论 -
Static关键字
理解Static关键字基本使用public class StaticTest { public static int staticVar=0; public int instanceVar=0; public void Speak(){ System.out.println(instanceVar); } static void Speak2(){ System.out.println(staticVar); } p原创 2021-08-10 10:05:31 · 160 阅读 · 0 评论 -
实习日记 08/06 day22 理解JavaWeb--理解Servlet
总览B/S模式对互联网的改变是巨大的,我们只需要下载一个浏览器,输入url就可以实现看新闻、听音乐和玩游戏等等操作,无需下载额外的客户端,浏览器就像一个万花筒,想看什么直接输入就行。对于那些有业务的网页,我们只有静态页面是远远不够的,还有需要有动态的业务处理,这是我们就需要后端来实现,JavaWeb技术是目前主流的互联网Web技术之一,,而Servlet则是JavaWeb技术的核心。Servlet 为创建基于 web 的应用程序提供了基于组件、独立于平台的方法。总览Servlet的工作流程:Servl原创 2021-08-09 20:12:02 · 288 阅读 · 0 评论 -
实习日记 08/05 day21 理解JavaWeb--线程通信与进程通信
概览首先啥是线程,啥是进程。首先线程和进程是两个截然不同的概念,线程是CPU调度的最小单元,同时线程是一种有限的系统资源。而进程一般是指一个执行单元。虽然定义上毫不相干,但进程和线程之间是有包含关系的:一个Android程序至少要有一个进程,而一个进程最少要有一个线程实现功能。同时如果深入到虚拟机去理解,,安卓为每一个进程都分配了一个虚拟机,该虚拟机的栈堆等不共享,静态变量、对象等无法共享,当一个程序以多进程的模式运行,可以说线程同步机制完全失效。所以理解多进程也能加深对多线程的理解。多线程要考虑的原创 2021-08-05 17:28:44 · 204 阅读 · 0 评论 -
Abstract 和 Interface区别(以线程的实现为例)
Thread的抽象类与接口实现总览实现Runnable和Callable、Future接口方式继承MyThread来实现总览可以发现想要理解Abstract和Interface的区别,以线程为例是最好的方式实现Runnable和Callable、Future接口方式定义runnable接口的实现类,重写run()方法创建Runnable实现类的实例,丟入到Thread对象调用线程对象的start()方法来启动线程首先是Runnable接口的实现:public class TreadB原创 2021-08-04 10:11:23 · 119 阅读 · 0 评论