java反射

反射

java反射可以从配置文件中得到类的路径,创建一个属于这个类的Class对象,这样的对象一个类只有一个,这个对象就像一面镜子,通过这面镜子可以看到类的全部信息。

Properties properties = new Properties();
properties.load(new FileInputStream("D:\\project\\JavaTest\\javaCode\\src\\re.properties"));
String classfullpath= properties.get("classfullpath").toString();
Class cls = Class.forName(classfullpath);

Class类型就像其他类一样,通过它可以创建某个类的对象。

Cat cat= (Cat)cls.newInstance();

在java中,万物皆对象,类的字段,方法都可以看作一个类,因此把类的方法提取出来,过程是与正常创建对象相反的

Method method1 = cls.getMethod(method);
method1.invoke(cat);

在这里插入图片描述
java编译后会产生这个类的字节码文件,jvm调用类加载器ClassLoader的loadClass创建一个Class对象存在堆中,类只会被加载一次;在运行阶段,Cat cat=new Cat()就会使用该对象创建一个对象,并调用方法。
反射是解释执行,对执行速度有影响。可以发现Method和Field、Constructor类都继承AccessibleObject,里面有个方法setAccessible,作用是启动和禁用访问安全检查的开关。参数设置为True就可以关闭检查,提升速度。

简单工厂模式

简单来说就是工厂类负责提供产品,这个产品继承自同一个父类,这样在工厂中就可以根据不同需求创建不同类型的产品,实现多态。
详情

这几天遇到的问题:

  1. matplotlib绘制饼图标签重叠的问题。只能根据实际需求手动调整标签位置。我的调整如下
patch,text1=plt.pie(nums,
                labels=schools,
                shadow=False,  # 无阴影设置
                startangle=90,  # 逆时针角度设置
                pctdistance=0.6)  # 数值距圆心半径倍数距离
# patches饼图的返回值,text1饼图外label的文本,text2饼图内部的文本
for i in range(6):
   text1[-(i + 1)].set_position((0 + i * 0.1, 1.1 + i * 0.05))

实际发现最后6个因为占比小挤在一起的标签往右上方排列的效果最好。还有set_x,set_y方法。
在这里插入图片描述
2. matplotlib绘制饼图显示不全的问题。设置大小即可。

plt.figure(figsize=(6, 7))

在这里插入图片描述
3. elasticsearch统计求和

"aggs": {
     "sum_reply": {
         "sum": {
             "field": "reply_count"
         }
     },
}
  1. 寻找主帖的递归实现
  2. es时间滞后问题。一个大Bug,如果不是偶然发现真的不知道有这个问题。以为logstash会把mysql的值原封不动地迁移到es中。
    详见这篇博客
    因为我的数据已经全部导入es中,所以只有在检索的时候指定时区。因为还要把时间显示出来,所以还要对检索出的时间做处理。
def time_handler(target_time):
    _date = datetime.datetime.strptime(target_time,"%Y-%m-%dT%H:%M:%S.%fZ")
    eta = (_date + datetime.timedelta(hours=8)).strftime("%Y-%m-%d %H:%M:%S")
    return eta
  1. 使用django-crontab定时处理有个问题,就是我用matplotlib绘图的时候没有保存本地文件,导致后续写docx文档的时候找不到文件,其余的发送邮箱都没问题。直接用python执行也没问题。crontab任务的日志在/var/spool/mail/root查看。最后只能与django分离,独立写crontab任务运行脚本,可以顺利执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值