精华内容
下载资源
问答
  • 但是文件在读到那段二进制码时就认为整个文件结束了,我想应该是那段二进制码出现了文件结束的标志符,于是我有以下几个问题:1.看到有文章说,对二进制文件必须使用二进制形式打开,并且使用feof()来判断。...
    我用文本形式打开了一个文件,在文件中段有一部分二进制码,我使用的是fistream.eof()作为文件结束的判断,但是文件在读到那段二进制码时就认为整个文件结束了,我想应该是那段二进制码出现了文件结束的标志符,于是我有以下几个问题:
    1.看到有文章说,对二进制文件必须使用二进制形式打开,并且使用feof()来判断。但是我的文件基本上是文本形式,只有一小段二进制码,我使用的是一行一行的处理形式,用二进制打开会对程序有很大改动吗?
    2.莫非对与二进制打开和文本打开,判断文件结尾的方式不同,到底哪个神秘的文件结束符号是什么,函数又是怎么判断的啊?
    3.难道fistream.eof()和feof()不只是封装使用的不同,为什么fistream.eof()不行啊?
    megaboy(点背不能怨社会,命苦不能怪政府!) 于 2005-8-14 13:10:02
    其实二进制方式和文本方式判断文件结束的方式是一样的,都是遇到EOF就认为文件结束,EOF是一个宏,它代表了-1这个值,如果在文件当中读到了0xff或者到了文件末尾,文件结构指针里面的flags字节的_F_EOF位都会被置为1,这一位被置为1,库函数就会认为到了文件末尾了。函数feof()其实是一个类函数宏,这个宏就是通过把文件结构指针的flags字节跟_F_EOF进行与运算来检测_F_EOF是否为1,并判断是否到了文件末尾的。这个函数具有与下面类似的代码:

    #define feof(f) ((f)->flags & _F_EOF)

    对于flags和_F_EOF,不同的编译器可能有不同的标识符。


    megaboy(点背不能怨社会,命苦不能怪政府!) 于 2005-8-14 13:19:00
    噢,更正一下,忘记了feof是返回值为0表示遇到文件末尾的。上述那个_F_EOF应该是被置为0表示文件末尾,而feof是通过检测flags跟_F_EOF相与的结果是否为0来判断文件是否到了末尾。
    newbiestar 于 2005-8-14 13:35:26
    feof返回非0才是到达文件结束
    51365133(渊海) 于 2005-8-14 13:38:45
    TO megaboy(想忘记,却更是不能忘记!)

    “其实二进制方式和文本方式判断文件结束的方式是一样的” 感觉有点问题

    文本文件的结束是-1,但是有的时候2进制文件中可能会出现-1,所以引用了int eof(int handle)
    51365133(渊海) 于 2005-8-14 13:40:02
    #include <io.h>
    检测文件指针是否已在尾部
    int eof(int handle)

    handle 已打开的文件句柄

    1-文件结尾,0-不在结尾位置,-1 操作出错
    megaboy(点背不能怨社会,命苦不能怪政府!) 于 2005-8-14 14:33:33
    eof是系统输入输出函数,使用低级文件句柄。它检测EOF的方式跟feof其实是相同的,只不过它检测的不是标准文件结构指针里面的_F_EOF标志,而是_O_EOF标志,这个标志存在于文件柄属性字节里头,跟_F_EOF一样,如果文件遇到0xff或者文件末尾,会设置_O_EOF。

    文本方式跟二进制方式其实只有一个区别,那就是文本方式输入时会把/n(0A)解释为0D0A,输出时会把0D0A重新复原为/n(0A)。除此之外,文本方式跟二进制方式是一样的。但是,并不是所有标准文件函数都会进行这个转换的,字节级的函数比如fread和fwrite等是无视这个转换的。

    Agener 于 2005-8-14 15:20:51
    那到底,我改怎么办呢?看了半天我还是没有看出,二进制中出现了0xff,到底该怎么判断文件结束,按照 megaboy(想忘记,却更是不能忘记!) 的说法,feof()也没有办法回避0xff的歧义啊!
    为什么其他的软件,例如textpad,能够正确的判断文件结束?
    megaboy(点背不能怨社会,命苦不能怪政府!) 于 2005-8-14 16:50:09
    刚刚查阅了一些更详细的资料,发现我所说的那种把-1当作文件结束标记的情况并非发生在所有的操作系统上。某些操作系统特别是早期的操作系统有不少就把-1看作文件结束标记,但现在的操作系统多数来说不再以这种方法判断文件结束,而是直接比较文件的大小,DOS、windows和一部分unix/linux就是以文件大小来判断的,当超过文件大小读的时候,就会设置_F_EOF和_O_EOF位。

    不知道楼主使用什么操作系统。如果是dos和windows,那么产生你的问题的原因应该就不是读到文件尾了。
    kl222 于 2005-8-14 17:04:05
    你可以采用判断读入数据与文件的长度来确定是否结束.
    Agener 于 2005-8-14 18:41:18
    我用的是windows,但是就是在文件中间出现0xFF 就截断了:
    ifstream m_ifstream(inputfile);
    while(!m_ifstream.eof()){//标记文件结束
    m_ifstream.getline(rdbuff1,100000);
    ……
    }
    就是这样,难道ifstream.eof()不是采用比较文件大小的方式?
    怎么样获得一个文件的大小呢?
    jixingzhong(瞌睡虫(既然选择了远方,那就只有风雨兼程了!!)) 于 2005-8-14 18:58:35
    程序判断文件是否结束, 是看的文件结束标志! 要注意的是, 不是说文件结束标志必须出现在文件的末尾才行的, 这个标志可以在文件的任何位置!
    megaboy(点背不能怨社会,命苦不能怪政府!) 于 2005-8-14 19:28:29
    我觉得不是的,虽然表面上看来好象有ff的地方就断掉,但可能是其它原因引起的。在windows里的确不是靠检测ff来判断的,我刚刚验证了一下,写了十个字节的数据,后面六个全写ff,一样很准确的判断出文件末尾在十个字节之后。
    doway(john) 于 2005-8-14 20:16:22
    mark
    Agener 于 2005-8-14 22:15:55
    不会吧,你们留一个信箱,我把文件传给你们看看。
    -----------------------------------------
    jixingzhong(瞌睡虫(既然选择了远方,那就只有风雨兼程了!!)) : 程序判断文件是否结束, 是看的文件结束标志! 要注意的是, 不是说文件结束标志必须出现在文件的末尾才行的, 这个标志可以在文件的任何位置!
    -----------------------------------------
    如果真是这样,文件中间无意出现了结束符,那么程序岂不是根本无法正确判断文件结束了?标准函数库中的这个函数岂不天生固有这个一个大bug??到底我的文件该怎么判断结束!!!还请指教!

    snowbirdfly(胡晋) 于 2005-8-14 23:19:01
    收藏了`
    感谢楼主~~~
    DiabloWalkOnTheEarth(WorldOfWg( 狗城是个烂代理 )) 于 2005-8-14 23:29:26
    WIN下文本模式打开好像是26 ( ^Z )表示EOF 地. 要保险还是二进制方式读取吧...
    jixingzhong(瞌睡虫(既然选择了远方,那就只有风雨兼程了!!)) 于 2005-8-15 11:31:38
    我 错 了 ~~~

    大家不要学我的 ~~
    jixingzhong(瞌睡虫(既然选择了远方,那就只有风雨兼程了!!)) 于 2005-8-15 11:35:22
    看 newbiestar() 的!
    liixixi 于 2005-8-15 11:45:51
    >DiabloWalkOnTheEarth(WorldOfWg( 狗城是个烂代理 )) says:
    >> WIN下文本模式打开好像是26 ( ^Z )表示EOF 地. 要保险还是二进制方式读取吧...

    这个是正解, 就是说, 如果以文本模式打开文件, 遇上26(sub)就是eof了, 你的二进制代码里肯定有sub。

    至于这个问题, 其实是dos的历史问题遗留来的, 具体的原因忘了。

    上面有人说这个和/r/n等有关系, 其实这个在不同平台下是不一样的, 和文本/二进制没本质联系。

    文本/二进制文件本身是没有区别的, 在c语言中打开的时候, 唯一区别就是对sub的解释不一样, 恩, win下对/r/n的解释也不一样, 呵呵。



    doway(john) 于 2005-8-15 12:21:07
    dewey60@126.com

    楼主的那个文件请发给我一份,我也正在学习IO部分内容,很有兴趣。想看一看具体文件的模式,想出个解决办法。


    newbiestar 于 2005-8-15 12:35:59
    回复人: jixingzhong(瞌睡虫(既然选择了远方,那就只有风雨兼程了!!)) ( ) 信誉:101 2005-08-15 11:35:00 得分: 0


    看 newbiestar() 的!

    =====================================
    看我的干什么……-_-bbbb

    Ctrl Z是command.com(Windows下面是CMD.exe)这个shell对EOF自己做的规定,算不得数,Unix的Shell一般都是用Ctrl D的,Ctrl Z在Unix控制台里面一般都不是EOF(不排除有某些比较BT的变种这样实现的可能,但是一般都是job control里面的内容)

    EOF根本不可能存在于文件中(想想看也知道文件结束怎么可能存在于文件中呢?),一般只有某些函数会返回这样的值,譬如getc之类的。但是绝对不是0xff就会导致文件结束,这个是对getc这一族函数的误用导致的。
    SammyLan(没有窍门,只有努力.LOVE 33 4 Ever) 于 2005-8-15 12:52:21
    其它的说太多没用
    fostream.eof()这个函数和C的feof()这个函数可以判断文件结尾

    Wolf0403(完美废人)(CSDN,请不要侮辱 Linux) 于 2005-8-15 18:57:29
    不知道 Win32 的 ReadFile 是如何, Linux 中的 syscall read(2) 当读取到一个文件结束的时候会返回 0。只有这种情况表示真正的 EOF。换言之,当文件系统读取一个文件到真实结尾的时候会向调用程序返回 0,而 EOF 这个宏则是 C 库封装过的一个标志罢了。C 标准库的『游戏规则』就是用 feof 来判断一个 FILE * 是否被读取到了文件结束的地方。想要绕开这个规则就去看更底层的东西吧。

    Agener 于 2005-8-16 11:16:56
    果然是26,我删掉后就正常了,不过我还是有疑惑,二进制打开的文件也能一行一行的读吗,就是那个ifstream::getline()能用吗?
    newbiestar 于 2005-8-16 11:54:13
    怎么可能和26有关系?

    char buf[] = {26, 0x26, 026};
    int ch;
    FILE* w_fp = fopen("file", "w ");

    fwrite(buf, 1, 3, w_fp);
    rewind(w_fp);

    while((ch = fgetc(w_fp)) != EOF)
    {
    printf("%d/n", ch);
    }

    我就不信不产生三行输出!
    megaboy(点背不能怨社会,命苦不能怪政府!) 于 2005-8-16 11:58:20
    用下面的程序试了一下,真的哦,是26这个EOF造成的,倒了,没想到,竟然发生这种事情,不过无论如何,算是又长了一智。

    FILE * fpFile;
    char test[10]={'a','b','c',26,'d','e','g'};
    fpFile = fopen("test.txt", "w");
    fwrite(test, sizeof(char),7,fpFile);
    fclose(fpFile);
    fpFile = fopen("test.txt", "r ");
    fread(test, sizeof(char), 3, fpFile);
    printf("%d/n", feof(fpFile));
    fread(test, sizeof(char), 4, fpFile);
    printf("%d/n", feof(fpFile));
    fread(test, sizeof(char), 5, fpFile);
    printf("%d/n", feof(fpFile));
    fread(test, sizeof(char), 8, fpFile);
    printf("%d/n", feof(fpFile));

    结果是0 32 32 32。

    再进一步试验,分别用文本方式和二进制写读文件,发现这个规律:

    跟写入的方式无关,而跟读取的方式有关,如果用文本方式读,结果就是0 32 32 32,用二进制方式读,结果就是0 0 32 32。
    newbiestar 于 2005-8-16 12:24:24
    这个是Windows下面的库带来的问题(可能和Windows内核有关,因为VC 自带的库实现代码里面没有找到这样的处理,要不就是VC 实际用的库不是一个东西),反正Unix下面没这个问题,文本模式和二进制模式一样
    ben_na(笨笨) 于 2005-8-16 12:53:50
    这里有一篇我blog上的关于C 读取二进制文件的文章
    可能可以说明一些问题

    C 读写二进制文件

    前几天写一个音频隐藏程序时碰到点问题,要读写二进制文件。
    一开始,我的程序看起来像是这样:

    //...
    static string FILENAME = "test.wav";

    ifstream iStream;
    iStream.open(FILENAME.c_str());

    char buffer[1024];
    while (iStream.read(buffer, sizeof(buffer) / sizeof(char))) {
    //...这里对读到的字节进行处理
    }

    iStream.close();
    //...

    可是循环几次后就“无故”跳出,文件根本没读完,可是程序码好像也没错。

    为了测试二进制的读取,我特地写了个程序, 看起来像这样:

    //...
    static string FILENAME = "test.wav";

    ifstream iStream;
    iStream.open(FILENAME.c_str());

    char ch;
    while (iStream.get(ch)) {
    cout << ch;
    }

    iStream.close();
    //...

    程序输出一部分字符后,就不再输出了,怎么回事?我把iostream以及fstreamr的读取、写入API都查了个便,好像没有什么发现,这段程序码

    应该不会有问题的!

    回忆以前写C代码的日子,fopen函数有个b参数,表示是二进制读写方式打开, 是否fstream也有二进制开启的参数? 一查MSDN果然如此, 这

    个参数是 ios_base::binary。


    马上行动,以上程序改成这样:
    //...
    static string FILENAME = "test.wav";

    ifstream iStream;
    iStream.open(FILENAME.c_str(), ios_base::binary); // 二进制模式

    char ch;
    while (iStream.get(ch)) {
    cout << ch;
    }

    iStream.close();
    //...

    哈哈,这回程序终于可以读取全部字节了,而且喇叭还嘟嘟地叫呢(二进制码当作字符输出,有些是空白,有的还会鸣喇叭(07h),呵呵)。

    可是为什么?读出都是字节,都是无格式,打开时以二进制和默认方式打开有什么区别吗?

    别急,上面解决了怎么读,下面让我们"写"一点东西吧!

    #include <iostream>
    #include <fstream>
    #include <string>

    using namespace std;


    int main() {
    static string FILENAME = "test.txt";

    ofstream oStream;
    oStream.open(FILENAME.c_str()); // 标准(字符)模式打开哦

    oStream << "Hello World!" << endl; // 写个换行符
    oStream << "Hello World!";

    oStream.close();
    }

    程序很简单,运行后产生test.txt文件,文件大小为26字节, 文件内容是这样:

    Hello World!
    Hello World!

    明明是24个字节嘛,呵呵,算上一个换行符 0dh 0ah 就是26个字符了。 用ultra edit打开看是这样:

    48 65 6C 6C 6F 20 57 6F 72 6C 64 21 0D 0A
    48 65 6C 6C 6F 20 57 6F 72 6C 64 21

    很清楚了吧!

    下面我们把程序改成这样:

    #include <iostream>
    #include <fstream>
    #include <string>

    using namespace std;


    int main() {
    static string FILENAME = "test.txt";

    ofstream oStream;
    oStream.open(FILENAME.c_str(), ios_base::binary); // 二进制形式打开

    oStream << "Hello World!" << endl; // 写个换行符
    oStream << "Hello World!";

    oStream.close();
    }

    运行后同样产生test.txt文件,咦!怎么少了一个字节(25个),打开后看是这样:

    Hello World!
    Hello World!

    用ultra edit 打开,是这样:

    48 65 6C 6C 6F 20 57 6F 72 6C 64 21 0A
    48 65 6C 6C 6F 20 57 6F 72 6C 64 21

    与上面比较可以得出,少了一个 0dh, 也就换不了行了。

    有以了上对比,我们知道了C 标准IO流在字符模式下会对换行符进行扩展。

    程序为例:

    //...
    oStream.open(FILENAME.c_str()); // 默认

    char ch = 0x0a;

    oStream << ch;
    //...

    输出两个字节: 0dh 0ah

    如果是:
    //...
    oStream.open(FILENAME.c_str(), ios_base::binary); // 二进制模式

    char ch = 0x0a;

    oStream << ch;
    //...

    则只会输出: 0ah

    相信现在对为什么在默认模式下读不到全部数据清楚了吧! 人家见到0ah单独出现地晕了。

    那么题外话: endl是什么? 是 define endl '/n' ? 不是, 在名字空间没有引入时我们要这样用呢: std::endl

    源码之前无秘密

    // 注,以下程序码和原来并不完全相同,为了可读性,我进行了一定修改

    inline basic_ostream<char, char_traits<char> >&
    endl(basic_ostream<char, char_traits<char> >& stream) {
    stream.put('/n');
    stream.flush();
    return (stream);
    }

    哦, 原来endl是个函数。

    为了更清楚,需要看看 << 的一个重载版本:

    basic_ostream<char, char_traits<char> >&
    operator<<(basic_ostream<char, char_traits<char> >&
    (*pfn)(basic_ostream<char, char_traits<char> >&)) {
    return ((*_Pfn)(*this)); // call basic_ostream manipulator
    }

    原来把endl当作函数指针传进去,在里面调用它,有了以上基础,我们可以写个自己的manipulator了。

    inline basic_ostream<char, char_traits<char> >&
    endl2(basic_ostream<char, char_traits<char> >& stream) {
    stream.put('/n/n'); // 换两行
    stream.flush();
    return (stream);
    }

    这样以后这么调用 cout << "hello world!" << endl2; 就会在输出hello world!后换行并空一行啦!

    OK, 我们可以像这样读取二进制文件:

    //...
    ifstream iStream;
    iStream.open(FILENAME.c_str(), ios_base::binary);

    char buffer[1024];
    while (iStream.read(buffer, sizeof(buffer) / sizeof(char))) {
    //...这里对读到的字节进行处理
    }
    //...


    或者这样想一个字节一个字节读也行, 只是有点慢(我试着用这种方法copy一个10M的文件,等了我好久):

    //...
    ifstream iStream;
    iStream.open(FILENAME.c_str(), ios_base::binary);

    char ch;
    while (iStream.get(ch)) {
    //...这里对读到的字节进行处理
    }
    //...

    当然,习惯EOF的朋友可以这样:

    //...
    ifstream iStream;
    iStream.open(FILENAME.c_str(), ios_base::binary);

    int ch; // 注意,这里要整型,因为EOF为-1
    while ((ch = iStream.get()) != EOF) {
    //...这里对读到的字节进行处理
    }
    //...

    虽然读取比写入更容易出错,但上面我们已经解决了读二进制文件。

    让我们用二进制模式打开,写一些东西吧。

    #include <iostream>
    #include <fstream>
    #include <string>

    using namespace std;

    int main() {
    static string FILENAME = "test.txt";

    ofstream oStream(FILENAME.c_str(), ios_base::binary);
    oStream << 1 << 2 << 3 << 4;
    }

    哦, 输出的是字符1234,因为默认的插入操作符是以字符形式输出的,应该改成这样:

    #include <iostream>
    #include <fstream>
    #include <string>

    using namespace std;

    int main() {
    static string FILENAME = "test.txt";

    ofstream oStream(FILENAME.c_str(), ios_base::binary);
    int i1 = 1;
    int i2 = 2;
    int i3 = 3;
    int i4 = 4;

    oStream.write((char*)&i1, sizeof(i1));
    oStream.write((char*)&i2, sizeof(i2));
    oStream.write((char*)&i3, sizeof(i3));
    oStream.write((char*)&i4, sizeof(i4));
    }

    有点麻烦哦,如果用上C 的安全转型static_cast,就更长了。当然,对于一个缓冲区来说,就简单多了。

    //...
    char buffer[1024];
    ...
    oStream.write(buffer, sizeof(buffer));
    //...

    我们还可以像这样写结构体:

    #include <iostream>
    #include <fstream>
    #include <string>

    using namespace std;

    typedef struct tagTestStruct {
    char c;
    int i;
    long l;
    char buffer[8];
    } TEST_STRUCT;

    int main() {
    static string FILENAME = "test.txt";

    ofstream oStream(FILENAME.c_str(), ios_base::binary);

    TEST_STRUCT myStruc;

    myStruc.c = 'a';
    myStruc.i = 1;
    myStruc.l = 1l;
    strcpy(myStruc.buffer, "hello");

    oStream.write((char*)&myStruc, sizeof(TEST_STRUCT)); // 经过数据对齐,这里的sizeof(TEST_STRUCT)是20
    }



    doway(john) 于 2005-8-16 16:11:21
    楼主发来的文件我看了,内容是对 3 个 HTTP 请求的响应。

    第一个请求是 url: http://china-aoya.com/doce/gril2.htm,这个没有问题。

    第二个请求是 url: http://ctmas.myetang.com/kejian/duominuo.fla,这个有问题,因为返回类型是:Content-Type: text/plain。这是一个 Flash 的源文件,看了一下 IIS 的 MIME设置,正确的返回类型应该是 application/octet-stream。

    因此要想正确处理这个文件,楼主需要了解 Flash 的文件结构。楼主了解吗?哈哈,我也不了解。对于一个不了解的东西,我们又能怎么样呢?!

    程序员不是闲人,更不是超人,有些事情不该我们干的。:)


    Agener 于 2005-8-18 16:35:21
    哈哈,谢谢楼上的兄弟,不过我的任务是跳过这一段代码,把后面的HTML读出来处理。不过现在我也不急着想了,偶师兄说他来摆平!我就等着拿结果了。
    zhiri84(clz) 于 2005-8-18 23:09:29
    高人
    ahjoe(强哥) 于 2005-8-20 16:58:07
    不能以文本方式打开处理二进制文件。
    cppprogramlover(爱相随—) 于 2005-8-21 14:01:47
    很简单,如果你的文本只有一段是二进制,那么这样(C)
    int c;
    while((c=getc(stream)!=EOF || !feof(stream))/**/;
    效率是不会降低的,c 中类似。
    cppprogramlover(爱相随—) 于 2005-8-21 14:02:48
    如果真是这样,文件中间无意出现了结束符,那么程序岂不是根本无法正确判断文件结束了?标准函数库中的这个函数岂不天生固有这个一个大bug??到底我的文件该怎么判断结束!!!还请指教!

    直接用feof判断就不会了,象我上面说的那样
    Agener 于 2005-8-23 20:34:55
    谢谢了各位,我看可以结了
    展开全文
  • 对话行癫:CTO 最重要的是判断未来!| 人物志

    万次阅读 多人点赞 2019-09-28 17:38:12
    身兼阿里巴巴集团 CTO、阿里云智能总裁、达摩院院长三职,张建锋(花名行癫)说:「作为 CTO,更多的是对未来需求、技术趋势的看法,两者能不能做有效的结合,最重要的是判断未来业务会变成什么样。」

    身兼阿里巴巴集团 CTO、阿里云智能总裁、达摩院院长三职,张建锋(花名行癫)说:「作为 CTO,更多的是对未来需求、技术趋势的看法,两者能不能做有效的结合,最重要的是判断未来业务会变成什么样。」

    作者 | 唐小引
    审校 | 郭 芮
    出品 | CSDN(ID:CSDNnews)

    江湖中流传着一个段子,「如何用一句话证明你在阿里工作?」其中有一句便是「大家拥抱一下变化,因为组织架构调整了。」

    这一点在行癫的身上体现得淋漓尽致,从 2004 年加入阿里至今,行癫起于淘宝网技术部架构师,一路任过淘宝副总裁、中国零售平台负责人、中台事业群总裁,而近几年阿里集团宣布调整组织架构,行癫的名字格外耀眼,2016 年出任集团首席技术官(CTO),2017 年 10 月带着马云期望「活得要比阿里巴巴长」的达摩院成立,行癫就任院长,2018 年 11 月,阿里云升级为阿里云智能,行癫兼任总裁。

    多年的技术与业务融合让行癫比许多技术人都有着更深的沉淀与思考,在 2019 云栖大会上,行癫在接受 CSDN(ID:CSDNnews)的采访时表示,未来一定是「需求牵引,技术驱动」的,阿里巴巴并不是一家做了一个新技术便颠覆一个产业的公司,并且这种机会可以说是相当稀少。最关键的在于,「你怎么看未来的需求、未来技术的趋势,最关键的是两者之间是否能做一个有效结合。」

    而针对技术圈里一直热议不断的 CTO 该不该写代码、CTO 的核心技能话题,行癫说道:「作为 CTO,更多的是对未来需求、技术趋势的看法,两者能不能做有效的结合,最重要的是判断未来业务会变成什么样。」

    行癫,作者摄于云栖大会
    同时,在阿里云十年之际,以及平头哥不断出新备受关注之时,行癫非常开诚布公地总结了过去十年阿里云对于中国技术商业进步所带来的影响、最新进展与思考,以及他对芯片行业、操作系统的看法,从中可以一窥阿里在技术与业务结合的未来走向。

    以下为访谈实录:

    问:阿里云自升级为阿里云智能以来,主要的变化有哪些?

    行癫: 从定位上来讲,主要有三点。首先,阿里云的形态正在从单一的 IaaS 层基础设施变为全方位的数字经济基础设施,除原来的一个云之外,在 IaaS 层如传统的虚拟机、数据库还需要智能化、移动化、AIoT 的解决方案,来满足数字经济的转型升级。不仅是 IT、AIoT 基础设施,还需要像钉钉一样的协同办公的基础设施、大数据智能化基础设施。比如对于 IoT,不仅是家庭里的电视、空调等设备,也包括城市里路灯、停车位、摄像头等设施、工厂里的设备,以及污水处理、河流保护等,都需要数字化,阿里云智能需要满足的是在整个数字化转型过程中所需的基础设施。

    其次,阿里云智能已经成为集团战略,是阿里巴巴整个经济体的概念,因此也整合了许多资源。以前,我们在零售、金融等方面的传统优势已经升级成立了新零售、新金融部门,同时也成立了数字政府部门,这些都在阿里云智能的体系下,阿里巴巴经济体对外提供的服务统一都基于阿里云智能平台,比如高德地图对于数字政府、数字交通的输出即是基于此。今后,阿里云智能将承载着阿里巴巴经济体的技术输出。

    最后一点,今天我们讲数据中台、业务中台,很多企业都这么搞,这些概念都是从阿里听出来的,但到底怎么理解?数据中台、业务中台究竟解决了什么问题,别人未必和我们想的一样,这里面不仅是技术,还需要有经验、有实践、有方法论。阿里巴巴的云最大的不同就是本身已经在阿里自己的业务里经受了非常多的锤炼,即使是非常好的技术,比如人工智能,都需要产业实践、业务尝试,凭空做一个高质量的云、成为数字经济体的基础,我认为是不太可能的。所以,我们做了一个非常大的决定,那就是阿里经济体中所有的 IT 设施,所有的数据中台全部迁移到阿里云上。

    大概在三四年前,我担任阿里中台事业群总裁时,第一次开启了互联网公司的中台化战略,当时很多人还不知道中台究竟是什么,坦率地讲,我也不知道。马老师让我去干中台,我不知道怎么干,他只说了三个统一 —— 技术统一、数据统一、文化统一,于是我就领了这个任务,开始去探索什么是数据中台,什么是业务中台。

    做了有一两年后,有一次,我跟马老师汇报说,我终于明白什么叫数据中台了,他听了我的汇报后,说我的理解只到了 50%,因为我的汇报里有 50% 是符合他最初的期望的。到今天,我认为阿里基本已经建立起了整个中台体系。所以,没有阿里内部的实践,就给外部提供一个所谓的解决方案,我认为是非常困难的事情。

    问:有哪些正在重点突破的行业?

    行癫: 今天这个行业要突破,就需要应用一些新的技术,用阿里的逻辑来讲,今天有什么样的新技术是可能会对未来带来变革的?是值得、需要投入的?我们需要做很多的技术准备,准备好后还要跟行业做结合。有些行业与技术结合带来的变化会非常大,有些行业却并不如此。当然,我们还需要考虑,这个行业是不是阿里真的有经验的、非常擅长的?

    阿里擅长的技术,相对容易理解,就是云计算、大数据、IoT,以及钉钉等的移动协同,擅长的行业呢?零售、金融、供应链都是阿里所擅长的。这两个因素具备了,我们就会看怎么来定义未来的技术应用。因此,综合来讲,新零售是我们非常重要的一个行业,因为阿里有丰富的经验,对未来有着非常深刻的洞察。

    还有一个至关重要的就是政府的数字化转型。这方面与阿里最大的关系就是,政府数字化转型需要使用到大量的互联网、数字化技术,而且它有大量的数据,运用这些数据会产生大量的成果。在这方面,阿里已经积累了经验,同时政府也信任阿里,所以我们在数字政府上做得非常好。现在,不仅是已经实践成功了的浙江数字政府,诸如国家税务总局,整个个税系统都在阿里云平台上,中国邮政整个生产系统都在云上,是目前阿里云最大的一个集群,超过 5000 台规模。


    △图:阿里展示数字政府架构,作者摄于云栖大会

    再有就是工业互联网,工业互联网不仅是提供算法,还要给客户提供收集数据的能力,由此就需要具备 IoT 的能力了,在实现数据收集的基础上,才能够进一步做智能化的应用。大多数行业都不是规划出来的,而是各种各样的起步与尝试,慢慢地就演变成为一个行业了。

    问:阿里云已经走过十年,下一个十年,阿里云将会做哪些技术准备?

    行癫: 有一点需要强调的是,我们需要「需求牵引,技术驱动」,阿里巴巴并不是一家做了一个新技术然后颠覆了一个产业的公司,这种机会我认为是非常少的。当然,我们与大部分公司相比,还是在做一些非常前瞻性的技术,比如量子计算等,但我认为核心在于,你怎么看未来的需求、未来技术的趋势,最关键的是两者之间是否能做一个有效结合。


    △阿里量子计算进展介绍,作者摄于云栖大会

    大家都知道贝尔实验室做芯片非常成功,但它的产业并不成功,于是没落了。我们今天看到的许多研究机构都在转型,在这之中,微软研究院是非常典型的例子,微软研究院以前相对独立,可以做任何研究,但现在转型力度非常大,要与产业集合,也就有了更明确的方向。

    十年前,王坚博士做云时,跟大部分人的想象是不一样的,第一,如何提供一个全新的大数据处理平台?十年前并没有海量数据,其次,王坚博士坚信,这个世界一定是公共云的世界。今天,阿里云投入的技术更广泛,十年前根本没有现在大数据、AI、IoT、移动化、协同办公的概念,但我们将云智能之后,我们的边界、范围也更宽了。

    问:对于阿里云,最关切的问题是什么?

    行癫: 阿里云已经走过了很长的一段路,从最早的公共云到今天混合云,逐渐变成了很多云项目的解决方案。在公共云时代,王坚博士的想法是做云为什么要销售,十年前我也是如此,因为云是非常简单的产品,一个虚拟机、数据库、存储,可以直接拿来用,而不需要销售和服务。最近两年发生了非常多的变化,因为产品复杂到了一定程度,需要为客户提供一个解决方案。今天我们在阿里巴巴的云上有三百个解决方案,解决方案一定是面向客户的,解决某一类问题。但是解决方案背后是谁提供的很关键,我们称之为「联合解决方案」,因为是和合作伙伴一起提供的。

    这个过程中,阿里云要时刻保持对行业的洞察和理解,要有所为有所不为,这是非常关键的,我们并不是说搞了一堆的合作伙伴,看上去就是你提供顶层设施,给他们提供服务就可以了,这是远远不够的,这样相当于找了一堆集成商来,我们的生态不是集成商,我们的生态是联合解决方案,是我们共同为客户提供服务,这有着本质的区别。

    阿里云面临的最大问题,首先,如何提供一个非常有竞争力的 IaaS、PaaS 产品?这是最关键的,如果没有这个产品,别人为什么要和你做联合解决方案?

    其次,在数字化经济市场,阿里云有没有真正地提供智能化、数字化、移动化、IoT 化的解决方案和产品?再者,阿里云要学会从原来的互联网公司向 ToB 的服务型公司转变,这也是非常关键的。ToB 的客户需要非常好的服务,从咨询、做方案到实施、交付和服务,这是阿里在做公共云时代没有经历过的。

    这三件事是阿里云今后面临的非常大的挑战,也是我们需要补上的功课。

    问:怎么看芯片产业?

    行癫: 芯片是一个很大的名词,它的概念和互联网一样,互联网上有多少应用就有多少芯片。我们往往将芯片的理解单一化了,我们以为英特尔就是芯片,但实际上,你看不见的所有地方都有芯片,手机里就有几十种芯片,因此,芯片实际上是一个非常复杂的产业。

    其次,芯片也是一个非常辛苦的行业,许多人总认为越是高科技就越赚钱,实际上并非如此。许多微小的芯片都是非常廉价的,卖到 1 美金的已经是非常好的一颗芯片了。同时,芯片里有着各种各样的种类,这也就决定了各自的研发周期,如果每一颗都要投入十年研发,不仅会破产,还会跟不上时代发展。但芯片的确需要一个周期,工业界公认的大型芯片大概是两到三年的时间。

    问:现在要做到行业 AI、普惠 AI,最大的难点是什么?

    行癫: AI 本身没有诞生任何新的工业,它是一个赋能的工具,而非单独的产业,这更像是当初发明计算机,计算机是直到互联网产生,才成为一个单独的产业。因此,AI 一定要跟某个产业结合起来,没有结合就是空中楼阁,因为没有载体。AI 到底能不能发挥实效,就看是否能够帮助原有产业中的要素发生变化,带来效率上的提升,这是最根本的。

    今天 AI 到底改变了什么?我认为最大的是感知发生了变化,在第一波 AI 浪潮中的公司,在应用落地上基本都与视觉相关,包括安防类、数字城市类等。哪怕到今天,我认为 AI 中 50% 以上仍是与视觉相关。当前,在 AI 上我们面临的最大的困难就是碎片化,每一个模型都不一样,而最大的不一样,就是行业的不一样。同时,我们并不真正了解需要落地的行业,而他们也不真正了解技术。这种情况下,大家就会抱有不切实际的期望,我们很多项目都是这样,后来才慢慢认清现实。

    所以,我们要反复强调,定义目标是很难的事情,如果能够将目标清晰地定义出来,那么就变成一个技术问题了,技术问题是很容易收敛的,行就是行,不行就是不行,但最困难的是问题很难精准描述、精准定义,并且可以分解。

    第三个困难的地方就是,如何做融合?AI 最终要在产业里成功,一定会有非常多的具有行业知识背景的人进入才能实现,所以下一步的浪潮一定是在产业里 AI 得到深度的应用。

    第四个困难点就是产业一定要发生变化,它可能是多种技术的结合,不仅是使用 AI,可能还有 IoT 等,需要有更强的解决方案能力的人。数字经济真正进入产业界,才能够说明数字经济真正发展起来了。

    但是,我发现数字政府比产业界跑得要快很多,这是为什么?企业不是对市场更灵敏吗?在我们国家,政府有非常强的顶层设计能力,在数字化转型上,顶层设计能够解决很多现实问题,因此产业发展非常快,而数字化转型在政府中,给老百姓也带来了非常大的便利,今天他们服务的水平与能力、治理理念已经比许多企业都要好了。因此,我认为在产业结合上,还有一段路要走,有很多困难需要克服,为什么上云、数字经济转型是我们的一号工程,统筹、硬件的升级都是需要解决的方向。

    问:作为阿里巴巴集团 CTO、阿里云智能总裁、达摩院院长,是如何分配时间的?这三个角色各自有哪些挑战和压力?哪个的压力是最大的?

    行癫: 挑战和压力都很大,没有一个工作是轻松的,这三重角色可能从阿里巴巴技术体系上能够更易于理解。在阿里的技术体系中,产品研发、技术研发和科学研究是分开的,但也有综合,比如达摩院有数据计算,也有数据处理,比如,李飞飞既是阿里云数据库的负责人,但数据库也会碰到一些前瞻性的问题,比如加密数据库、新型数据库,这些从技术上还有不确定性,因此他同时又在达摩院里进行加密数据库的研究,这是一脉相承的。

    达摩院成立时,我问马老师,要不要请一个专职的院长,马老师(马云)说专职的研究院肯定搞不好,他希望研究院跟技术研发体系有非常强的关联。

    达摩院跟上层的产品和业务还是有非常紧密的关系,比如我们金榕老师(阿里巴巴达摩院机器智能实验室主任)在达摩院里做 AI,需要时时刻刻关心应用方,也需要在 AI 研究的基础上做出一个产品平台提供业务使用,也是身兼多职的。


    △达摩院介绍,作者摄于云栖大会

    当然,我们在研究方向上也有相对独立的,跟现有业务没有任何关系的,比如量子计算、自动驾驶等。

    自动驾驶与芯片一样,我们永远不会将自动驾驶作为产品输出给汽车公司,100% 不会做这样的事情。今天,阿里巴巴作为一个物流的基础平台,会产生一亿个包裹需要配送,但市场上还没有任何一辆车是专为物流设计的,也没有任何一辆车是为未来物流准备的,还有饿了么、盒马等的配送。在不久的未来,中国配送网络会达到上亿的规模,因此一定需要像阿里巴巴这样的公司来提出解决方案,我们在研究,未来是否能够有一个办法实现无人配送。

    但是今天我们研究的自动驾驶实际上是机器人,未来是不是能够实现一个无人自动化的设备,能够将货物从一个地方送到另一个地方,这是我们研究自动驾驶最根本的出发点。千万不要按现有角度看未来,从技术到业务的结合才是最关键的。

    也有很多人问达摩院究竟在干什么,怀疑企业建研究院到底有没有必要,因为原有的研究院模式都不成功,所以导致会产生一个天然反应就是阿里是不是也在走过去的研究院机构模式?事实上我们并不是这样的机构,这之中的分工比较容易理解,自然也就能够理解我的角色的定位。

    作为集团的 CTO,我到底干什么?

    CTO 可能是最不用懂技术的人,作为 CTO,更多的是对未来需求、技术趋势的看法,两者能不能做有效的结合,最重要的是判断未来业务会变成什么样。比如配送,我们需要有什么样的技术做准备?未来的计算到底需要怎样的规模?CTO 要对这个有判断,而并非要在诸如量子计算等方面成为专家。

    对于 CTO 这个角色,阿里 50% 左右的人员都是工程师,怎么构建一个良好的工程师文化,怎么统一工程师的发展、衡量工程师的水平,这里有很多工作要做。阿里有技术委员会、技术小组,我们提倡技术人员的问题自己解决。我们现在有 12 个技术小组,比如贾扬清就是计算组的,他们会在集团范围内看计算当前大家有哪些投入,哪些投入是不必要的,哪些投入是需要合并的,这都是在集团技术委员会的规划下做的事情。

    同时,还有对于人才的培养。阿里集团有三十多家公司,都有 CTO 的角色,当其中一家公司需要 CTO 时,我从哪里去找?这里就需要一个统一的培养机制。

    还有就是阿里内部有一个非常特别的晋升制度,晋升是需要述职的,也需要评委,评委会是技术委员会的技术小组成员,比如候选人是做算法工作的,那么算法组里会有 5 个人来当评委统一处理。

    评委本身也是来自于集团多个技术部门,但同属一个技术小组。阿里巴巴的技术治理体系和其他公司都不一样,作为 CTO,既有物理的,也有非物理的,比如文化、机制等。是不是这样管理的边界就很清晰了?也未必。我们非常鼓励高水平的竞争,最大的价值就是消灭低水平的重复。

    阿里云智能就更简单了,今天有这么多的技术,除却支持好集团业务之外,如何面向行业做好业务输出也需要通盘考虑。

    问:如何评价这十年阿里云为中国技术商业进步产生的影响?

    行癫: 我的确在想这个问题,很多的影响是很难量化的,就好比计算机发明了,谈对于某一个行业有什么影响,就拿制造业来说,计算机对制造业到底造成了什么样的影响,这是很难量化的。

    信息技术、数字化技术也是这样的,很难量化,可以量化的是很小,但影响是非常巨大的。各行各业都产生了一些非常关键性的影响,以消费领域为例,表面来看,好像淘宝、天猫的出现跟零售业没有什么变化,只是多了一个快递送到家里,今天的影响在逐步加深。新消费的概念也是这个逻辑,淘宝一出来,慢慢地影响了制造业,影响了供应链,影响了快递配送,企业间的影响都是物理发生的。

    今天淘宝上 70% 的交易都是花呗付款,这又是一个非常大的影响。因为花呗背后所代表的是信用,有足够多的数据可以来衡量用户的信用。最终这个社会会和数字政府理念一样,技术提供基础,最终打造透明、高效、廉洁的政府,打造全信用化的社会。淘宝的价值只是解决了零售业里非常简单的信任问题,支付宝做担保,淘宝好差评就产生了这么大的价值。如果全社会都解决了信用的问题,那我们社会的运营成本会降的非常低,这背后都要靠技术体系和数据的体系来支撑。

    这样的技术变化非常深刻地改变了零售产业,技术也一样,比如有钉钉和没有钉钉如何来衡量?至少在阿里巴巴内部如果没有钉钉,我们这帮人都不知道怎么搞,还在看邮件,开个会都受到了非常大的影响。很多变化都是不知不觉中造成的影响,云的 IT 基础设施也一样,今天我们很多客户在云上创业,已经不需要关心云的任何问题。比如对于微博而言,在突发热点事件带来数倍流量时,已经能够实现在云上弹性。

    问:阿里的操作系统发布很早,随着平头哥的问世,如何看待当前在这些方面的竞争?

    行癫: 我们是服务客户,并不会去跟别人竞争而存在,我们是面向未来而存在的。

    阿里是最早做操作系统的,至少做了八到九年,而且阿里是第一个量产的操作系统,阿里的手机操作系统出货量到目前为止应该有七八千万台手机的规模,而且现在的日活也有几千万。手机的操作系统阿里是绝对没有问题的,而且在逐渐衍生至其他方面。

    阿里今天做一件事情,比如我们去 EMC、高端存储、数据库等等,我们是提供了新的思路,并不能说我们的数据库比甲骨文好,我们就是提供了解决方案,就是用普通的硬件、用互联网的技术能够构建出一个更强壮的、更面向未来的系统,这是阿里对这个事情的贡献。

    我们以后大量的操作都在云端,新型的操作系统应该是跟云完全融合的,大部分的中心操作都在云端,假如要播放一个电影已经实现全部在云端,要做文档,文档协同也都在云端,这是我们面向未来要做的。

    很多人讲今天为什么我们要取代端上做一个新的东西,以后我们会不会有一个端,是不是手机成为我们办公最主要的端,这是我们需要面向未来构建的系统。有可能所有人都在移动端上都是协同的,所有的操作都是在云端完成的。

    比如 Google 游戏云,我们也在做。做游戏要有一个高配置的电脑,有非常好的显卡。那么,中国什么时候会推出一款超越世界上最好的显卡,因为它有强大的计算力。但今天不用了,云端全部都渲染化了,5G 也有了,以后就用一个显示屏,领先者永远是领先者,落后者永远是落后者,因为他的投入比你大,他的先发优势比你强,你为什么做得比人家好?唯一的原因是你有创新。

    阿里巴巴走到今天,不管是电商、支付宝、云,都是行业的创新者,我们完全是基于自身对未来的判断,基于我们自己对于行业的布局来看待这个问题。

    展开全文
  • 判断推理——逻辑判断

    千次阅读 2020-07-10 21:42:32
    第一节:逻辑判断: 第二节:翻译推理 第三节:组合排列 第四节:日常结论 第五节:逻辑论证 第一节:翻译推理 一、题目特征: 1.题干和选项中出现先比较明显的逻辑关联词(条件关键词…) 2.提问方式是“可以推出”...

    第一节:逻辑判断
    第二节:翻译推理
    第三节:组合排列
    第四节:日常结论
    第五节:逻辑论证

    第一节:翻译推理

    一、题目特征:
    1.题干和选项中出现先比较明显的逻辑关联词(条件关键词…)
    2.提问方式是“可以推出””不能推出“等
    二、解题思维:
    1.先翻译(将体题干中逻辑关联词所在句子翻译成用箭头的形式)
    2.推理

    一、翻译规则之“前推后” 前——>后
    典型关联词:如果…,那么…
    若…则;只要…就…;所有…都…;…一定(必须)…

    例如:如果你能考上公务员,那么我给你买雪糕
    考上公务员---->给你买雪糕
    如果真---->那么真

    二、推理规则之“逆否等价”
    A–>B 等价于 -B–>-A
    口诀:肯前必肯后;否后必否前;否前肯后无必然结论/不确定(可能、可能不)

    如果某人是北京人,那么一定是中国人
    北京人–>中国人
    不是中国人—>不是北京人

    在这里插入图片描述
    答案:C 稳定---->上涨;涨幅较小—>不负面
    在这里插入图片描述
    答案A 上报–>开除;开除–>考核否决;不上报–>作弊愈演愈烈
    作弊不严重–> 上报–>开除–>考核否

    三、翻译规则之“后推前”
    典型关联词:只有…才
    等价关联词:不…不…;除非…否则不…;…是…的基础/假设/前提/关键;…是…的必要/必不可少条件;
    谁必不可少谁放在箭头后面

    例句:只有通过笔试,才能考上公务员
    考上–>通过笔试 等价于 不通过笔试–>没考上

    特殊的:
    除非A否则非B:B—>A
    除非A否则B: -B—>A
    氧气是人生存的必要条件
    人生存的必要条件是氧气
    生存---->氧气(重要的放箭头后面)

    宋文涛离不开钱
    宋文涛—>钱(重要放后面)

    每个人的成功都离不开夜以继日的努力
    成功–>努力(重要的放在后面)

    在这里插入图片描述
    智者–>谦虚 谦虚–>认识到自己的不足 听不进去意见–>认识不到不足
    智者–>谦虚–>认识到自己不足–>听进去意见
    答案:B

    在这里插入图片描述
    不…勿 ---->不 …不… 施于人—>己所欲
    答案:A(选非)

    四、且和或

    A且B:二者都成立
    A或B:二者至少一个成立
    要么A,要么B:二者只有一个成立。(如果都成立就说明为假)

    等价关联词:
    且:和、既…又…、不仅…而且…、…但是…
    或:或者…或者、…和…至少一个
    要么…要么…: …和…只有一个

    我长得帅并且有才华—>我长得帅
    如果这句话为真,可以这么推
    参加国考或者参加省考–>参加省考
    如果这句话为真,也不能这么推,不确定witch那个真 只能推出 省考或者国考

    或的翻译:否1–>1 或关系为真时,否定一项可以得到另一项为真。
    周洁:我不讲课或者不唱歌
    涛哥:你必须讲课
    周洁该怎么办: 讲课否定了不讲课,所以推出另一个为真。 不唱歌
    在这里插入图片描述
    有罪 || 疯子
    有罪—>处死
    疯子—>接受住院
    证据不足—>不应该处死
    答案C 证据不足—>不出四—>无罪 无罪就是疯子—>住院
    在这里插入图片描述
    在这里插入图片描述
    答案C

    五、推理规则之“德摩根定律”
    (1)-(A且B) = -A或-B
    (2)-(A或B) = -A且-B

    我并非聪明又美丽=我或者不聪明或者不美丽
    并非 不想当官也不想发财 = 想当官或者想发财

    在这里插入图片描述
    风险上升^信贷需求不足---->资产荒
    没有陷入资产荒---->风险未上升或者有效信贷需求足
    答案A 对于答案C应该有三种情况

    六、推理方式
    提问方式:一下哪项中的推理形式/结构与题干中的推理形式/结构相同?
    完全跟着学就好
    在这里插入图片描述
    A—>B -B—>-A
    A 和B都是 A—>B 与题意不符
    答案:C
    在这里插入图片描述
    答案D

    翻译推理总结
    翻译:如果那么;只有才
    推理:逆否等价;否1推1(或命题用);摩根定律
    且、或、要么

    第二节 组合排列

    一、特征
    1.题干给出两组及两组以上对象
    2.给出机组对象之间的关系

    一、排除法、代入法
    1.排除法:读一句,排一句
    2.代入法:选项代入题干验证
    题干条件确定优先排除;题干条件不确定尝试代入。
    题干明确告诉都是真的都是假的------条件确定
    题干没有明确告诉都是真的都是假的,比如一半真的----条件不确定
    在这里插入图片描述
    答案C
    方法一:排除法,边读1234边排除选项
    方法二:推理

    参加 参加 不参加 不参加 不参加 参加

    戊不能参加,由2得,乙必须参加。从而3得,丙不能参加。从而1的甲必须参加。从而4得,丁不能参加

    在这里插入图片描述
    答案D
    方法一:代入
    A代入,第一句都正确了,A排除
    B代入,第一句都错了,B排除
    C代入,第三句都正确了,C排除
    方法二:
    假设第一句前面是正确,后面是错误。
    甲和丰,乙不在团结。那么2中,前半句错误,后半句正确,丙在和丰。-----出现矛盾

    合丰村 团结 杨梅
    甲、丙

    所以第一句前面是错误,后面是正确
    甲不在和丰,乙在团结。第二句前半部分就错误了,后半句正确丙在和丰。则第三句前面正确,后面错误。

    合丰村 团结 杨梅

    二、辅助技巧
    1.最大信息(条件出现此处最多的词)
    以此作为推理起点
    2.符号><=
    往往涉及年龄、成绩、收入、身高等大小比较

    在这里插入图片描述
    答案C
    方法一:条件最多的入手
    行政管理多:张不做、王不做、李不做----->赵行政 排除BD
    张 部 研发—> 赵 不行政 == 赵行政—>张研发 排除A
    方法二:
    张 部 研发—> 赵 不行政 == 赵行政—>张研发

    行政 销售 研发 安保
    张(√)
    赵(√)

    行政只有赵一个人,所以赵行政,张研发。那么保安只有王,所以李只能销售。
    在这里插入图片描述
    (1)(2)(3) 甲>乙>丙 >戊>丁(己)
    答案D
    在这里插入图片描述

    1 2 3 4 5 6 7 8 9 10
    历史 (非儿童) 历史 科技 科技 (非文学) (非儿童) 历史

    历史和科技放完了,只剩下儿童和文学。所以非文学就是儿童,6一定是儿童书。
    答案:C
    在这里插入图片描述
    拥有相机的?
    手机 3,电脑2, 相机1。
    有相机的人必须同时有手机和电脑
    4得,甲乙要么都有电脑要么都没有电脑.
    5乙,丙手机情况相同,都有都没有,手机3个,所以乙丙不可能同时没有。那就是同时有。
    6丙丁不同,丙有丁没有。有三部手机,所以甲也有。
    4如果都有,那么电脑一共两个,丙丁都没有,丁又不可能有相机(只有全有的人才能有相机)所以丁全×,不能,所以。甲乙都没电脑。
    所以丙三个都有

    手机 电脑 相机
    ×
    ×
    ×

    练习
    在这里插入图片描述
    天晴—>拔河
    风大—>不拔河 拔河—>风不大
    不拔河–>演讲
    答案B

    在这里插入图片描述
    答案D
    在这里插入图片描述
    答案A

    第三节 日常结论

    一、题目特征
    题干:类言语、无逻辑关联词
    问题:由此可以推出/不能推出
    在这里插入图片描述鲸鱼有62种,鲸鱼有62类——>属于偷换概念,种和类不是一个概念
    鲸鱼有62种,说海中哺乳动物至少有62种---->属于扩大范围,这种说法是对的。所以扩大范围需要判断。

    警惕:“四大坑王”:更、最、越、首(首要 首先)
    在这里插入图片描述
    答案:C
    ABD选项中都有四大坑王:最
    B:保值切好转手 与 二手车市场不同
    在这里插入图片描述
    答案A
    都是必须,就比较。
    A相对于D更全面,即涉及到APP又涉及到运营商。D只涉及大数据。所以A更好。
    在这里插入图片描述
    我的答案D,正确答案A
    北半球人多,人类活动影响二氧化碳排放
    南半球虽然人少,但也达到了该值
    BC无中生有
    D北极!!!!北半球 偷换概念。 并且 远超这个词太大了。 超过还可以,但是远超不行。
    在这里插入图片描述
    答案B

    在这里插入图片描述
    答案B
    A要么…要么…二选一。 并且第一种不能去清除体内自由基,避免只能减少产生。

    第四节 逻辑论证

    加强题型:赞同
    削弱题型:反对

    加强类
    常见提问方法:
    如果一下各项为真,最能加强、支持、赞同、证明上述论断的是?
    一下哪项为真,是上述论断成立的前提、假设、必要条件

    如果一下各项为真,最不能加强上述论断的是?
    ——有可能是削弱的有可能是无关的。所以直接找加强的排除掉。
    ——如果一个无关一个削弱,选择削弱的。

    一、加强之搭桥(力度最强)

    楼市成交量在增长,因此楼市价格会上涨。 练习:
    1.成交量的增长会带动楼价的上涨
    2.楼市成交量会影响楼市价格

    在这里插入图片描述
    论点:火星有智慧生命
    论据:火星表面的黑暗是海洋,明亮是陆地。---->观测到植被是一个世纪之后的事情,不能是赫歇尔的依据。
    联系:海洋、陆地、生命之间的关系
    因为:植物不是论据,所以排除BD。A 论点推论据,C论据推论点。然后优选:论据推论点
    答案C
    在这里插入图片描述
    答案A
    从选项出发:
    B -工作----> -参加
    D 参加–>工作 BD表述同一个意思
    C 参加—>工作完了。BD表述是一个意思
    A 工作–>参加 与BD不同,所以选A。

    二、加强之补充论据
    1.必要条件:选项为论点成立的必要条件(没他不行)
    提问方式为前提、假设、必要条件且无搭桥选项
    2.解释原因:论点成立的原因
    3.举例支持:论点成立个例

    在这里插入图片描述
    答案B
    在这里插入图片描述
    答案B
    在这里插入图片描述
    答案D
    不同矿物种类可以有相同的化学成分
    A二氧化碳不是矿物
    B变色? 不是化学成分
    C分析化学仪器…跟描述无关
    D

    练习:
    在这里插入图片描述
    答案:B
    AB似乎都不错,但是A讲述的物种,相对朱鹮来说范围扩大了。而且自然淘汰也不一定的事情嘛。
    在这里插入图片描述
    答案D
    选项中出现搭桥项,就不用考虑别的了。

    削弱类:
    如果一下各项为真,最能质疑、反驳、削弱、反对上述论断的是
    如果一下各项为真,最不能质疑上述论断的是

    三、削弱之否定论点(力度最强&最常考)
    选项特征:与论点表述意思相反
    答题技巧:
    1.读题,找论点
    2.自己想论点的反面表述
    3.找相关论述
    在这里插入图片描述
    答案:D
    B答案,牙齿不是骨骼。如果把牙齿换成骨骼就是加强项

    在这里插入图片描述
    边缘运动…说明人少 削弱:玩的人都。
    AB都是厉害,不能证明玩的人多。
    答案C

    在这里插入图片描述
    答案B
    你说E能治,那我就选不能治。

    在这里插入图片描述
    答案:C
    是一个手机电脑的比较过程。
    ABD只提到了一种,没有比较。

    例题:呼吸道感染的人来说,蜂蜜要比止咳药更有效。
    A蜂蜜不能治疗呼吸道感染,只能缓解症状。是可以削弱题干的。

    四、削弱之拆桥
    题型特点:
    1.论据论点话题不一致
    2.提问方法为“削弱论证”是,优先考虑拆桥。
    选项特点:
    同时包含论点和论据中的关键词,并否定论点和论据之间的必然联系。
    在这里插入图片描述
    答案:D
    因为高水准,所以高收视率。在这里插入图片描述
    否定论点:法律不能缓解青少年犯罪,没有这种选项。那就拆桥
    法律纠正-------教育缺失---->犯罪------------家庭教育不是犯罪的唯一

    五、削弱之否定论据
    在这里插入图片描述

    小陶身材很差,所以小涛一定很丑
    论据:身材差 论点:小涛丑
    否定论点:不丑
    拆桥:身材和丑没关系
    否定论据:小涛身材不差

    在这里插入图片描述
    答案B
    论点:不可行
    论据:增加企业负担,增加女性就业难度
    A:应当…(提对策) 这种选项一般不选
    D:应…也是提对策
    在这里插入图片描述
    身体:不能反驳专家观点。
    答案:C
    A:提出一个其他原因 拆桥是拆论点和论据之间的关系,它因是:论点中因果关系
    在这里插入图片描述
    答案:D

    展开全文
  • 判断指定App是否位于前台的方法

    千次阅读 2016-03-08 09:57:08
    提供6种方法来判断App处于前台还是后台,并且封装成工具类供大家使用 最后一种方法堪称Android黑科技(非原创),既可以突破Android5.0以上的权限封锁,获取任意前台App的包名,又不需要权限,欢迎大家star我的新...

    原文地址:http://p.codekk.com/detail/Android/wenmingvs/AndroidProcess

    提供6种方法来判断App处于前台还是后台,并且封装成工具类供大家使用

    最后一种方法堪称Android黑科技(非原创),既可以突破Android5.0以上的权限封锁,获取任意前台App的包名,又不需要权限,欢迎大家star我的新项目

    Download Link

    2016.2.11更新------感谢@EffectiveMatrix大神带来的新的判断前后台的方法

    六种判断方法展示

    enter image description here

    用法

    传入Context参数与想要判断是否位于前台的App的包名,会返回ture或者false表示App是否位于前台

    
    //六种方法任选其一
    
    //使用方法一
    Boolean isForeground = BackgroundUtil.getRunningTask(context, packageName);
    //使用方法二
    Boolean isForeground = BackgroundUtil.getRunningAppProcesses(context, packageName);
    //使用方法三
    Boolean isForeground = BackgroundUtil.getApplicationValue(context);
    //使用方法四
    Boolean isForeground = BackgroundUtil.queryUsageStats(context, packageName);
    //使用方法五
    Boolean isForeground = BackgroundUtil.getFromAccessibilityService(context, packageName);
    //使用方法六
    Boolean isForeground = BackgroundUtil.getLinuxCoreInfo(context, packageName);
    

    六种方法的区别

    方法 判断原理 需要权限 可以判断其他应用位于前台 特点
    方法一 RunningTask Android4.0系列可以,5.0以上机器不行 5.0此方法被废弃
    方法二 RunningProcess 当App存在后台常驻的Service时失效
    方法三 ActivityLifecycleCallbacks 简单有效,代码最少
    方法四 UsageStatsManager 需要用户手动授权
    方法五 通过Android无障碍功能实现 需要用户手动授权
    方法六 读取/proc目录下的信息 当proc目录下文件夹过多时,过多的IO操作会引起耗时

    方法一:通过RunningTask

    enter image description here

    原理
    当一个App处于前台的时候,会处于RunningTask的这个栈的栈顶,所以我们可以取出RunningTask的栈顶的任务进程,看他与我们的想要判断的App的包名是否相同,来达到效果

    缺点
    getRunningTask方法在Android5.0以上已经被废弃,只会返回自己和系统的一些不敏感的task,不再返回其他应用的task,用此方法来判断自身App是否处于后台,仍然是有效的,但是无法判断其他应用是否位于前台,因为不再能获取信息

    方法二:通过RunningProcess

    enter image description here

    原理
    通过runningProcess获取到一个当前正在运行的进程的List,我们遍历这个List中的每一个进程,判断这个进程的一个importance 属性是否是前台进程,并且包名是否与我们判断的APP的包名一样,如果这两个条件都符合,那么这个App就处于前台

    缺点
    在聊天类型的App中,常常需要常驻后台来不间断的获取服务器的消息,这就需要我们把Service设置成START_STICKY,kill 后会被重启(等待5秒左右)来保证Service常驻后台。如果Service设置了这个属性,这个App的进程就会被判断是前台,代码上的表现就是appProcess.importance的值永远是 ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND,这样就永远无法判断出到底哪个是前台了。

    方法三:通过ActivityLifecycleCallbacks

    enter image description here

    原理
    AndroidSDK14在Application类里增加了ActivityLifecycleCallbacks,我们可以通过这个Callback拿到App所有Activity的生命周期回调。

     public interface ActivityLifecycleCallbacks {
            void onActivityCreated(Activity activity, Bundle savedInstanceState);
            void onActivityStarted(Activity activity);
            void onActivityResumed(Activity activity);
            void onActivityPaused(Activity activity);
            void onActivityStopped(Activity activity);
            void onActivitySaveInstanceState(Activity activity, Bundle outState);
            void onActivityDestroyed(Activity activity);
        }
    

    知道这些信息,我们就可以用更官方的办法来解决问题,当然还是利用方案二里的Activity生命周期的特性,我们只需要在Application的onCreate()里去注册上述接口,然后由Activity回调回来运行状态即可。

    可能还有人在纠结,我用back键切到后台和用Home键切到后台,一样吗?以上方法适用吗?在Android应用开发中一般认为back键是可以捕获的,而Home键是不能捕获的(除非修改framework),但是上述方法从Activity生命周期着手解决问题,虽然这两种方式的Activity生命周期并不相同,但是二者都会执行onStop();所以并不关心到底是触发了哪个键切入后台的。另外,Application是否被销毁,都不会影响判断的正确性

    方法四:通过使用UsageStatsManager获取

    enter image description here

    原理
    通过使用UsageStatsManager获取,此方法是Android5.0之后提供的新API,可以获取一个时间段内的应用统计信息,但是必须满足一下要求

    使用前提

    1. 此方法只在android5.0以上有效
    2. AndroidManifest中加入此权限
      <uses-permission xmlns:tools="http://schemas.android.com/tools" android:name="android.permission.PACKAGE_USAGE_STATS" tools:ignore="ProtectedPermissions" />
      
    3. 打开手机设置,点击安全-高级,在有权查看使用情况的应用中,为这个App打上勾

    enter image description here

    方法五:通过Android自带的无障碍功能

    非常感谢@EffectiveMatrix大神带来的新的判断前后台的方法

    此方法属于他原创,具体的博文参照这里http://effmx.com/articles/tong-guo-android-fu-zhu-gong-neng-accessibility-service-jian-ce-ren-yi-qian-tai-jie-mian/

    此方法无法直观的通过下拉通知视图来进行前后台的观察,请到LogCat中进行观察即可,以下是LogCat中打印的信息

    enter image description here

    原理
    Android 辅助功能(AccessibilityService) 为我们提供了一系列的事件回调,帮助我们指示一些用户界面的状态变化。 我们可以派生辅助功能类,进而对不同的 AccessibilityEvent 进行处理。 同样的,这个服务就可以用来判断当前的前台应用

    优势

    1. AccessibilityService 有非常广泛的 ROM 覆盖,特别是非国产手机,从 Android API Level 8(Android 2.2) 到 Android Api Level 23(Android 6.0)
    2. AccessibilityService 不再需要轮询的判断当前的应用是不是在前台,系统会在窗口状态发生变化的时候主动回调,耗时和资源消耗都极小
    3. 不需要权限请求
    4. 它是一个稳定的方法,与 “方法6”读取 /proc 目录不同,它并非利用 Android 一些设计上的漏洞,可以长期使用的可能很大
    5. 可以用来判断任意应用甚至 Activity, PopupWindow, Dialog 对象是否处于前台

    劣势

    1. 需要要用户开启辅助功能
    2. 辅助功能会伴随应用被“强行停止”而剥夺

    方法六:读取Linux系统内核保存在/proc目录下的process进程信息

    enter image description here

    此方法并非我原创,原作者是国外的大神,GitHub项目在这里,https://github.com/jaredrummler/AndroidProcesses,也一并加入到工程中,供大家做全面的参考选择

    原理
    无意中看到乌云上有人提的一个漏洞,Linux系统内核会把process进程信息保存在/proc目录下,Shell命令去获取的他,再根据进程的属性判断是否为前台

    优点

    1. 不需要任何权限
    2. 可以判断任意一个应用是否在前台,而不局限在自身应用

    缺点

    1. 当/proc下文件夹过多时,此方法是耗时操作

    用法
    获取一系列正在运行的App的进程

    List<AndroidAppProcess> processes = ProcessManager.getRunningAppProcesses();
    

    获取任一正在运行的App进程的详细信息

    AndroidAppProcess process = processes.get(location);
    String processName = process.name;
    
    Stat stat = process.stat();
    int pid = stat.getPid();
    int parentProcessId = stat.ppid();
    long startTime = stat.stime();
    int policy = stat.policy();
    char state = stat.state();
    
    Statm statm = process.statm();
    long totalSizeOfProcess = statm.getSize();
    long residentSetSize = statm.getResidentSetSize();
    
    PackageInfo packageInfo = process.getPackageInfo(context, 0);
    String appName = packageInfo.applicationInfo.loadLabel(pm).toString();
    

    判断是否在前台

    if (ProcessManager.isMyProcessInTheForeground()) {
      // do stuff
    }
    

    获取一系列正在运行的App进程的详细信息

    List<ActivityManager.RunningAppProcessInfo> processes = ProcessManager.getRunningAppProcessInfo(ctx);
    展开全文
  • 2) 负判断的逻辑形式:并非P 或者 ¬P  Ⅰ. 肢判断P : 这个P可以是任何类型的判断。  Ⅱ. 联结项: “并非” 或 “¬”   3) 负判断的常用联结词:  “非…” 、”…是假的”、”不是…”等,都是并非的...
  • 1,wx.login 调用时,用户的 session_key 可能会被更新而致使旧 session_key 失效(刷新机制存在最短周期,如果同一个用户短时间内多次调用 wx.login,并非每次调用都导致 session_key 刷新)。开发者应该在明确需要...
  • JVM如何判断对象能否被回收

    万次阅读 多人点赞 2019-12-16 16:11:57
    就算在可达性分析算法中不可达的对象,也并非一定会回收,这个时候不可达的对象暂时处于暂缓的阶段,一个对象要真正宣告死亡,至少要经历两次标记的过程,当对象进行可达性分析而不可达时,它会被第一次标记并且进行...
  • java堆内存中存放着几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象之中哪些还“存活”着,哪些已经“死去”。那么GC具体通过什么手段来判断一个对象已经”死去”的?
  • 理解什么是线程安全性、原子性

    万次阅读 2019-12-29 11:56:30
    进程想要执行任务需要依赖线程,换句话说就是进程中的最小执行单位就是线程,并且一个进程中至少有一个线程。提到多线程这里要说两个概念,就是串行和并行,搞清楚这个我们才能更好的理解多线程。所谓串行其实是相...
  • Android--判断App处于前台还是后台的方案

    万次阅读 多人点赞 2018-01-18 21:24:30
    很多场景下,都需要判断某个App处于前台还是后台。本文集网上编写的前台判断方案于一体。 目前,有6种方案: 方 法 判断原理 需要权限 可以判断其他应用位于前台 特点 ① RunningTask ...
  • 原文:http://p.codekk.com/detail/Android/wenmingvs/AndroidProcess AndroidProcess ... 简介:判断指定 App 是否位于前台的方法 标签:getRunningTask替代-判断应用是否在前台-获取程序使用信息- 提供 6 种...
  •   reordering更新算法的原理就是这样,它非常简单,然而如果你试着操作一下,比如用packetdrill等工具去复现以上的原理,就会发现事情并非如上述那般单纯,这是为什么?   TCP是作为整体运作的,没有任何一个...
  • js检测判断链接是否有效

    万次阅读 2016-12-12 00:33:27
    js检测判断链接是否有效 一般使用 ajax 是在前台向后台传递命令而执行的,命令执行成功与否可以通过 ajax 的 success:function(data){} 和 error:fuction(data){} 返回的 data 作判断,但今天在项目上却遇到了一种...
  • 对象是否存活,可以这样判断

    千次阅读 2020-08-19 11:54:56
    首先说为什么判断是否存活,当垃圾收集器在对堆进行回收前,第一就是要确定对象哪些是还在被引用的或者后面还需要被引用的,即存活,哪些是已经“死去”(即不可能再被任何途径使用) 1、引用计数算法 在对象中...
  • 逻辑判断与循环——True&False标签:Python 判断与循环是编程的灵魂,如果要实现一个复杂的功能和程序,判断与循环是必不可少的。 if-ealse是常见的逻辑判断手段,但在进行逻辑判断之前,需要了解逻辑判断的基本...
  • 网络爬虫判断页面是否更新

    千次阅读 2013-11-14 19:53:20
     当第二次请求页面访问的时候,该页面如果未更新,则会反馈一个304代码,而搜索引擎也会利用这个304http状态码来进行判断页面是否更新。  首先第一次肯定是要爬取网页的,假设是A.html,这个网页存储在磁盘上...
  • Java单例模式——并非看起来那么简单

    万次阅读 多人点赞 2016-07-20 23:48:19
    如果某个单例使用的次数少,并且创建单例消耗的资源较多,那么就需要实现单例的按需创建,这个时候使用懒汉模式就是一个不错的选择。但是这里的懒汉模式并没有考虑线程安全问题,在多个线程可能会并发调用它的...
  • [c++,algorithm] 哈密尔顿回路判断

    千次阅读 2014-11-07 16:08:16
    实验题目: 使用C++语言来判断shiyong图
  • 判断无向图中是否有回路

    万次阅读 多人点赞 2014-12-15 17:05:10
    关于无向图判断是否存在回路的方法:   第一种是类似有向图拓扑排序的思路:(参考有向图判断回路的解答)   如果存在回路,则必存在一个子图,是一个环。因此该子图中所有顶点入度>=1。 算法:   在有向图中...
  • 形式逻辑(普通逻辑)6:复合判断

    千次阅读 2006-11-28 09:29:00
    直言判断是简单判断。复合判断是简单判断的组合。 基本的复合判断包括假言判断、联言判断、选言判断和负判断。 假言判断:对条件关系的判断。条件关系分为三种:充分条件、必要条件和充分必要条件。 充分条件假言...
  • RPA是干什么的?

    万次阅读 2020-09-18 12:56:06
    一句话让你明白这个技术是什么,一种模拟电脑鼠标键盘操作且可以代替人进行重复性、规则化电脑端操作的技术,展开想象会发现能够应用在公司各个部门各个业务线,简单整理如下: 感觉还是很迷糊? 钉钉跟客户发...
  • 怎么判断set集合是否为空

    万次阅读 2013-01-13 17:22:59
    这里同样的元素指的是以equals()方法判断的 2、列表List  List列表中的记录元素添加的顺序,而且可以填充相同的元素。 3、映射Map  映射中包含的都是“键(Key)-值(value)”对,且一个键对应一个值。所以键是不...
  • 过滤标识符并非难事,因为这些标识符都有一定的规则,只要按照不同的标识符取得相应的信息即可。但在识别这些信息的时候,需要同步记录许多版式信息,例如文字的字体大小、是否是标题、是否是加粗显示、是否是页面的...
  • 如果你希望为TensorFlow保存一个能够用于产品用的模型,并且这个模型能够被C/C++/Java/NodeJS等调用(类似Caffe模型),你需要了解GraphDef。用GraphDef方式保存的模型是一个独立地Protobuf文件,看一下维基百科对...
  • 集成电路布图设计独创性判断标准

    千次阅读 2018-10-31 11:02:28
    中国《集成电路布图设计保护条例》第四条规定:“受保护的集成电路布图设计应当具有独创性,即该集成电路布图设计是创作者自己智力劳动成果,并且在其创作时该集成电路布图设计在集成电路布图设计创作者和集成电路...
  • tcp 服务端如何判断客户端断开连接

    千次阅读 2019-06-25 15:57:47
    例如,如果正好在某个中间路由器崩溃、重启的时候发送存活探测,TCP就将会认为客户端主机已经崩溃,但事实并非如此。 一些服务器应用程序可能代表客户端占用资源,它们需要知道客户端主机是否崩溃。存活定时器...
  • JS来判断文本框内容改变事件

    万次阅读 2011-06-22 16:14:00
    a)当前对象属性改变,并且是由键盘或鼠标事件激发的(脚本触发无效) b)当前对象失去焦点(onblur);    onpropertychange的话,只要当前对象属性发生改变,都会触发事件,但是它是IE专属的;   o
  • a)当前对象属性改变,并且是由键盘或鼠标事件激发的(脚本触发无效) b)当前对象失去焦点(onblur); onpropertychange的话,只要当前对象属性发生改变,都会触发事件,但是它是IE专属的;  oninput是on...
  • 素数判断的几种方法代码实现及其复杂度分析    一、 朴素判断素数 根据素数的定义,约数只有1和它本身的整数称为素数,假设一个整数为n,于是最朴素的判断n是否为素数的方法就是从2到n-1都枚举一遍,判断是否存在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 114,764
精华内容 45,905
关键字:

并非并且是什么判断