开始实习前我的技术特性主要是C/C++、嵌入式开发、QT编程、Unix编程,虽然对python、java、数据库的基础用法有学习了解,不过还是使用较少的。尤其是实习的时候开始做的是后端开发的工作,之前学习的内容远远不够,需要重新学习一些新的内容。在这里,我将对这两个月的实习内容做一下大概的内容总结,为后来的正式工作树立好方向。
在这两个月中,学习了JavaWeb、Spring框架、Docker、Redis、Mybatics、tomcat、Shell脚本、Java基础和Java多线程编程、Python还有一些常用的开发工具git、maven、jenkin、swagger等的常见用法。在后台开发中,逐渐往这
GPG:用于文件加密
CI/CD:持续集成/持续交付
CGI:通用网关接口
Jackson:一套用于Java的数据处理工具,包含三个组件Streaming/annotation/databind)
CAP理论、MVC模型。。。
也不过多说明,附上为大致后台开发的框架。一般而言,随着开发的持续发展,项目会变得越来越大,为了后期的减低项目的运维难度更多的是采用分布式开发而不是集群开发的方式,也就是微服务((架构师先分好模块,模块之间耦合性低,可以单独上线)的方式去部署服务。在微服务的开发中,会采用持续集成、交付的方式来开发,利用Jenkin来帮助可视化代码、项目,利用Maven项目来管理对库的依赖管理,利用Spring框架来开发各项后台的功能,利用Jackson来序列化和反序列化Session对象,利用nginx来负载均衡、反向代理服务器,利用Redis来存储一些不用频繁修改的数据,还有利用Mybatis来通过xml控实现对sql语句的使用等等。。。
(proxy类、concurrent、Logging、JUnit、JDBC、Ant(类似于C语言的makefile)、StringBuilder 、BufferedInputStream、Synchronized。。。)
多线程编程:
1、使用多线程:extrends、Tread类和implements Runnable接口;
2、常见方法:currentThread(),isAlive()、sleep()、getid()
3、停止线程:
threadA.interrupt() ——> 在当前的线程threadA打上停止状态标签,需要在线程中用this.interrupted()或this.isInterrupted()来判断是否打上了中断状态,手动地来停止操作。当该线程处于sleep()状态时,则会抛出InterruptedException达到直接停止的效果。
threadB.stop() ——> 暴力停止,线程S会直接停止 ,这个方法不建议使用!有可能会导致释放锁造成数据不一致性。
yield():主动释放资源;
4、线程安全级别:具有继承特性(A线程启动B,B线程与A一样),1-5(normal)-10,还具有随机性,级别越高概率越高而已。
5、synchronized:
同步方法和同步语句块两种。同步不具有继承性,出现异常时锁会自动释放;
脏读(例如设置属性是加锁的,获取属性没有加锁);由于String类的常量特性,一般不用String常量类来作为监视对象;
synchronized(class)——> 锁定类,区别锁定对象(synchronized(this)),且任意对象可以作为对象监视器;synchronized修饰代码块有volatile同步的功能;
死锁:只要互相等待对方释放锁就有可能出现死锁。
6、volatile:增加了实例变量在多个线程之间的可见性。不过不支持原子性。。
7、原子类:atomic.*
8、线程间通信:notify()、wait()、notifyAll()、waitlong()、join()、join(long)、sleep(long)、管道、TreadLocal——>实现每一个线程都有一个自己的共享变量(可比喻成一个存放数据的盒子,存放着没有一个线程的私有数据)
9、Lock ——synchronized的进阶
10、Timer:schedule(TimeTask task,Date time);schedule(TimeTask task,Date fistTime,long period);
schedule(TimeTask task,long dalay);schedule(TimeTask task,long delay,long period);
schedule(TimeTask task,Date fistTime,long perod);
11、单例模式:饿汉模式、懒汉模式、静态内置类、序列化和反序列化、static代码块、enum 枚举数据类型。
1、lambda:这是python支持的一种快速定义单行的最小函数,类似于C语言中的宏;
2、with open("XXX") as file:。。。:在open()所在的类对象存在__enter__()和__exit()函数在进入和结束时会自动对该对象进行处理,不需要try...except的形式去捕获异常,省去了忘记关闭句柄的问题。
3、迭代器:一个实现了__iter_方法的对象是可迭代的,一个实现了next方法的对象则是迭代器。
4、生成器:有两部分构成,生成器的函数和生成器的迭代器。(生成器也是迭代器、任何包含yield语句的函数称为了生成器。)
5、常用的标准库:os——与操作系统相关的函数;shutil——日常的文件和目录管理文件;gloal——提供了一个函数从目录通配符搜索出生成文件列表;sys——调用命令行参数,stdin、stdout、stderr;re——为高级字符串提供了正则表达式;math——浮点运算提供了对底层C函数库的访问;random——生成随机数;
6、网络访问:urllib.request——从url接收数据:smtplib——发送电子邮件;datatime——日期和时间
7、数据压缩:zlib、gzip、bz2、zipfile以及tarfile
8、性能度量:timeit、Timer
9、测试模块:doctest、unttest
见——> Shell脚本入门到上手
1、window展示目录树状图(文本形式)使用的cmd命令:tree ——文件夹树;tree /F ——文件夹和文件树。
2、Maven项目——整合了所有的jar包;Spring Boot——整合了所有的框架;
3、Visual Studio:最流行的windows平台应用程序开发集成环境; Visual Studio Code:跨平台编辑器,针对于写WEB和云应用的跨平台源代码编辑器;
4、Nginx:
upstream:写一组被代理的服务器地址,并配置负载均衡算法(热备、轮询、加权轮询、ip-hash。。)
配置:全局块:用户组、进程pid存放路径、日志存放路径等
event块:(用户与服务器的网络连接)每个进程的最大进程数、事件驱动模型选择等
http块:嵌套多个server块,配置代理、缓存、日志定义等大多数功能和第三方模块的配置等等
server块:配置虚拟主机的相关参数
location块:配置请求的路由,以及各个页面的处理请求
proxy_pass:请求转向服务器列表
负载均衡的几个状态参数:down、backup、max_fails。fail_timeout
5、Spring
两个核心特性:依赖注入(dependency injection、DI)和面向切面编程(AOP)
6、Spring Mvc 可以用“mock Mvc”来测试。。。
7、Spring Boot的四个主要特性:
Spring Boot Starter:对常用的依赖分组进行了整合,将其合并到一个依赖中;
自动配置:合理地推测应用所需的bean并自动化配置它们;
命令行接口(Command-line interface,CLI);
Actuator:为Spring Boot应用添加了一定的管理特性。
8、Java对象的序列化和反序列化:
分别对应:将对象转化为字节序列、将字节序列恢复为对象
常见场景:最常用的是Web服务器的Session对象,当有10万个Session对象内存会到导致吃不消,于是Web容器需要将对象先序列化对象,等要用的时候再将保存的对象还原到内存。
对象实现Serializable接口,要有序列化ID(serialVersionUID,用private、static、final、long修饰)。
实现方法:序列化 ——> 创建一个对象输出流,可以包装一个其他类型的目标输出流,如文件输出流;然后通过对象输出流的writeObject()方法写对象。
反序列化 ——> 创建一个对象输入流,可以包装一个其他类型的目标输入流,如文件流入流;然后通过对象输入流的readObject()方法读对象。http://www.hankcs.com/program/java-object-to-json-demo.html
(这种序列化后数据用文本工具打开都是乱码,而使用Jackson依赖库能够实现Json数据与Java对象的相互转换,并且Json数据可以直接打开阅读,入门可见——>五分钟Jackson入门)