Projects

来源:互联网 发布:linux ant是否安装 编辑:程序博客网 时间:2024/05/23 19:18

  • Projects
    • 项目需要想的
    • SOA架构
    • 中间件
    • RESTful
    • Json
    • override
    • 持久化
    • 为什么使用框架
    • 多态
    • 静态与动态
    • 继承代理组合
    • git

Projects

项目需要想的

  • 整个项目的架构?
  • 做了啥功能吖?
  • 用的什么技术实现的吖?
  • 知道原理不?
  • 开发过程中遇到哪些问题?
  • 知道这些名词么?

SOA架构

Service-Oriented Architecture 服务面向架构
印刷术:标准化+复用性+灵活可排

中间件

介于操作系统和应用程序之间的产品,中间件

RESTful

首先这个项目是基于RESTful的设计原则

Json

Json服务端向WEB端的传输数据格式

@override

最常用的重写:tostring()

持久化

Mybatis是持久层框架:将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。

String statement = "me.gacl.mapping.userMapper.getUser";//映射sql的标识ID组合字符串//根据配置ID执行配置文件中的sql语句,和java文件无关User user = session.selectOne(statement, 1);//把查询结果给到相应的POJOSystem.out.println(user);

为什么使用框架

  • 尽量做到信息放在可修改的配置文件(脱离源文件的ID标识)中,这样每次修改,就避免修改.java文件并重新编译成.class文件。

多态

  • 编译时多态:重载,静态方法会直接根据参数进行编译(比如:方法体内的常量折叠String的‘+’)
  • 运行时多态:重写,参数写的父类,但传进去的可以是父类或者子类,不确定
public class A {   public int compute(int input) {          //method #3        return 3 * input;   }        } public class B extends A {   @Override   public int compute(int input) {          //method #4        return 4 * input;   }        }//子类B中的compute(..)方法重写了父类的compute(..)方法。如果编译器遇到下面的代码public int evaluate(A reference, int arg2)  {     int result = reference.compute(arg2);}//编译器是没法知道传入的参数reference的类型是A还是B。因此,只能够在运行时,根据赋给输入变量“reference”的对象的类型(例如,A或者B的实例)来决定调用方法#3还是方法#4.

静态与动态

  • static中的”静态“
  • 静态数组的”静态“指:不能在runtime时根据运行结果作为条件而产生动态变化。所以说”继承是静态的,它发生在编译时“

继承,代理,组合

  • 继承:多态工具
    代理,组合:代码复用

  • 代理

public class Parent {    public String saySomething( ) {          return “Parent is called”;    }}public class Child  {     public String saySomething( ) {          return new Parent( ).saySomething( ) +  “, Child is called”;    }}
  • 组合
public class Child  {     private Parent parent = null;     public Child( ){          this.parent = new Parent( );     }     public String saySomething( ) {          return this.parent.saySomething( ) +  “, Child is called”;    }}

注释和配置文件

  • 注释:需要改源码,重新打包
  • 配置文件:不用改源文件,只需改类的相应配置实现
<beans>      <bean id = "car" class="com.test.Car">          <property name="wheel" ref = "wheel"></property>      </bean>      <bean id = "wheel" class="com.test.Wheel"></bean>  </beans>  

相当于

@Configuration  public class Conf {      @Bean      public Car car() {          Car car = new Car();          car.setWheel(wheel());          return car;      }      @Bean       public Wheel wheel() {          return new Wheel();      }  }  

编译时织入:AspectJ
运行时织入:SpringAOP

ProcessedJoinPoint用于环绕通知,使用processed()方法来执行目标(指被通知的人是目标)方法。

使用来给通知(advice)方法传递参数

POST:http://127.0.0.1:8080/test/users
Body(raw):{“users”:[“yangchao”,”lixin”]}

Body下的Pretty:
{
“status”: 200
}

我从浏览器发送get请求时,只有url。
发送POST请求时,还有Json内容体。
看错误信息,是看causedby,第一行
Json字段序列化后,根据信息可以反序列化成合适的对象,比如map或者user
将对象返回成Json数据

用户API接口设计
反射使用:将一个user类的属性(私有)及值放入map中

java.lang.reflect.Field;
记录找Json的解决方案:首先想清楚自己需要一个怎样功能的过程,
看我的现有知识能不能拼接实现。期间肯定有猜测,然后尝试,断点,但效率肯定是低的,因为程序启动太慢,而且尝试中说不定会有新问题。不行百度,或者引入第三方的jar包。

关于私有属性无法反射访问的error
是因为要设置私有可见项为true。这句话之前没仔细看,以为是设置成员属性,其实不是,我漏掉了。所以在第一次尝试时,就应该做到明察秋毫。写程序确实是要付出很高的仔细度的。

密码验证工具:将密码MessageDigest处理,将任意大小的信息转换成固定长度的hash值,再将随机数字节数组加到其后,用encodeBase64呈现给人看。

设计想法:后面跟着随机数防止被破译。
但是自己其实知道破译的规则,每次将用户的密码与数据库的加密密码进行比对。是自然的。

依赖项:build.gradle

自己配同名日志类:就不能用import。全名称调用类

单例模式:

Class A{    private A a;    //存疑 }

关于JRE,JDK
C盘下,有个java文件,里面是jre
programfiles里有个java,里面是jdk1.8
programfiles(x86)里面有个java,里面是jre1.8
install,maven项目时,需要用到jre
jdk中与jre好像。

role角色表:角色ID,角色名,角色权限。
角色对应人员。
dept对应展开的树的项,pdid是“局”,name是“班”,这两个信息唯一确定一个原子项。
超高压输电公司新建“局”部门,“局”部门新建“班”部门,“班”部门新建“用户”。这个层级是固定的。
position是职位

话说闭着眼睛我都知道项目结构:
1. aop
2. controller
3. service
util event exception log
4. persistence
5. domain
6. config

5.2 什么情况下使用ActiveMQ?

多个项目之间集成
(1) 跨平台
(2) 多语言
(3) 多项目
降低系统间模块的耦合度,解耦
(1) 软件扩展性
系统前后端隔离
(1) 前后端隔离,屏蔽高安全区

mysql语句:

    insert into table(id,name)  values(1,"lixin")    select * from db.table where {value=2}    UPDATE `dept` SET `pdid`=#{pdid} WHERE `did`=#{did}

mycat:
发现MyCAT更像一个提供转发和结果合并功能的代理,只是对SQL和结果进行了process,分片

单例模式 的 好处
fastJson阿里

@ResponseBody返回的不是html页面,而是Json数据等

会话
请求报文:
方法,地址,协议及版本,
请求头,
请求体。

响应报文:
协议,版本号,状态码:状态信息
响应头,
响应体。

状态码:
1xx:正在处理
2xx:处理成功
3xx:给别人处理
4xx:不成功,客户端出错
5xx:不成功,服务端出错
303:See Other
304:Not Modified
404:Not Found

感受最深的一件事:
改Bug,就是转了一圈,又回到原点那种。因为新人经验少,对错误信息处理少,知识有盲区。所以对有些简单的问题可能要耗上十几个小时的时间。这时候是非常希望自己处在一个团队中,能请教他人的,因为不得不承认我一个人确实解决不了一些也许在别人看来简单的问题。所以我非常希望一开始有一个好的team或者培训能带我少走那些坑。

尽量不返工。

有些方面,也许永远不在一个层次。

request获得参数,指的是URL
无法获得请求体的信息,所以只能用注解把请求体拿出来,再把请求体放入到env中的JsonPostData中

等级越小,优先级越高

UUID

git

  1. 本地作了提交
  2. $ git push origin master
原创粉丝点击