使用公历类GregorianCalendar 使用公历类 GregorianCalendar,公历类 GregorianCalendar有方法setTimeInMillis(long);可以用它来设置从1970年1月1日算起的一个特定时间。请编程从键盘输入一个长整型的值,然后输出对应的年、月和日。例如输入:1234567898765,输出:2009-1-14 输入格式: 输入 1234567898765 (毫秒数) 输出格式: 输出 2009-1-14 (输出年、月和日,实际应该是2月,因为Java API 从0开始计算月份) 输入样例: 1450921070108 输出样例: 2015-11-24 import java.util.Calendar; import java.util.GregorianCalendar; import java.util.Scanner; public class Main { public static void main(String[] args) { GregorianCalendar date 继续阅读 >>


陈文浩 18/01/10 17:15:07
此文试图从JVM层面深刻剖析Java中的继承与多态,知识面覆盖class字节码文件,对象的内存布局,JVM的内存区域、分派,方法表等相关知识,内容整合于大量博客,知乎,书籍,并加上博主自己的理解,相信看完会对你大有裨益! 即使博主在JVM专栏已经有两篇博客对多态的实现机制进行了分析,但是今天在分析了一波继承的原理之后,发觉之前对于多态的讲述还不完整,在查阅的相关资料之后,决定在这一篇博客真正的将继承与多态讲透彻! 注:本篇博客有部分内容摘抄自:从JVM角度看Java多态。表示感谢~ 先来看一份代码: class Parent { protected int age; public Parent() { age = 40; } void eat() { System.out.println("父亲在吃饭"); } } class Child extends Parent { protected int age; public Child() { age = 18 继续阅读 >>


董恒毅 18/01/10 16:14:59
主要涉及到的类和实现文件有: Endian.h 提供了字节序转换的函数。 Socket.h/Socket.cc socketfd 的封装,提供了绑定地址、开始listen、接受连接等操作,并可设置套接字选项。 InetAddress.h/InetAddress.cc 套接字地址的封装,提供了多种方式初始化一个地址,还提供方法从地址中拿到 ip 和 port。 SocketsOps.h/SocketsOps.cc 封装了 socket 相关的一些操作,提供给 Socket 和 InetAddress 用。 这部分就是基本的 TCP 套接字编程和套接字选项的知识,代码逻辑也很简单,推荐看下 UNP卷一 的相关章节。 下面逐一看下这几个相关的文件。 字节序转换部分(Endian.h) #ifndef MUDUO_NET_ENDIAN_H #define MUDUO_NET_ENDIAN_H #include <stdint.h> #include <endian.h> namespace muduo { namespace net { na 继续阅读 >>


杜肖孟 18/01/09 15:14:11
实现一个string 类 /************************************************************************* > File Name: my_String.cpp > Author: 刘怪怪 > Mail: > Created Time: 2017年12月18日 星期一 09时51分40秒 ************************************************************************/ #include<iostream> #include<string.h> using namespace std; class my_String { public: int size1; //字符个数 char *ptr; //指向这个字符串 friend istream& operator>>(istream& os,my_String& str); 继续阅读 >>


刘嘉辉 18/01/09 14:49:53
2017数据结构课设 关于课设,格式上就不像课设报告写得那么详实了.这里就重点回想一下,自己在课设中遇到的问题以及一些感想了. 题目 : 这是一个关于图及图相关算法的程序,我给他起得名字叫<德高地图>. 简介: 实现最短路径(dijkstra),两点间最少转折数(BFS),两点间所有路径(DFS). 技术点: 使用数据库(没能实现数据库类的封装),vector容器做邻接矩阵,系统调用显示图片,其他都是常规操作. 需要温习的知识: MYSQL * conn; 数据库连接指针设全局 不能使用了就关 下次调用 再关 就会产生double free的情况 memory map 报告 关于查找 如查不到 不会返回空集 返回表头 此时应该使用 返回行数来判断 == 0 为查不到的 关于语句调用 create table 表名字 ( from int , name varchar(20)); select * from 表名字 where from = %s and name = %s ; 继续阅读 >>


刘嘉辉 18/01/09 14:40:25
eventfd 介绍 Linux 2.6.27后添加了一个新的特性,就是eventfd,是用来实现多进程或多线程的之间的事件通知的。 接口 #include <sys/eventfd.h> int eventfd(unsigned int initval, int flags); 这个函数会创建一个事件对象(eventfd object),返回一个文件描述符,用来实现进程或线程间的等待/通知(wait/notify)机制。内核为这个对象维护了一个无符号的64位整形计数器 counter,用第一个参数(initval)初始化这个计数器,创建时一般可将其设为0,后面有例子测试这个参数产生的效果。 flags 可以使用三个宏: EFD_CLOEXEC:给这个新的文件描述符设置 FD_CLOEXEC 标志,即 close-on-exec,这样在调用 exec 后会自动关闭文件描述符。因为通常执行另一个程序后,会用全新的程序替换子进程的正文,数据,堆和栈等,原来的文件描述符变量也不存在了,这样就没法关闭没用的文件描述符了。 EFD_NONBLOCK:设置文件描述符为 继续阅读 >>


杜肖孟 18/01/08 23:22:55
之前一直觉得对于字节码的执行过程,对象的实例化过程,多态的实现机制没有进行深刻的探讨,只是进行了简单的总结,一直也苦于没有找到恰当的例子,所幸今天看到一前辈的博客,对其进行钻研之后,终于解决了这个历史遗留问题。 首先贴出前辈的原文链接,并且这篇博客会引用其中的一些内容:Java重写方法与初始化的隐患 问题的还原 先来看一份代码: public class SuperClass { private int mSuperX; public SuperClass() { setX(99); } public void setX(int x) { mSuperX = x; } } public class SubClass extends SuperClass { private int mSubX = 1; public SubClass() {} @Override public void setX(int x) { super.se 继续阅读 >>


董恒毅 18/01/08 18:24:57
2018年1月5日~2018年1月6日 12:00 考完最后一门。 14:00 到哥哥这边吃饭。 16:00 和哥哥去姐姐医院,和姐姐说再见。 17:00 到火车站,取票,下雪路滑,拉着箱子不好走。 17:20 刚取完票过安检,火车站通知Z88停运,查票的小姐姐刚好查到我就是Z88,笑个不停,我问她:这是不是你今天最开心的事?她说:是。 17:40 退Z88,改签T114(23点45发车),哼,这点小事能难倒我? 18:00~23:00 交了10元钱在候车茶水间度过,把书拿出来又装回去了,太吵,而且可能我觉得看书有点装B,或许因为我旁边坐的都是年轻人。 23:00 开始排队候车 23:39 被通知火车晚点 00:30 火车还是晚点,广播开始说:可以办理改签或者退票,我有点后悔改签时候为什么没有选择9点多去杭州的火车,其实主要是因为T114速度快,到的早。 01:07 我查了下机票,很便宜,315,又查了下去机场的大巴,火车站陇海大酒店旁边,4:00是第一班。 01:30 为了确认大巴可 继续阅读 >>


杨博东 18/01/07 22:37:39
muduo 的定时器功能由三个 class 实现,TimerId、Timer 和 TimerQueue。 TimerId 类 它唯一标识一个 Timer 定时器。TimerId Class 同时保存Timer* 和 sequence_,这个 sequence_ 是每个 Timer 对象有一个全局递增的序列号 int64_t sequence_,用原子计数器(AtomicInt64)生成。 它主要用于注销定时器,这样就可以区分地址相同的先后两个 Timer 对象。 namespace muduo { namespace net { class Timer; /// /// An opaque identifier, for canceling Timer. /// /* 带有唯一标识的Timer,主要用于取消Timer */ class TimerId : public muduo::copyable { public: TimerId() : timer_(NULL), sequence_(0) { } TimerId(Timer* 继续阅读 >>


杜肖孟 18/01/07 15:41:05
  首先我们先来看一下淘宝搜索商品的页面,这里以糖炒板栗为例:   可以看到搜索到了很多糖炒板栗,显示有100页,但真正搜索到的商品超过了100页,给用户只显示前100页,后面编写的爬虫只爬取前50页,url构造这里就不讲了,之前的博客已经讲过了,需要更多可以自己更改页数,然后我们检查网页元素,找到商品链接并复制,然后在网页源代码里查找,结果如下:   发现并没有找到,说明该数据是动态加载的,那我们是不是应该去js动态加载的数据中去找呢?答案是没必要,虽然可以这样找,但是效率很低。这里介绍另一种方法,仔细观察商品详情页的链接,你会发现有一个参数是id,如果搜索结果页的网页源码里有这些商品的id,那我们不就可以直接构造url了,带着这种思路,我们进行如下操作:   我们发现,这种思路是正确的,在网页源代码里确实找到了该商品的id,然后我们进行如下操作: 按照这种规则可以找到44个搜索结果,正好是淘宝搜索结果页一页的商品数,于是,我们就可以构造出商品详情页的url,仔细观察搜索结果,你会发现在淘宝网搜索的结果里面,包含了大量天猫商城的商品,而这两个 继续阅读 >>


何攀 18/01/07 14:14:09